{"version":3,"file":"tiltShiftFilter.cjs","sources":["../../../src/filters/tiltShiftFilter.ts"],"sourcesContent":["import { TiltShiftFilter } from 'pixi-filters';\nimport { type TiltShiftFilterConfig, type FilterResult } from './types';\nimport { ShaderResourceManager } from '../managers/ShaderResourceManager';\n\n// Get singleton instance of the shader manager\nconst shaderManager = ShaderResourceManager.getInstance();\n\n/**\n * Creates a TiltShift filter that applies a tilt-shift camera effect\n *\n * The TiltShiftFilter creates a photography-like tilt-shift effect that makes scenes\n * look like miniature models by applying a gradient blur. The effect keeps a horizontal\n * or vertical strip in focus while blurring the rest.\n *\n * Uses shader pooling via ShaderResourceManager for improved performance.\n *\n * @param config - Configuration for the TiltShift filter\n * @returns FilterResult with the filter instance and control functions\n */\nexport function createTiltShiftFilter(config: TiltShiftFilterConfig): FilterResult {\n    // Create options object for the filter\n    const options: any = {};\n\n    // Apply configuration values if provided, otherwise use defaults\n    if (config.blur !== undefined) options.blur = config.blur;\n    if (config.gradientBlur !== undefined) options.gradientBlur = config.gradientBlur;\n\n    // Handle start position parameters\n    if (config.start !== undefined) options.start = config.start;\n    if (config.startX !== undefined) options.startX = config.startX;\n    if (config.startY !== undefined) options.startY = config.startY;\n\n    // Handle end position parameters\n    if (config.end !== undefined) options.end = config.end;\n    if (config.endX !== undefined) options.endX = config.endX;\n    if (config.endY !== undefined) options.endY = config.endY;\n\n    // Create the filter with options\n    const filter = new TiltShiftFilter(options);\n\n    // Generate a unique key for this filter configuration\n    const shaderKey = `tiltshift-${config.blur || 8}-${config.gradientBlur || 600}`;\n\n    // Register filter with shader manager for reuse\n    try {\n        shaderManager.getShaderProgram(shaderKey, filter);\n    } catch (error) {\n        console.warn('Failed to register tiltShift 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 'blur':\n                    // Map 0-10 to 0-20 for blur strength\n                    filter.blur = normalizedIntensity * 2;\n                    break;\n                case 'gradientBlur':\n                    // Map 0-10 to 0-2000 for gradient blur\n                    filter.gradientBlur = normalizedIntensity * 200;\n                    break;\n                case 'focusArea':\n                    // Adjust the focus area by modifying start and end positions\n                    // At intensity 0, focus area is the entire screen (no effect)\n                    // At intensity 10, focus area is a small strip in the middle\n                    const centerY = 0.5; // Assuming focus on horizontal strip in the middle\n                    const focusHeight = 1 - (normalizedIntensity * 0.08); // 1.0 to 0.2\n                    const halfHeight = focusHeight / 2;\n\n                    filter.startY = centerY - halfHeight;\n                    filter.endY = centerY + halfHeight;\n                    break;\n                default:\n                    // Default to adjusting blur if primaryProperty is not recognized\n                    filter.blur = normalizedIntensity * 2;\n            }\n        } else {\n            // Default behavior - adjust blur intensity\n            filter.blur = normalizedIntensity * 2;\n\n            // Also adjust gradient blur for a better effect as intensity increases\n            filter.gradientBlur = normalizedIntensity * 200;\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 blur to configured value or default\n        filter.blur = config.blur !== undefined ? config.blur : 8;\n\n        // Reset gradient blur to configured value or default\n        filter.gradientBlur = config.gradientBlur !== undefined ? config.gradientBlur : 600;\n\n        // Handle start position (prioritize specific coordinates over point object)\n        if (config.startX !== undefined) {\n            filter.startX = config.startX;\n        } else if (config.start?.x !== undefined) {\n            filter.startX = config.start.x;\n        } else {\n            filter.startX = 0; // Default startX\n        }\n\n        if (config.startY !== undefined) {\n            filter.startY = config.startY;\n        } else if (config.start?.y !== undefined) {\n            filter.startY = config.start.y;\n        } else {\n            filter.startY = 0.3; // Default startY for horizontal focus strip\n        }\n\n        // Handle end position (prioritize specific coordinates over point object)\n        if (config.endX !== undefined) {\n            filter.endX = config.endX;\n        } else if (config.end?.x !== undefined) {\n            filter.endX = config.end.x;\n        } else {\n            filter.endX = 1; // Default endX\n        }\n\n        if (config.endY !== undefined) {\n            filter.endY = config.endY;\n        } else if (config.end?.y !== undefined) {\n            filter.endY = config.end.y;\n        } else {\n            filter.endY = 0.7; // Default endY for horizontal focus strip\n        }\n    };\n\n    /**\n     * Cleanup function to release shader when filter is no longer used\n     */\n    const dispose = (): void => {\n        try {\n            shaderManager.releaseShader(shaderKey);\n        } catch (error) {\n            console.warn('Failed to release tiltShift filter shader:', error);\n        }\n\n        if (filter.destroy) {\n            filter.destroy();\n        }\n    };\n\n    // Create a properly typed FilterResult object\n    const result: FilterResult = {\n        filter,\n        updateIntensity,\n        reset,\n        dispose\n    };\n    return result;\n}"],"names":["ShaderResourceManager","TiltShiftFilter"],"mappings":"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"}