{"version":3,"file":"getLocalBounds.mjs","sources":["../../../../src/scene/container/bounds/getLocalBounds.ts"],"sourcesContent":["import { Matrix } from '../../../maths/matrix/Matrix';\nimport { warn } from '../../../utils/logging/warn';\nimport { boundsPool, matrixPool } from './utils/matrixAndBoundsPool';\n\nimport type { Renderable } from '../../../rendering/renderers/shared/Renderable';\nimport type { Container } from '../Container';\nimport type { Bounds } from './Bounds';\n\nexport function getLocalBounds(target: Container, bounds: Bounds, relativeMatrix?: Matrix): Bounds\n{\n    bounds.clear();\n\n    relativeMatrix ||= Matrix.IDENTITY;\n\n    _getLocalBounds(target, bounds, relativeMatrix, target, true);\n\n    if (!bounds.isValid)\n    {\n        bounds.set(0, 0, 0, 0);\n    }\n\n    return bounds;\n}\n\nfunction _getLocalBounds(\n    target: Container,\n    bounds: Bounds,\n    parentTransform: Matrix,\n    rootContainer: Container,\n    isRoot: boolean\n): void\n{\n    let relativeTransform: Matrix;\n\n    if (!isRoot)\n    {\n        if (!target.visible || !target.measurable) return;\n\n        target.updateLocalTransform();\n\n        const localTransform = target.localTransform;\n\n        relativeTransform = matrixPool.get();\n        relativeTransform.appendFrom(localTransform, parentTransform);\n    }\n    else\n    {\n        relativeTransform = matrixPool.get();\n        relativeTransform = parentTransform.copyTo(relativeTransform);\n    }\n\n    const parentBounds = bounds;\n    const preserveBounds = !!target.effects.length;\n\n    if (preserveBounds)\n    {\n        bounds = boundsPool.get().clear();\n    }\n\n    if (target.boundsArea)\n    {\n        bounds.addRect(target.boundsArea, relativeTransform);\n    }\n    else\n    {\n        if (target.renderPipeId)\n        {\n            bounds.matrix = relativeTransform;\n            (target as Renderable).addBounds(bounds);\n        }\n\n        const children = target.children;\n\n        for (let i = 0; i < children.length; i++)\n        {\n            _getLocalBounds(children[i], bounds, relativeTransform, rootContainer, false);\n        }\n    }\n\n    if (preserveBounds)\n    {\n        for (let i = 0; i < target.effects.length; i++)\n        {\n            target.effects[i].addLocalBounds?.(bounds, rootContainer);\n        }\n\n        // TODO - make a add transformed bounds?\n        parentBounds.addBounds(bounds, Matrix.IDENTITY);\n\n        boundsPool.return(bounds);\n    }\n\n    matrixPool.return(relativeTransform);\n}\n\nexport function getParent(target: Container, root: Container, matrix: Matrix)\n{\n    const parent = target.parent;\n\n    if (!parent)\n    {\n        // we have reach the top of the tree!\n        // #if _DEBUG\n        warn('Item is not inside the root container');\n        // #endif\n\n        return;\n    }\n\n    if (parent !== root)\n    {\n        getParent(parent, root, matrix);\n\n        parent.updateLocalTransform();\n        matrix.append(parent.localTransform);\n    }\n}\n\n"],"names":[],"mappings":"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"}