UNPKG

kinetic-slider

Version:

A WebGL-powered kinetic slider component using PIXI.js

106 lines (102 loc) 3.51 kB
'use strict'; var pixiFilters = require('pixi-filters'); var ShaderResourceManager = require('../managers/ShaderResourceManager.cjs'); function createAsciiFilter(config) { const shaderManager = ShaderResourceManager.ShaderResourceManager.getInstance(); const colorKey = config.color ? JSON.stringify(config.color) : "default"; const shaderKey = `ascii-filter-${config.size || 8}-${colorKey}-${config.replaceColor || false}`; const filter = new pixiFilters.AsciiFilter(); try { shaderManager.registerFilter(filter, shaderKey); } catch (error) { console.warn("Error registering ASCII filter with shader manager:", error); } const configSize = config.size !== void 0 ? config.size : 8; const configColor = config.color; const configReplaceColor = config.replaceColor; let isFirstActivation = true; let pendingTimeout = null; filter.size = configSize; if (configColor !== void 0) { filter.color = configColor; } filter.replaceColor = false; console.log("AsciiFilter created with initial properties:", { size: filter.size, color: filter.color, replaceColor: filter.replaceColor }); const forceRefresh = (intensity) => { if (pendingTimeout !== null) { clearTimeout(pendingTimeout); pendingTimeout = null; } const normalizedIntensity = Math.max(0, Math.min(10, intensity)); filter.size = Math.max(2, Math.round(2 + normalizedIntensity * 1.8)); if (configColor !== void 0) { filter.color = configColor; } if (configReplaceColor === true) { filter.replaceColor = false; pendingTimeout = window.setTimeout(() => { filter.replaceColor = true; pendingTimeout = null; console.log("AsciiFilter replaceColor applied after refresh"); }, 50); } else if (configReplaceColor !== void 0) { filter.replaceColor = configReplaceColor; } }; const updateIntensity = (intensity) => { if (isFirstActivation) { console.log("First activation of AsciiFilter - forcing complete refresh"); forceRefresh(intensity); isFirstActivation = false; } else { const normalizedIntensity = Math.max(0, Math.min(10, intensity)); filter.size = Math.max(2, Math.round(2 + normalizedIntensity * 1.8)); if (configColor !== void 0) { filter.color = configColor; } if (configReplaceColor !== void 0) { filter.replaceColor = configReplaceColor; } } }; const reset = () => { if (pendingTimeout !== null) { clearTimeout(pendingTimeout); pendingTimeout = null; } filter.size = configSize; if (configColor !== void 0) { filter.color = configColor; } else { filter.color = 16777215; } if (configReplaceColor === true) { isFirstActivation = true; filter.replaceColor = false; } else if (configReplaceColor !== void 0) { filter.replaceColor = configReplaceColor; } else { filter.replaceColor = false; } console.log("AsciiFilter reset to initial state"); }; const dispose = () => { if (pendingTimeout !== null) { clearTimeout(pendingTimeout); pendingTimeout = null; } try { shaderManager.releaseFilter(filter, shaderKey); } catch (error) { console.warn("Error releasing ASCII filter shader:", error); } filter.destroy(); }; return { filter, updateIntensity, reset, dispose }; } exports.createAsciiFilter = createAsciiFilter; //# sourceMappingURL=asciiFilter.cjs.map