{"version":3,"file":"RenderLayer.mjs","sources":["../../../src/scene/layers/RenderLayer.ts"],"sourcesContent":["import { type InstructionSet } from '../../rendering/renderers/shared/instructions/InstructionSet';\nimport { type Renderer } from '../../rendering/renderers/types';\nimport { warn } from '../../utils/logging/warn';\nimport { type Bounds } from '../container/bounds/Bounds';\nimport { Container } from '../container/Container';\n\n// NOTE: Filters on ancestor containers do not apply to children attached to a RenderLayer.\n// See \"Known issues\" in the RenderLayer JSDoc below.\n\n/**\n * Options for configuring a RenderLayer. A RenderLayer allows control over rendering order\n * independent of the scene graph hierarchy.\n * @example\n * ```ts\n * // Basic layer with automatic sorting\n * const layer = new RenderLayer({\n *     sortableChildren: true\n * });\n *\n * // Layer with custom sort function\n * const customLayer = new RenderLayer({\n *     sortableChildren: true,\n *     sortFunction: (a, b) => {\n *         // Sort by y position\n *         return a.position.y - b.position.y;\n *     }\n * });\n *\n * // Add objects to layer while maintaining scene graph parent\n * const sprite = new Sprite(texture);\n * container.addChild(sprite);      // Add to scene graph\n * layer.attach(sprite);            // Add to render layer\n *\n * // Manual sorting when needed\n * const manualLayer = new RenderLayer({\n *     sortableChildren: false\n * });\n * manualLayer.attach(sprite1, sprite2);\n * manualLayer.sortRenderLayerChildren(); // Sort manually\n * ```\n * @category scene\n * @standard\n */\nexport interface RenderLayerOptions\n{\n    /**\n     * If true, the layer's children will be sorted by zIndex before rendering.\n     * If false, you can manually sort the children using sortRenderLayerChildren when needed.\n     * @default false\n     * @example\n     * ```ts\n     * const layer = new RenderLayer({\n     *     sortableChildren: true // Automatically sorts children by zIndex\n     * });\n     * ```\n     * @see {@link RenderLayer#sortRenderLayerChildren} For manual sorting\n     * @see {@link RenderLayer#sortFunction} For customizing the sort logic\n     * @see {@link Container#zIndex} For the default sort property\n     */\n    sortableChildren?: boolean;\n\n    /**\n     * Custom sort function to sort layer children. Default sorts by zIndex.\n     * @param a - First container to compare\n     * @param b - Second container to compare\n     * @returns Negative if a should render before b, positive if b should render before a\n     * @example\n     * ```ts\n     * const layer = new RenderLayer({\n     *     sortFunction: (a, b) => {\n     *         // Sort by y position\n     *         return a.position.y - b.position.y;\n     *     }\n     * });\n     * ```\n     * @see {@link RenderLayer#sortableChildren} For enabling automatic sorting\n     * @see {@link RenderLayer#sortRenderLayerChildren} For manual sorting\n     * @see {@link Container#zIndex} For the default sort property\n     * @default (a, b) => a.zIndex - b.zIndex\n     */\n    sortFunction?: (a: Container, b: Container) => number;\n}\n\n/**\n * The RenderLayer API provides a way to control the rendering order of objects independently\n * of their logical parent-child relationships in the scene graph.\n * This allows developers to decouple how objects are transformed\n * (via their logical parent) from how they are rendered on the screen.\n *\n * ### Key Concepts\n *\n * #### RenderLayers Control Rendering Order:\n * - RenderLayers define where in the render stack objects are drawn,\n * but they do not affect an object's transformations (e.g., position, scale, rotation) or logical hierarchy.\n * - RenderLayers can be added anywhere in the scene graph.\n *\n * #### Logical Parenting Remains Unchanged:\n * - Objects still have a logical parent for transformations via addChild.\n * - Assigning an object to a layer does not reparent it.\n *\n * #### Explicit Control:\n * - Developers assign objects to layers using renderLayer.add and remove them using renderLayer.remove.\n * ---\n * ### API Details\n *\n * #### 1. Creating a RenderLayer\n * A RenderLayer is a lightweight object responsible for controlling render order.\n * It has no children or transformations of its own\n * but can be inserted anywhere in the scene graph to define its render position.\n * ```js\n * const layer = new RenderLayer();\n * app.stage.addChild(layer); // Insert the layer into the scene graph\n * ```\n *\n * #### 2. Adding Objects to a Layer\n * Use renderLayer.add to assign an object to a layer.\n * This overrides the object's default render order defined by its logical parent.\n * ```js\n * const rect = new Graphics();\n * container.addChild(rect);    // Add to logical parent\n * layer.attach(rect);      // Control render order via the layer\n * ```\n *\n * #### 3. Removing Objects from a Layer\n * To stop an object from being rendered in the layer, use remove.\n * ```js\n * layer.remove(rect); // Stop rendering rect via the layer\n * ```\n * When an object is removed from its logical parent (removeChild), it is automatically removed from the layer.\n *\n * #### 4. Re-Adding Objects to Layers\n * If an object is re-added to a logical parent, it does not automatically reassign itself to the layer.\n * Developers must explicitly reassign it.\n * ```js\n * container.addChild(rect);    // Logical parent\n * layer.attach(rect);      // Explicitly reassign to the layer\n * ```\n *\n * #### 5. Layer Position in Scene Graph\n * A layer's position in the scene graph determines its render priority relative to other layers and objects.\n * Layers can be inserted anywhere in the scene graph.\n * ```js\n * const backgroundLayer = new RenderLayer();\n * const uiLayer = new RenderLayer();\n *\n * app.stage.addChild(backgroundLayer);\n * app.stage.addChild(world);\n * app.stage.addChild(uiLayer);\n * ```\n * This is a new API and therefore considered experimental at this stage.\n * While the core is pretty robust, there are still a few tricky issues we need to tackle.\n * However, even with the known issues below, we believe this API is incredibly useful!\n *\n * Known issues:\n *  - Interaction may not work as expected since hit testing does not account for the visual render order created by layers.\n *    For example, if an object is visually moved to the front via a layer, hit testing will still use its original position.\n *  - RenderLayers and their children must all belong to the same renderGroup to work correctly.\n *  - Filters on ancestor containers do not apply to children attached to a RenderLayer.\n *    This is because render layer children are rendered outside their parent's filter scope\n *    (filters capture children into a texture via push/pop, but render layer children skip\n *    their parent's collection and render at the layer's position instead).\n * @category scene\n * @class\n * @extends null\n * @standard\n */\nexport class RenderLayer extends Container\n{\n    /**\n     * Default options for RenderLayer instances. These options control the sorting behavior\n     * of objects within the render layer.\n     * @example\n     * ```ts\n     * // Create a custom render layer with modified default options\n     * RenderLayer.defaultOptions = {\n     *     sortableChildren: true,\n     *     sortFunction: (a, b) => a.y - b.y // Sort by vertical position\n     * };\n     *\n     * // All new render layers will use these defaults\n     * const layer1 = new RenderLayer();\n     * // layer1 will have sortableChildren = true\n     * ```\n     * @property {boolean} sortableChildren -\n     * @property {Function} sortFunction -\n     * @see {@link RenderLayer} For the main render layer class\n     * @see {@link Container#zIndex} For the default sort property\n     * @see {@link RenderLayer#sortRenderLayerChildren} For manual sorting\n     */\n    public static defaultOptions: RenderLayerOptions = {\n        /** If true, layer children will be automatically sorted each render. Default is false. */\n        sortableChildren: false,\n        /**\n         * Function used to sort layer children.\n         * Default sorts by zIndex. Accepts two Container objects and returns\n         * a number indicating their relative order.\n         * @param a - First container to compare\n         * @param b - Second container to compare\n         * @returns Negative if a should render before b, positive if b should render before a\n         */\n        sortFunction: (a, b) => a.zIndex - b.zIndex,\n    };\n\n    /** Function used to sort layer children if sortableChildren is true */\n    public sortFunction: (a: Container, b: Container) => number;\n\n    /**\n     * The list of objects that this layer is responsible for rendering. Objects in this list maintain\n     * their original parent in the scene graph but are rendered as part of this layer.\n     * @example\n     * ```ts\n     * const layer = new RenderLayer();\n     * const sprite = new Sprite(texture);\n     *\n     * // Add sprite to scene graph for transforms\n     * container.addChild(sprite);\n     *\n     * // Add to layer for render order control\n     * layer.attach(sprite);\n     * console.log(layer.renderLayerChildren.length); // 1\n     *\n     * // Access objects in the layer\n     * layer.renderLayerChildren.forEach(child => {\n     *     console.log('Layer child:', child);\n     * });\n     *\n     * // Check if object is in layer\n     * const isInLayer = layer.renderLayerChildren.includes(sprite);\n     *\n     * // Clear all objects from layer\n     * layer.detachAll();\n     * console.log(layer.renderLayerChildren.length); // 0\n     * ```\n     * @readonly\n     * @see {@link RenderLayer#attach} For adding objects to the layer\n     * @see {@link RenderLayer#detach} For removing objects from the layer\n     * @see {@link RenderLayer#detachAll} For removing all objects from the layer\n     */\n    public renderLayerChildren: Container[] = [];\n\n    /** @internal */\n    public parent: Container | null;\n    /** @internal */\n    public didChange: boolean;\n    /** @internal */\n    public _updateFlags: number;\n    /** @internal */\n    public parentRenderLayer: null;\n    /** @internal */\n    public destroyed: boolean;\n    /** @internal */\n    public layerParentId: string;\n    /**\n     * If true, the layer's children will be sorted by zIndex before rendering.\n     * If false, you can manually sort the children using sortRenderLayerChildren when needed.\n     * @default false\n     * @example\n     * ```ts\n     * const layer = new RenderLayer({\n     *     sortableChildren: true // Automatically sorts children by zIndex\n     * });\n     * ```\n     * @see {@link RenderLayer#sortRenderLayerChildren} For manual sorting\n     * @see {@link RenderLayer#sortFunction} For customizing the sort logic\n     * @see {@link Container#zIndex} For the default sort property\n     */\n    public sortableChildren;\n\n    /**\n     * Creates a new RenderLayer instance\n     * @param options - Configuration options for the RenderLayer\n     * @param {boolean} [options.sortableChildren=false] - If true, layer children will be automatically sorted each render\n     * @param {Function} [options.sortFunction] - Custom function to sort layer children. Default sorts by zIndex\n     */\n    constructor(options: RenderLayerOptions = {})\n    {\n        options = { ...RenderLayer.defaultOptions, ...options };\n\n        super();\n\n        this.sortableChildren = options.sortableChildren;\n        this.sortFunction = options.sortFunction;\n    }\n\n    /**\n     * Adds one or more Containers to this render layer. The Containers will be rendered as part of this layer\n     * while maintaining their original parent in the scene graph.\n     *\n     * If the Container already belongs to a layer, it will be removed from the old layer before being added to this one.\n     * @example\n     * ```ts\n     * const layer = new RenderLayer();\n     * const container = new Container();\n     * const sprite1 = new Sprite(texture1);\n     * const sprite2 = new Sprite(texture2);\n     *\n     * // Add sprites to scene graph for transforms\n     * container.addChild(sprite1, sprite2);\n     *\n     * // Add sprites to layer for render order control\n     * layer.attach(sprite1, sprite2);\n     *\n     * // Add single sprite with type checking\n     * const typedSprite = layer.attach<Sprite>(new Sprite(texture3));\n     * typedSprite.tint = 'red';\n     *\n     * // Automatically removes from previous layer if needed\n     * const otherLayer = new RenderLayer();\n     * otherLayer.attach(sprite1); // Removes from previous layer\n     * ```\n     * @param children - The Container(s) to add to this layer. Can be any Container or array of Containers.\n     * @returns The first child that was added, for method chaining\n     * @see {@link RenderLayer#detach} For removing objects from the layer\n     * @see {@link RenderLayer#detachAll} For removing all objects from the layer\n     * @see {@link Container#addChild} For adding to scene graph hierarchy\n     */\n    public attach<U extends Container[]>(...children: U): U[0]\n    {\n        for (let i = 0; i < children.length; i++)\n        {\n            const child = children[i];\n\n            if (child.parentRenderLayer)\n            {\n                if (child.parentRenderLayer === this) continue;\n\n                child.parentRenderLayer.detach(child);\n            }\n\n            this.renderLayerChildren.push(child);\n\n            child.parentRenderLayer = this;\n\n            const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n            if (renderGroup)\n            {\n                renderGroup.structureDidChange = true;\n            }\n        }\n\n        return children[0];\n    }\n\n    /**\n     * Removes one or more Containers from this render layer. The Containers will maintain their\n     * original parent in the scene graph but will no longer be rendered as part of this layer.\n     * @example\n     * ```ts\n     * const layer = new RenderLayer();\n     * const container = new Container();\n     * const sprite1 = new Sprite(texture1);\n     * const sprite2 = new Sprite(texture2);\n     *\n     * // Add sprites to scene graph and layer\n     * container.addChild(sprite1, sprite2);\n     * layer.attach(sprite1, sprite2);\n     *\n     * // Remove single sprite from layer\n     * layer.detach(sprite1);\n     * // sprite1 is still child of container but not rendered in layer\n     *\n     * // Remove multiple sprites at once\n     * const otherLayer = new RenderLayer();\n     * otherLayer.attach(sprite3, sprite4);\n     * otherLayer.detach(sprite3, sprite4);\n     *\n     * // Type-safe detachment\n     * const typedSprite = layer.detach<Sprite>(spriteInLayer);\n     * typedSprite.texture = newTexture; // TypeScript knows this is a Sprite\n     * ```\n     * @param children - The Container(s) to remove from this layer\n     * @returns The first child that was removed, for method chaining\n     * @see {@link RenderLayer#attach} For adding objects to the layer\n     * @see {@link RenderLayer#detachAll} For removing all objects from the layer\n     * @see {@link Container#removeChild} For removing from scene graph hierarchy\n     */\n    public detach<U extends Container[]>(...children: U): U[0]\n    {\n        for (let i = 0; i < children.length; i++)\n        {\n            const child = children[i];\n\n            const index = this.renderLayerChildren.indexOf(child);\n\n            if (index !== -1)\n            {\n                this.renderLayerChildren.splice(index, 1);\n            }\n\n            child.parentRenderLayer = null;\n\n            const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n            if (renderGroup)\n            {\n                renderGroup.structureDidChange = true;\n            }\n        }\n\n        return children[0];\n    }\n\n    /**\n     * Removes all objects from this render layer. Objects will maintain their\n     * original parent in the scene graph but will no longer be rendered as part of this layer.\n     * @example\n     * ```ts\n     * const layer = new RenderLayer();\n     * const container = new Container();\n     *\n     * // Add multiple sprites to scene graph and layer\n     * const sprites = [\n     *     new Sprite(texture1),\n     *     new Sprite(texture2),\n     *     new Sprite(texture3)\n     * ];\n     *\n     * container.addChild(...sprites);  // Add to scene graph\n     * layer.attach(...sprites);       // Add to render layer\n     *\n     * // Later, remove all sprites from layer at once\n     * layer.detachAll();\n     * console.log(layer.renderLayerChildren.length); // 0\n     * console.log(container.children.length);        // 3 (still in scene graph)\n     * ```\n     * @returns The RenderLayer instance for method chaining\n     * @see {@link RenderLayer#attach} For adding objects to the layer\n     * @see {@link RenderLayer#detach} For removing individual objects\n     * @see {@link Container#removeChildren} For removing from scene graph\n     */\n    public detachAll()\n    {\n        const layerChildren = this.renderLayerChildren;\n\n        for (let i = 0; i < layerChildren.length; i++)\n        {\n            layerChildren[i].parentRenderLayer = null;\n        }\n\n        this.renderLayerChildren.length = 0;\n    }\n\n    /**\n     * Collects renderables for this layer and its children.\n     * This method is called by the renderer to gather all objects that should be rendered in this layer.\n     * @param instructionSet - The set of instructions to collect renderables into.\n     * @param renderer - The renderer that is collecting renderables.\n     * @param _currentLayer - The current render layer being processed.\n     * @internal\n     */\n    public override collectRenderables(instructionSet: InstructionSet, renderer: Renderer, _currentLayer: RenderLayer): void\n    {\n        const layerChildren = this.renderLayerChildren;\n        const length = layerChildren.length;\n\n        if (this.sortableChildren)\n        {\n            this.sortRenderLayerChildren();\n        }\n\n        for (let i = 0; i < length; i++)\n        {\n            if (!layerChildren[i].parent)\n            {\n                // eslint-disable-next-line max-len\n                warn('Container must be added to both layer and scene graph. Layers only handle render order - the scene graph is required for transforms (addChild)',\n                    layerChildren[i]);\n            }\n\n            layerChildren[i].collectRenderables(instructionSet, renderer, this);\n        }\n    }\n\n    /**\n     * Sort the layer's children using the defined sort function. This method allows manual sorting\n     * of layer children and is automatically called during rendering if sortableChildren is true.\n     * @example\n     * ```ts\n     * const layer = new RenderLayer();\n     *\n     * // Add multiple sprites at different depths\n     * const sprite1 = new Sprite(texture);\n     * const sprite2 = new Sprite(texture);\n     * const sprite3 = new Sprite(texture);\n     *\n     * sprite1.zIndex = 3;\n     * sprite2.zIndex = 1;\n     * sprite3.zIndex = 2;\n     *\n     * layer.attach(sprite1, sprite2, sprite3);\n     *\n     * // Manual sorting with default zIndex sort\n     * layer.sortRenderLayerChildren();\n     * // Order is now: sprite2 (1), sprite3 (2), sprite1 (3)\n     *\n     * // Custom sort by y position\n     * layer.sortFunction = (a, b) => a.y - b.y;\n     * layer.sortRenderLayerChildren();\n     *\n     * // Automatic sorting\n     * layer.sortableChildren = true; // Will sort each render\n     * ```\n     * @returns The RenderLayer instance for method chaining\n     * @see {@link RenderLayer#sortableChildren} For enabling automatic sorting\n     * @see {@link RenderLayer#sortFunction} For customizing the sort logic\n     */\n    public sortRenderLayerChildren()\n    {\n        this.renderLayerChildren.sort(this.sortFunction);\n    }\n\n    /**\n     * Recursively calculates the global bounds of this RenderLayer and its children.\n     * @param factorRenderLayers\n     * @param bounds\n     * @param _currentLayer\n     * @internal\n     */\n    public override _getGlobalBoundsRecursive(\n        factorRenderLayers: boolean,\n        bounds: Bounds,\n        _currentLayer: RenderLayer,\n    ): void\n    {\n        if (!factorRenderLayers) return;\n\n        const children = this.renderLayerChildren;\n\n        for (let i = 0; i < children.length; i++)\n        {\n            children[i]._getGlobalBoundsRecursive(true, bounds, this);\n        }\n    }\n\n    /**\n     * @inheritdoc\n     * @internal\n     */\n    public getFastGlobalBounds(factorRenderLayers?: boolean, bounds?: Bounds): Bounds\n    {\n        return super.getFastGlobalBounds(factorRenderLayers, bounds);\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error. Please use `RenderLayer.attach()` instead.\n     * @param {...any} _children\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override addChild<U extends Container[]>(..._children: U): never\n    {\n        throw new Error(\n            'RenderLayer.addChild() is not available. Please use RenderLayer.attach()',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     * Calling this method will throw an error. Please use `RenderLayer.detach()` instead.\n     * @param {...any} _children\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override removeChild<U extends Container[]>(..._children: U): never\n    {\n        throw new Error(\n            'RenderLayer.removeChild() is not available. Please use RenderLayer.detach()',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error. Please use `RenderLayer.detach()` instead.\n     * @param {number} [_beginIndex]\n     * @param {number} [_endIndex]\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override removeChildren(_beginIndex?: number, _endIndex?: number): never\n    {\n        throw new Error(\n            'RenderLayer.removeChildren() is not available. Please use RenderLayer.detach()',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param {number} _index\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override removeChildAt(_index: number): never\n    {\n        throw new Error(\n            'RenderLayer.removeChildAt() is not available',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param {number} _index\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override getChildAt(_index: number): never\n    {\n        throw new Error(\n            'RenderLayer.getChildAt() is not available',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param {Container} _child\n     * @param {number} _index\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override setChildIndex(_child: Container, _index: number): never\n    {\n        throw new Error(\n            'RenderLayer.setChildIndex() is not available',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param {Container} _child\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override getChildIndex(_child: Container): never\n    {\n        throw new Error(\n            'RenderLayer.getChildIndex() is not available',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param {Container} _child\n     * @param {number} _index\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override addChildAt<U extends Container>(_child: U, _index: number): never\n    {\n        throw new Error(\n            'RenderLayer.addChildAt() is not available',\n        );\n    }\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param {Container} _child\n     * @param {Container} _child2\n     * @ignore\n     */\n    public override swapChildren<U extends Container>(_child: U, _child2: U): never\n    {\n        throw new Error(\n            'RenderLayer.swapChildren() is not available',\n        );\n    }\n\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param _child - The child to reparent\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override reparentChild(..._child: Container[]): never\n    {\n        throw new Error('RenderLayer.reparentChild() is not available with the render layer');\n    }\n\n    /**\n     * This method is not available in RenderLayer.\n     *\n     * Calling this method will throw an error.\n     * @param _child - The child to reparent\n     * @param _index - The index to reparent the child to\n     * @throws {Error} Always throws an error as this method is not available.\n     * @ignore\n     */\n    public override reparentChildAt(_child: Container, _index: number): never\n    {\n        throw new Error('RenderLayer.reparentChildAt() is not available with the render layer');\n    }\n}\n"],"names":[],"mappings":"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"}