1 line
19 KiB
Plaintext
1 line
19 KiB
Plaintext
{"version":3,"file":"Bounds.mjs","sources":["../src/Bounds.ts"],"sourcesContent":["import { Rectangle } from '@pixi/core';\n\nimport type { IPointData, Matrix, Transform } from '@pixi/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 PIXI.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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"} |