{"version":3,"file":"zoomBlurFilter.cjs","sources":["../../../src/filters/zoomBlurFilter.ts"],"sourcesContent":["import { ZoomBlurFilter } from 'pixi-filters';\nimport { type ZoomBlurFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n/**\n * Creates a ZoomBlur filter that applies a radial blur effect\n *\n * The ZoomBlurFilter creates a zoom/radial blur effect that makes objects appear\n * as if they are zooming in or out from a center point.\n * Uses shader pooling for better performance.\n *\n * @param config - Configuration for the ZoomBlur filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createZoomBlurFilter(config: ZoomBlurFilterConfig): 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.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.innerRadius !== undefined) options.innerRadius = config.innerRadius;\n    if (config.radius !== undefined) options.radius = config.radius;\n    if (config.strength !== undefined) options.strength = config.strength;\n\n    // Create a unique shader key based on configuration\n    // Use innerRadius as it's the most significant parameter for shader compilation\n    const innerRadiusStr = (options.innerRadius || 0).toString();\n    const shaderKey = `zoom-blur-filter-${innerRadiusStr}`;\n\n    // Create the filter with options\n    const filter = new ZoomBlurFilter(options);\n\n    // Register filter with shader manager\n    try {\n        shaderManager.registerFilter(filter, shaderKey);\n    } catch (error) {\n        console.warn('Error registering zoom 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 'strength':\n                    // Map 0-10 to 0-1 for strength (0.1 is good default)\n                    filter.strength = normalizedIntensity / 10;\n                    break;\n                case 'radius':\n                    // Map 0-10 to different radius values\n                    // At 0: small radius (100)\n                    // At 5: larger radius (500)\n                    // At 10: -1 (infinity)\n                    if (normalizedIntensity >= 9.5) {\n                        filter.radius = -1; // Infinite radius\n                    } else {\n                        filter.radius = 100 + (normalizedIntensity * 80);\n                    }\n                    break;\n                case 'innerRadius':\n                    // Map 0-10 to 0-200 for inner radius\n                    filter.innerRadius = normalizedIntensity * 20;\n                    break;\n                case 'centerX':\n                    // Map 0-10 to 0-1 for x position (0.5 is center)\n                    filter.centerX = normalizedIntensity / 10;\n                    break;\n                case 'centerY':\n                    // Map 0-10 to 0-1 for y position (0.5 is center)\n                    filter.centerY = normalizedIntensity / 10;\n                    break;\n                case 'center':\n                    // Move the center based on intensity\n                    // For simplicity, move from left to right as intensity increases\n                    const position = normalizedIntensity / 10; // 0-1 range\n                    filter.centerX = position;\n                    filter.centerY = 0.5; // Keep vertical center fixed\n                    break;\n                default:\n                    // Default to strength adjustment\n                    filter.strength = normalizedIntensity / 10;\n            }\n        } else {\n            // Default behavior - adjust strength as it's the most visible parameter\n            filter.strength = normalizedIntensity / 10;\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 center coordinates - prioritize individual properties over point object\n        if (config.centerX !== undefined) {\n            filter.centerX = config.centerX;\n        } else if (config.center?.x !== undefined) {\n            filter.centerX = config.center.x;\n        } else {\n            filter.centerX = 0; // Default centerX\n        }\n\n        if (config.centerY !== undefined) {\n            filter.centerY = config.centerY;\n        } else if (config.center?.y !== undefined) {\n            filter.centerY = config.center.y;\n        } else {\n            filter.centerY = 0; // Default centerY\n        }\n\n        // Reset inner radius to config value or default\n        filter.innerRadius = config.innerRadius !== undefined ? config.innerRadius : 0;\n\n        // Reset radius to config value or default\n        filter.radius = config.radius !== undefined ? config.radius : -1;\n\n        // Reset strength to config value or default\n        filter.strength = config.strength !== undefined ? config.strength : 0.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 zoom blur filter shader:', error);\n        }\n        filter.destroy();\n    };\n\n    return { filter, updateIntensity, reset, dispose };\n}"],"names":["ShaderResourceManager","ZoomBlurFilter"],"mappings":"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"}