kinetic-slider
Version:
A WebGL-powered kinetic slider component using PIXI.js
1 lines • 8.04 kB
Source Map (JSON)
{"version":3,"file":"twistFilter.cjs","sources":["../../../src/filters/twistFilter.ts"],"sourcesContent":["import { TwistFilter } from 'pixi-filters';\nimport { type TwistFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a Twist filter that applies a swirl/twist effect to an object\n *\n * The TwistFilter makes display objects appear twisted in the given direction,\n * creating a swirl effect from a defined center point.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the Twist filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createTwistFilter(config: TwistFilterConfig): FilterResult {\n // Get shader manager instance\n const shaderManager = ShaderResourceManager.getInstance();\n\n // Create options object for the filter\n const options: any = {};\n\n // Apply configuration values if provided, otherwise use defaults\n if (config.angle !== undefined) options.angle = config.angle;\n if (config.radius !== undefined) options.radius = config.radius;\n if (config.offset !== undefined) options.offset = config.offset;\n if (config.offsetX !== undefined) options.offsetX = config.offsetX;\n if (config.offsetY !== undefined) options.offsetY = config.offsetY;\n\n // Create a unique key for this filter configuration\n const shaderKey = 'twist-filter';\n\n // Create the filter with options\n const filter = new TwistFilter(options);\n\n // Register filter with shader manager\n try {\n shaderManager.registerFilter(filter, shaderKey);\n } catch (error) {\n console.warn('Error registering twist filter with shader manager:', error);\n }\n\n /**\n * Update the filter's intensity based on the configuration\n *\n * @param intensity - New intensity value (0-10 scale)\n */\n const updateIntensity = (intensity: number): void => {\n // Normalize intensity to a 0-10 scale\n const normalizedIntensity = Math.max(0, Math.min(10, intensity));\n\n // Determine which property to adjust based on config\n if (config.primaryProperty) {\n switch (config.primaryProperty) {\n case 'angle':\n // Map 0-10 to 0-20 for angle\n // At 0, no twist, at 10, strong twist\n filter.angle = normalizedIntensity * 2;\n break;\n case 'radius':\n // Map 0-10 to 50-500 for radius\n // Smaller radius = tighter twist\n filter.radius = 50 + (normalizedIntensity * 45);\n break;\n case 'center':\n // This would adjust both offsetX and offsetY\n // to move the center from one side to another\n // For simplicity, we'll move diagonally from top-left to bottom-right\n const position = normalizedIntensity / 10; // 0-1 range\n filter.offsetX = position - 0.5; // -0.5 to 0.5 range\n filter.offsetY = position - 0.5; // -0.5 to 0.5 range\n break;\n case 'offsetX':\n // Map 0-10 to -0.5 to 0.5 range for x offset\n filter.offsetX = (normalizedIntensity / 10) - 0.5;\n break;\n case 'offsetY':\n // Map 0-10 to -0.5 to 0.5 range for y offset\n filter.offsetY = (normalizedIntensity / 10) - 0.5;\n break;\n default:\n // Default to angle adjustment\n filter.angle = normalizedIntensity * 2;\n }\n } else {\n // Default behavior - adjust angle\n filter.angle = normalizedIntensity * 2;\n }\n };\n\n // Set initial intensity\n updateIntensity(config.intensity);\n\n /**\n * Reset the filter to configured state or default values if not specified\n */\n const reset = (): void => {\n // Reset angle to config value or default\n filter.angle = config.angle !== undefined ? config.angle : 4;\n\n // Reset radius to config value or default\n filter.radius = config.radius !== undefined ? config.radius : 200;\n\n // Handle offset coordinates - prioritize individual properties over point object\n if (config.offsetX !== undefined) {\n filter.offsetX = config.offsetX;\n } else if (config.offset?.x !== undefined) {\n filter.offsetX = config.offset.x;\n } else {\n filter.offsetX = 0; // Default offsetX\n }\n\n if (config.offsetY !== undefined) {\n filter.offsetY = config.offsetY;\n } else if (config.offset?.y !== undefined) {\n filter.offsetY = config.offset.y;\n } else {\n filter.offsetY = 0; // Default offsetY\n }\n };\n\n /**\n * Release any WebGL resources used by this filter\n */\n const dispose = (): void => {\n try {\n shaderManager.releaseFilter(filter, shaderKey);\n } catch (error) {\n console.warn('Error releasing twist filter shader:', error);\n }\n filter.destroy();\n };\n\n return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","TwistFilter"],"mappings":"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"}