{"version":3,"file":"Bounds.mjs","sources":["../src/Bounds.ts"],"sourcesContent":["import { Rectangle } from 'pixijs/core';\n\nimport type { IPointData, Matrix, Transform } from 'pixijs/core';\n\n/**\n * 'Builder' pattern for bounds rectangles.\n *\n * This could be called an Axis-Aligned Bounding Box.\n * It is not an actual shape. It is a mutable thing; no 'EMPTY' or those kind of problems.\n * @memberof PIXI\n */\nexport class Bounds\n{\n    /** @default Infinity */\n    public minX: number;\n\n    /** @default Infinity */\n    public minY: number;\n\n    /** @default -Infinity */\n    public maxX: number;\n\n    /** @default -Infinity */\n    public maxY: number;\n\n    public rect: Rectangle;\n\n    /**\n     * It is updated to _boundsID of corresponding object to keep bounds in sync with content.\n     * Updated from outside, thus public modifier.\n     */\n    public updateID: number;\n\n    constructor()\n    {\n        this.minX = Infinity;\n        this.minY = Infinity;\n        this.maxX = -Infinity;\n        this.maxY = -Infinity;\n\n        this.rect = null;\n        this.updateID = -1;\n    }\n\n    /**\n     * Checks if bounds are empty.\n     * @returns - True if empty.\n     */\n    isEmpty(): boolean\n    {\n        return this.minX > this.maxX || this.minY > this.maxY;\n    }\n\n    /** Clears the bounds and resets. */\n    clear(): void\n    {\n        this.minX = Infinity;\n        this.minY = Infinity;\n        this.maxX = -Infinity;\n        this.maxY = -Infinity;\n    }\n\n    /**\n     * Can return Rectangle.EMPTY constant, either construct new rectangle, either use your rectangle\n     * It is not guaranteed that it will return tempRect\n     * @param rect - Temporary object will be used if AABB is not empty\n     * @returns - A rectangle of the bounds\n     */\n    getRectangle(rect?: Rectangle): Rectangle\n    {\n        if (this.minX > this.maxX || this.minY > this.maxY)\n        {\n            return Rectangle.EMPTY;\n        }\n\n        rect = rect || new Rectangle(0, 0, 1, 1);\n\n        rect.x = this.minX;\n        rect.y = this.minY;\n        rect.width = this.maxX - this.minX;\n        rect.height = this.maxY - this.minY;\n\n        return rect;\n    }\n\n    /**\n     * This function should be inlined when its possible.\n     * @param point - The point to add.\n     */\n    addPoint(point: IPointData): void\n    {\n        this.minX = Math.min(this.minX, point.x);\n        this.maxX = Math.max(this.maxX, point.x);\n        this.minY = Math.min(this.minY, point.y);\n        this.maxY = Math.max(this.maxY, point.y);\n    }\n\n    /**\n     * Adds a point, after transformed. This should be inlined when its possible.\n     * @param matrix\n     * @param point\n     */\n    addPointMatrix(matrix: Matrix, point: IPointData): void\n    {\n        const { a, b, c, d, tx, ty } = matrix;\n\n        const x = (a * point.x) + (c * point.y) + tx;\n        const y = (b * point.x) + (d * point.y) + ty;\n\n        this.minX = Math.min(this.minX, x);\n        this.maxX = Math.max(this.maxX, x);\n        this.minY = Math.min(this.minY, y);\n        this.maxY = Math.max(this.maxY, y);\n    }\n\n    /**\n     * Adds a quad, not transformed\n     * @param vertices - The verts to add.\n     */\n    addQuad(vertices: Float32Array): void\n    {\n        let minX = this.minX;\n        let minY = this.minY;\n        let maxX = this.maxX;\n        let maxY = this.maxY;\n\n        let x = vertices[0];\n        let y = vertices[1];\n\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        x = vertices[2];\n        y = vertices[3];\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        x = vertices[4];\n        y = vertices[5];\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        x = vertices[6];\n        y = vertices[7];\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        this.minX = minX;\n        this.minY = minY;\n        this.maxX = maxX;\n        this.maxY = maxY;\n    }\n\n    /**\n     * Adds sprite frame, transformed.\n     * @param transform - transform to apply\n     * @param x0 - left X of frame\n     * @param y0 - top Y of frame\n     * @param x1 - right X of frame\n     * @param y1 - bottom Y of frame\n     */\n    addFrame(transform: Transform, x0: number, y0: number, x1: number, y1: number): void\n    {\n        this.addFrameMatrix(transform.worldTransform, x0, y0, x1, y1);\n    }\n\n    /**\n     * Adds sprite frame, multiplied by matrix\n     * @param matrix - matrix to apply\n     * @param x0 - left X of frame\n     * @param y0 - top Y of frame\n     * @param x1 - right X of frame\n     * @param y1 - bottom Y of frame\n     */\n    addFrameMatrix(matrix: Matrix, x0: number, y0: number, x1: number, y1: number): void\n    {\n        const a = matrix.a;\n        const b = matrix.b;\n        const c = matrix.c;\n        const d = matrix.d;\n        const tx = matrix.tx;\n        const ty = matrix.ty;\n\n        let minX = this.minX;\n        let minY = this.minY;\n        let maxX = this.maxX;\n        let maxY = this.maxY;\n\n        let x = (a * x0) + (c * y0) + tx;\n        let y = (b * x0) + (d * y0) + ty;\n\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        x = (a * x1) + (c * y0) + tx;\n        y = (b * x1) + (d * y0) + ty;\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        x = (a * x0) + (c * y1) + tx;\n        y = (b * x0) + (d * y1) + ty;\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        x = (a * x1) + (c * y1) + tx;\n        y = (b * x1) + (d * y1) + ty;\n        minX = x < minX ? x : minX;\n        minY = y < minY ? y : minY;\n        maxX = x > maxX ? x : maxX;\n        maxY = y > maxY ? y : maxY;\n\n        this.minX = minX;\n        this.minY = minY;\n        this.maxX = maxX;\n        this.maxY = maxY;\n    }\n\n    /**\n     * Adds screen vertices from array\n     * @param vertexData - calculated vertices\n     * @param beginOffset - begin offset\n     * @param endOffset - end offset, excluded\n     */\n    addVertexData(vertexData: Float32Array, beginOffset: number, endOffset: number): void\n    {\n        let minX = this.minX;\n        let minY = this.minY;\n        let maxX = this.maxX;\n        let maxY = this.maxY;\n\n        for (let i = beginOffset; i < endOffset; i += 2)\n        {\n            const x = vertexData[i];\n            const y = vertexData[i + 1];\n\n            minX = x < minX ? x : minX;\n            minY = y < minY ? y : minY;\n            maxX = x > maxX ? x : maxX;\n            maxY = y > maxY ? y : maxY;\n        }\n\n        this.minX = minX;\n        this.minY = minY;\n        this.maxX = maxX;\n        this.maxY = maxY;\n    }\n\n    /**\n     * Add an array of mesh vertices\n     * @param transform - mesh transform\n     * @param vertices - mesh coordinates in array\n     * @param beginOffset - begin offset\n     * @param endOffset - end offset, excluded\n     */\n    addVertices(transform: Transform, vertices: Float32Array, beginOffset: number, endOffset: number): void\n    {\n        this.addVerticesMatrix(transform.worldTransform, vertices, beginOffset, endOffset);\n    }\n\n    /**\n     * Add an array of mesh vertices.\n     * @param matrix - mesh matrix\n     * @param vertices - mesh coordinates in array\n     * @param beginOffset - begin offset\n     * @param endOffset - end offset, excluded\n     * @param padX - x padding\n     * @param padY - y padding\n     */\n    addVerticesMatrix(matrix: Matrix, vertices: Float32Array, beginOffset: number,\n        endOffset: number, padX = 0, padY = padX): void\n    {\n        const a = matrix.a;\n        const b = matrix.b;\n        const c = matrix.c;\n        const d = matrix.d;\n        const tx = matrix.tx;\n        const ty = matrix.ty;\n\n        let minX = this.minX;\n        let minY = this.minY;\n        let maxX = this.maxX;\n        let maxY = this.maxY;\n\n        for (let i = beginOffset; i < endOffset; i += 2)\n        {\n            const rawX = vertices[i];\n            const rawY = vertices[i + 1];\n            const x = (a * rawX) + (c * rawY) + tx;\n            const y = (d * rawY) + (b * rawX) + ty;\n\n            minX = Math.min(minX, x - padX);\n            maxX = Math.max(maxX, x + padX);\n            minY = Math.min(minY, y - padY);\n            maxY = Math.max(maxY, y + padY);\n        }\n\n        this.minX = minX;\n        this.minY = minY;\n        this.maxX = maxX;\n        this.maxY = maxY;\n    }\n\n    /**\n     * Adds other {@link Bounds}.\n     * @param bounds - The Bounds to be added\n     */\n    addBounds(bounds: Bounds): void\n    {\n        const minX = this.minX;\n        const minY = this.minY;\n        const maxX = this.maxX;\n        const maxY = this.maxY;\n\n        this.minX = bounds.minX < minX ? bounds.minX : minX;\n        this.minY = bounds.minY < minY ? bounds.minY : minY;\n        this.maxX = bounds.maxX > maxX ? bounds.maxX : maxX;\n        this.maxY = bounds.maxY > maxY ? bounds.maxY : maxY;\n    }\n\n    /**\n     * Adds other Bounds, masked with Bounds.\n     * @param bounds - The Bounds to be added.\n     * @param mask - TODO\n     */\n    addBoundsMask(bounds: Bounds, mask: Bounds): void\n    {\n        const _minX = bounds.minX > mask.minX ? bounds.minX : mask.minX;\n        const _minY = bounds.minY > mask.minY ? bounds.minY : mask.minY;\n        const _maxX = bounds.maxX < mask.maxX ? bounds.maxX : mask.maxX;\n        const _maxY = bounds.maxY < mask.maxY ? bounds.maxY : mask.maxY;\n\n        if (_minX <= _maxX && _minY <= _maxY)\n        {\n            const minX = this.minX;\n            const minY = this.minY;\n            const maxX = this.maxX;\n            const maxY = this.maxY;\n\n            this.minX = _minX < minX ? _minX : minX;\n            this.minY = _minY < minY ? _minY : minY;\n            this.maxX = _maxX > maxX ? _maxX : maxX;\n            this.maxY = _maxY > maxY ? _maxY : maxY;\n        }\n    }\n\n    /**\n     * Adds other Bounds, multiplied by matrix. Bounds shouldn't be empty.\n     * @param bounds - other bounds\n     * @param matrix - multiplicator\n     */\n    addBoundsMatrix(bounds: Bounds, matrix: Matrix): void\n    {\n        this.addFrameMatrix(matrix, bounds.minX, bounds.minY, bounds.maxX, bounds.maxY);\n    }\n\n    /**\n     * Adds other Bounds, masked with Rectangle.\n     * @param bounds - TODO\n     * @param area - TODO\n     */\n    addBoundsArea(bounds: Bounds, area: Rectangle): void\n    {\n        const _minX = bounds.minX > area.x ? bounds.minX : area.x;\n        const _minY = bounds.minY > area.y ? bounds.minY : area.y;\n        const _maxX = bounds.maxX < area.x + area.width ? bounds.maxX : (area.x + area.width);\n        const _maxY = bounds.maxY < area.y + area.height ? bounds.maxY : (area.y + area.height);\n\n        if (_minX <= _maxX && _minY <= _maxY)\n        {\n            const minX = this.minX;\n            const minY = this.minY;\n            const maxX = this.maxX;\n            const maxY = this.maxY;\n\n            this.minX = _minX < minX ? _minX : minX;\n            this.minY = _minY < minY ? _minY : minY;\n            this.maxX = _maxX > maxX ? _maxX : maxX;\n            this.maxY = _maxY > maxY ? _maxY : maxY;\n        }\n    }\n\n    /**\n     * Pads bounds object, making it grow in all directions.\n     * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n     * @param paddingX - The horizontal padding amount.\n     * @param paddingY - The vertical padding amount.\n     */\n    pad(paddingX = 0, paddingY = paddingX): void\n    {\n        if (!this.isEmpty())\n        {\n            this.minX -= paddingX;\n            this.maxX += paddingX;\n            this.minY -= paddingY;\n            this.maxY += paddingY;\n        }\n    }\n\n    /**\n     * Adds padded frame. (x0, y0) should be strictly less than (x1, y1)\n     * @param x0 - left X of frame\n     * @param y0 - top Y of frame\n     * @param x1 - right X of frame\n     * @param y1 - bottom Y of frame\n     * @param padX - padding X\n     * @param padY - padding Y\n     */\n    addFramePad(x0: number, y0: number, x1: number, y1: number, padX: number, padY: number): void\n    {\n        x0 -= padX;\n        y0 -= padY;\n        x1 += padX;\n        y1 += padY;\n\n        this.minX = this.minX < x0 ? this.minX : x0;\n        this.maxX = this.maxX > x1 ? this.maxX : x1;\n        this.minY = this.minY < y0 ? this.minY : y0;\n        this.maxY = this.maxY > y1 ? this.maxY : y1;\n    }\n}\n"],"names":[],"mappings":"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"}