kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
106 lines (102 loc) • 3.51 kB
JavaScript
;
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