{"version":3,"file":"Bounds.mjs","sources":["../../../../src/scene/container/bounds/Bounds.ts"],"sourcesContent":["import { Matrix } from '../../../maths/matrix/Matrix';\nimport { Rectangle } from '../../../maths/shapes/Rectangle';\n\n/**\n * Simple bounds implementation instead of more ambiguous [number, number, number, number]\n * @memberof rendering\n */\nexport interface BoundsData\n{\n minX: number;\n minY: number;\n maxX: number;\n maxY: number;\n}\n\nconst defaultMatrix = new Matrix();\n\n// TODO optimisations\n// 1 - get rectangle could use a dirty flag, rather than setting the data each time is called\n// 2- getFrame ALWAYS assumes a matrix, could be optimised to avoid the matrix calculation if not needed\n\n/**\n * A representation of an AABB bounding box.\n * @memberof rendering\n */\nexport class Bounds\n{\n /** @default Infinity */\n public minX = Infinity;\n\n /** @default Infinity */\n public minY = Infinity;\n\n /** @default -Infinity */\n public maxX = -Infinity;\n\n /** @default -Infinity */\n public maxY = -Infinity;\n\n public matrix = defaultMatrix;\n\n private _rectangle: Rectangle;\n\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity)\n {\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Checks if bounds are empty.\n * @returns - True if empty.\n */\n public isEmpty(): boolean\n {\n return this.minX > this.maxX || this.minY > this.maxY;\n }\n\n /** The bounding rectangle of the bounds. */\n get rectangle(): Rectangle\n {\n if (!this._rectangle)\n {\n this._rectangle = new Rectangle();\n }\n\n const rectangle = this._rectangle;\n\n if (this.minX > this.maxX || this.minY > this.maxY)\n {\n rectangle.x = 0;\n rectangle.y = 0;\n rectangle.width = 0;\n rectangle.height = 0;\n }\n else\n {\n rectangle.copyFromBounds(this);\n }\n\n return rectangle;\n }\n\n /** Clears the bounds and resets. */\n public clear(): this\n {\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = -Infinity;\n this.maxY = -Infinity;\n\n this.matrix = defaultMatrix;\n\n return this;\n }\n\n /**\n * Sets the bounds.\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 public set(x0: number, y0: number, x1: number, y1: number)\n {\n this.minX = x0;\n this.minY = y0;\n this.maxX = x1;\n this.maxY = y1;\n }\n\n /**\n * Adds sprite frame\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 matrix\n */\n public addFrame(x0: number, y0: number, x1: number, y1: number, matrix?: Matrix): void\n {\n matrix ||= this.matrix;\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 if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n\n x = (a * x1) + (c * y0) + tx;\n y = (b * x1) + (d * y0) + ty;\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n\n x = (a * x0) + (c * y1) + tx;\n y = (b * x0) + (d * y1) + ty;\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n\n x = (a * x1) + (c * y1) + tx;\n y = (b * x1) + (d * y1) + ty;\n\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Adds a rectangle to the bounds.\n * @param rect - The rectangle to be added.\n * @param matrix - The matrix to apply to the bounds.\n */\n public addRect(rect: Rectangle, matrix?: Matrix)\n {\n this.addFrame(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height, matrix);\n }\n\n /**\n * Adds other {@link Bounds}.\n * @param bounds - The Bounds to be added\n * @param matrix\n */\n public addBounds(bounds: BoundsData, matrix?: Matrix)\n {\n this.addFrame(bounds.minX, bounds.minY, bounds.maxX, bounds.maxY, matrix);\n }\n\n /**\n * Adds other Bounds, masked with Bounds.\n * @param mask - The Bounds to be added.\n */\n public addBoundsMask(mask: Bounds): void\n {\n this.minX = this.minX > mask.minX ? this.minX : mask.minX;\n this.minY = this.minY > mask.minY ? this.minY : mask.minY;\n this.maxX = this.maxX < mask.maxX ? this.maxX : mask.maxX;\n this.maxY = this.maxY < mask.maxY ? this.maxY : mask.maxY;\n }\n\n /**\n * Adds other Bounds, multiplied with matrix.\n * @param matrix - The matrix to apply to the bounds.\n */\n public applyMatrix(matrix: Matrix): void\n {\n const minX = this.minX;\n const minY = this.minY;\n const maxX = this.maxX;\n const maxY = this.maxY;\n\n // multiple bounds by matrix\n const { a, b, c, d, tx, ty } = matrix;\n\n let x = (a * minX) + (c * minY) + tx;\n let y = (b * minX) + (d * minY) + ty;\n\n this.minX = x;\n this.minY = y;\n this.maxX = x;\n this.maxY = y;\n\n x = (a * maxX) + (c * minY) + tx;\n y = (b * maxX) + (d * minY) + ty;\n this.minX = x < this.minX ? x : this.minX;\n this.minY = y < this.minY ? y : this.minY;\n this.maxX = x > this.maxX ? x : this.maxX;\n this.maxY = y > this.maxY ? y : this.maxY;\n\n x = (a * minX) + (c * maxY) + tx;\n y = (b * minX) + (d * maxY) + ty;\n this.minX = x < this.minX ? x : this.minX;\n this.minY = y < this.minY ? y : this.minY;\n this.maxX = x > this.maxX ? x : this.maxX;\n this.maxY = y > this.maxY ? y : this.maxY;\n\n x = (a * maxX) + (c * maxY) + tx;\n y = (b * maxX) + (d * maxY) + ty;\n this.minX = x < this.minX ? x : this.minX;\n this.minY = y < this.minY ? y : this.minY;\n this.maxX = x > this.maxX ? x : this.maxX;\n this.maxY = y > this.maxY ? y : this.maxY;\n }\n\n /**\n * Resizes the bounds object to include the given rectangle.\n * @param rect - The rectangle to be included.\n */\n public fit(rect: Rectangle): this\n {\n if (this.minX < rect.left) this.minX = rect.left;\n if (this.maxX > rect.right) this.maxX = rect.right;\n\n if (this.minY < rect.top) this.minY = rect.top;\n if (this.maxY > rect.bottom) this.maxY = rect.bottom;\n\n return this;\n }\n\n /**\n * Resizes the bounds object to include the given bounds.\n * @param left - The left value of the bounds.\n * @param right - The right value of the bounds.\n * @param top - The top value of the bounds.\n * @param bottom - The bottom value of the bounds.\n */\n public fitBounds(left: number, right: number, top: number, bottom: number): this\n {\n if (this.minX < left) this.minX = left;\n if (this.maxX > right) this.maxX = right;\n\n if (this.minY < top) this.minY = top;\n if (this.maxY > bottom) this.maxY = bottom;\n\n return this;\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 public pad(paddingX: number, paddingY: number = paddingX): this\n {\n this.minX -= paddingX;\n this.maxX += paddingX;\n\n this.minY -= paddingY;\n this.maxY += paddingY;\n\n return this;\n }\n\n /** Ceils the bounds. */\n public ceil(): this\n {\n this.minX = Math.floor(this.minX);\n this.minY = Math.floor(this.minY);\n this.maxX = Math.ceil(this.maxX);\n this.maxY = Math.ceil(this.maxY);\n\n return this;\n }\n\n /** Clones the bounds. */\n public clone(): Bounds\n {\n return new Bounds(this.minX, this.minY, this.maxX, this.maxY);\n }\n\n /**\n * Scales the bounds by the given values\n * @param x - The X value to scale by.\n * @param y - The Y value to scale by.\n */\n public scale(x: number, y: number = x): this\n {\n this.minX *= x;\n this.minY *= y;\n this.maxX *= x;\n this.maxY *= y;\n\n return this;\n }\n\n /** the x value of the bounds. */\n get x(): number\n {\n return this.minX;\n }\n set x(value: number)\n {\n const width = this.maxX - this.minX;\n\n this.minX = value;\n this.maxX = value + width;\n }\n\n /** the y value of the bounds. */\n get y(): number\n {\n return this.minY;\n }\n\n set y(value: number)\n {\n const height = this.maxY - this.minY;\n\n this.minY = value;\n this.maxY = value + height;\n }\n\n /** the width value of the bounds. */\n get width(): number\n {\n return this.maxX - this.minX;\n }\n\n set width(value: number)\n {\n this.maxX = this.minX + value;\n }\n\n /** the height value of the bounds. */\n get height(): number\n {\n return this.maxY - this.minY;\n }\n\n set height(value: number)\n {\n this.maxY = this.minY + value;\n }\n\n /** the left value of the bounds. */\n get left(): number\n {\n return this.minX;\n }\n\n /** the right value of the bounds. */\n get right(): number\n {\n return this.maxX;\n }\n\n /** the top value of the bounds. */\n get top(): number\n {\n return this.minY;\n }\n\n /** the bottom value of the bounds. */\n get bottom(): number\n {\n return this.maxY;\n }\n\n /** Is the bounds positive. */\n get isPositive(): boolean\n {\n return (this.maxX - this.minX > 0) && (this.maxY - this.minY > 0);\n }\n\n get isValid(): boolean\n {\n return (this.minX + this.minY !== Infinity);\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 * @param matrix\n */\n public addVertexData(vertexData: Float32Array, beginOffset: number, endOffset: number, matrix?: Matrix): void\n {\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n\n matrix ||= this.matrix;\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 for (let i = beginOffset; i < endOffset; i += 2)\n {\n const localX = vertexData[i];\n const localY = vertexData[i + 1];\n\n const x = (a * localX) + (c * localY) + tx;\n const y = (b * localX) + (d * localY) + 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\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n\n /**\n * Checks if the point is contained within the bounds.\n * @param x - x coordinate\n * @param y - y coordinate\n */\n public containsPoint(x: number, y: number): boolean\n {\n if (this.minX <= x && this.minY <= y && this.maxX >= x && this.maxY >= y)\n {\n return true;\n }\n\n return false;\n }\n\n public toString(): string\n {\n // eslint-disable-next-line max-len\n return `[pixi.js:Bounds minX=${this.minX} minY=${this.minY} maxX=${this.maxX} maxY=${this.maxY} width=${this.width} height=${this.height}]`;\n }\n}\n\n"],"names":[],"mappings":"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"}