{"version":3,"file":"radialBlurFilter.cjs","sources":["../../../src/filters/radialBlurFilter.ts"],"sourcesContent":["import { RadialBlurFilter } from 'pixi-filters';\nimport { type RadialBlurFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a RadialBlur filter that applies a radial motion blur to an object\n *\n * The RadialBlurFilter creates a circular/radial blur effect, with controllable\n * center position, angle, and radius settings.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the RadialBlur filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createRadialBlurFilter(config: RadialBlurFilterConfig): 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.center !== undefined) options.center = config.center;\n    if (config.centerX !== undefined) options.centerX = config.centerX;\n    if (config.centerY !== undefined) options.centerY = config.centerY;\n    if (config.kernelSize !== undefined) options.kernelSize = config.kernelSize;\n    if (config.radius !== undefined) options.radius = config.radius;\n\n    // Create a unique key for this filter configuration\n    // The kernel size is the most significant parameter that affects the shader compilation\n    const kernelSizeStr = (options.kernelSize || 5).toString();\n    const shaderKey = `radial-blur-filter-${kernelSizeStr}`;\n\n    // Create the filter with options\n    const filter = new RadialBlurFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering radial blur 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-360 degrees for angle\n                    filter.angle = normalizedIntensity * 36; // 0-10 → 0-360\n                    break;\n                case 'radius':\n                    // Map 0-10 to 0-100 for radius (or -1 for infinity)\n                    // Use -1 (infinity) if intensity is at maximum\n                    filter.radius = normalizedIntensity === 10 ? -1 : normalizedIntensity * 10;\n                    break;\n                case 'kernelSize':\n                    // Map 0-10 to 3-21 for kernelSize (odd numbers only)\n                    // Start with 3, then add 2 for each intensity unit\n                    const kernelBase = 3;\n                    const kernelStep = Math.floor(normalizedIntensity);\n                    filter.kernelSize = kernelBase + (kernelStep * 2);\n                    break;\n                case 'centerX':\n                    // Map 0-10 to -0.5 to 0.5 for centerX offset\n                    // (0 = center, negative = left, positive = right)\n                    filter.centerX = (normalizedIntensity - 5) / 10;\n                    break;\n                case 'centerY':\n                    // Map 0-10 to -0.5 to 0.5 for centerY offset\n                    // (0 = center, negative = top, positive = bottom)\n                    filter.centerY = (normalizedIntensity - 5) / 10;\n                    break;\n                default:\n                    // Default to angle adjustment\n                    filter.angle = normalizedIntensity * 36; // 0-10 → 0-360\n            }\n        } else {\n            // Default behavior - adjust angle and radius together for more dramatic effect\n            filter.angle = normalizedIntensity * 36; // 0-10 → 0-360\n\n            // Only use infinite radius for max intensity\n            if (normalizedIntensity >= 9.5) {\n                filter.radius = -1; // Infinite radius\n            } else {\n                // Otherwise scale radius proportionally\n                filter.radius = normalizedIntensity * 10;\n            }\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 to configured values or defaults if not specified\n        filter.angle = config.angle !== undefined ? config.angle : 0;\n\n        // Handle center coordinates\n        if (config.center !== undefined) {\n            // If center object was provided, use that\n            filter.center = config.center;\n        } else {\n            // Otherwise use individual centerX/centerY if provided\n            filter.centerX = config.centerX !== undefined ? config.centerX : 0;\n            filter.centerY = config.centerY !== undefined ? config.centerY : 0;\n        }\n\n        // Reset kernel size and radius\n        filter.kernelSize = config.kernelSize !== undefined ? config.kernelSize : 5;\n        filter.radius = config.radius !== undefined ? config.radius : -1;\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 radial blur filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","RadialBlurFilter"],"mappings":"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"}