{"version":3,"file":"Rectangle.mjs","sources":["../../src/shapes/Rectangle.ts"],"sourcesContent":["import { SHAPES } from '../const';\nimport { Point } from '../Point';\n\nimport type { Matrix } from '../Matrix';\n\nconst tempPoints = [new Point(), new Point(), new Point(), new Point()];\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Rectangle extends GlobalMixins.Rectangle {}\n\n/**\n * Size object, contains width and height\n * @memberof PIXI\n * @typedef {object} ISize\n * @property {number} width - Width component\n * @property {number} height - Height component\n */\n\n/**\n * Rectangle object is an area defined by its position, as indicated by its top-left corner\n * point (x, y) and by its width and its height.\n * @memberof PIXI\n */\nexport class Rectangle\n{\n    /** @default 0 */\n    public x: number;\n\n    /** @default 0 */\n    public y: number;\n    /** @default 0 */\n    public width: number;\n\n    /** @default 0 */\n    public height: number;\n\n    /**\n     * The type of the object, mainly used to avoid `instanceof` checks\n     * @default PIXI.SHAPES.RECT\n     * @see PIXI.SHAPES\n     */\n    public readonly type: SHAPES.RECT;\n\n    /**\n     * @param x - The X coordinate of the upper-left corner of the rectangle\n     * @param y - The Y coordinate of the upper-left corner of the rectangle\n     * @param width - The overall width of the rectangle\n     * @param height - The overall height of the rectangle\n     */\n    constructor(x: string | number = 0, y: string | number = 0, width: string | number = 0, height: string | number = 0)\n    {\n        this.x = Number(x);\n        this.y = Number(y);\n        this.width = Number(width);\n        this.height = Number(height);\n        this.type = SHAPES.RECT;\n    }\n\n    /** Returns the left edge of the rectangle. */\n    get left(): number\n    {\n        return this.x;\n    }\n\n    /** Returns the right edge of the rectangle. */\n    get right(): number\n    {\n        return this.x + this.width;\n    }\n\n    /** Returns the top edge of the rectangle. */\n    get top(): number\n    {\n        return this.y;\n    }\n\n    /** Returns the bottom edge of the rectangle. */\n    get bottom(): number\n    {\n        return this.y + this.height;\n    }\n\n    /** A constant empty rectangle. */\n    static get EMPTY(): Rectangle\n    {\n        return new Rectangle(0, 0, 0, 0);\n    }\n\n    /**\n     * Creates a clone of this Rectangle\n     * @returns a copy of the rectangle\n     */\n    clone(): Rectangle\n    {\n        return new Rectangle(this.x, this.y, this.width, this.height);\n    }\n\n    /**\n     * Copies another rectangle to this one.\n     * @param rectangle - The rectangle to copy from.\n     * @returns Returns itself.\n     */\n    copyFrom(rectangle: Rectangle): Rectangle\n    {\n        this.x = rectangle.x;\n        this.y = rectangle.y;\n        this.width = rectangle.width;\n        this.height = rectangle.height;\n\n        return this;\n    }\n\n    /**\n     * Copies this rectangle to another one.\n     * @param rectangle - The rectangle to copy to.\n     * @returns Returns given parameter.\n     */\n    copyTo(rectangle: Rectangle): Rectangle\n    {\n        rectangle.x = this.x;\n        rectangle.y = this.y;\n        rectangle.width = this.width;\n        rectangle.height = this.height;\n\n        return rectangle;\n    }\n\n    /**\n     * Checks whether the x and y coordinates given are contained within this Rectangle\n     * @param x - The X coordinate of the point to test\n     * @param y - The Y coordinate of the point to test\n     * @returns Whether the x/y coordinates are within this Rectangle\n     */\n    contains(x: number, y: number): boolean\n    {\n        if (this.width <= 0 || this.height <= 0)\n        {\n            return false;\n        }\n\n        if (x >= this.x && x < this.x + this.width)\n        {\n            if (y >= this.y && y < this.y + this.height)\n            {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    /**\n     * Determines whether the `other` Rectangle transformed by `transform` intersects with `this` Rectangle object.\n     * Returns true only if the area of the intersection is >0, this means that Rectangles\n     * sharing a side are not overlapping. Another side effect is that an arealess rectangle\n     * (width or height equal to zero) can't intersect any other rectangle.\n     * @param {Rectangle} other - The Rectangle to intersect with `this`.\n     * @param {Matrix} transform - The transformation matrix of `other`.\n     * @returns {boolean} A value of `true` if the transformed `other` Rectangle intersects with `this`; otherwise `false`.\n     */\n    intersects(other: Rectangle, transform?: Matrix): boolean\n    {\n        if (!transform)\n        {\n            const x0 = this.x < other.x ? other.x : this.x;\n            const x1 = this.right > other.right ? other.right : this.right;\n\n            if (x1 <= x0)\n            {\n                return false;\n            }\n\n            const y0 = this.y < other.y ? other.y : this.y;\n            const y1 = this.bottom > other.bottom ? other.bottom : this.bottom;\n\n            return y1 > y0;\n        }\n\n        const x0 = this.left;\n        const x1 = this.right;\n        const y0 = this.top;\n        const y1 = this.bottom;\n\n        if (x1 <= x0 || y1 <= y0)\n        {\n            return false;\n        }\n\n        const lt = tempPoints[0].set(other.left, other.top);\n        const lb = tempPoints[1].set(other.left, other.bottom);\n        const rt = tempPoints[2].set(other.right, other.top);\n        const rb = tempPoints[3].set(other.right, other.bottom);\n\n        if (rt.x <= lt.x || lb.y <= lt.y)\n        {\n            return false;\n        }\n\n        const s = Math.sign((transform.a * transform.d) - (transform.b * transform.c));\n\n        if (s === 0)\n        {\n            return false;\n        }\n\n        transform.apply(lt, lt);\n        transform.apply(lb, lb);\n        transform.apply(rt, rt);\n        transform.apply(rb, rb);\n\n        if (Math.max(lt.x, lb.x, rt.x, rb.x) <= x0\n            || Math.min(lt.x, lb.x, rt.x, rb.x) >= x1\n            || Math.max(lt.y, lb.y, rt.y, rb.y) <= y0\n            || Math.min(lt.y, lb.y, rt.y, rb.y) >= y1)\n        {\n            return false;\n        }\n\n        const nx = s * (lb.y - lt.y);\n        const ny = s * (lt.x - lb.x);\n        const n00 = (nx * x0) + (ny * y0);\n        const n10 = (nx * x1) + (ny * y0);\n        const n01 = (nx * x0) + (ny * y1);\n        const n11 = (nx * x1) + (ny * y1);\n\n        if (Math.max(n00, n10, n01, n11) <= (nx * lt.x) + (ny * lt.y)\n            || Math.min(n00, n10, n01, n11) >= (nx * rb.x) + (ny * rb.y))\n        {\n            return false;\n        }\n\n        const mx = s * (lt.y - rt.y);\n        const my = s * (rt.x - lt.x);\n        const m00 = (mx * x0) + (my * y0);\n        const m10 = (mx * x1) + (my * y0);\n        const m01 = (mx * x0) + (my * y1);\n        const m11 = (mx * x1) + (my * y1);\n\n        if (Math.max(m00, m10, m01, m11) <= (mx * lt.x) + (my * lt.y)\n            || Math.min(m00, m10, m01, m11) >= (mx * rb.x) + (my * rb.y))\n        {\n            return false;\n        }\n\n        return true;\n    }\n\n    /**\n     * Pads the rectangle 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     * @returns Returns itself.\n     */\n    pad(paddingX = 0, paddingY = paddingX): this\n    {\n        this.x -= paddingX;\n        this.y -= paddingY;\n\n        this.width += paddingX * 2;\n        this.height += paddingY * 2;\n\n        return this;\n    }\n\n    /**\n     * Fits this rectangle around the passed one.\n     * @param rectangle - The rectangle to fit.\n     * @returns Returns itself.\n     */\n    fit(rectangle: Rectangle): this\n    {\n        const x1 = Math.max(this.x, rectangle.x);\n        const x2 = Math.min(this.x + this.width, rectangle.x + rectangle.width);\n        const y1 = Math.max(this.y, rectangle.y);\n        const y2 = Math.min(this.y + this.height, rectangle.y + rectangle.height);\n\n        this.x = x1;\n        this.width = Math.max(x2 - x1, 0);\n        this.y = y1;\n        this.height = Math.max(y2 - y1, 0);\n\n        return this;\n    }\n\n    /**\n     * Enlarges rectangle that way its corners lie on grid\n     * @param resolution - resolution\n     * @param eps - precision\n     * @returns Returns itself.\n     */\n    ceil(resolution = 1, eps = 0.001): this\n    {\n        const x2 = Math.ceil((this.x + this.width - eps) * resolution) / resolution;\n        const y2 = Math.ceil((this.y + this.height - eps) * resolution) / resolution;\n\n        this.x = Math.floor((this.x + eps) * resolution) / resolution;\n        this.y = Math.floor((this.y + eps) * resolution) / resolution;\n\n        this.width = x2 - this.x;\n        this.height = y2 - this.y;\n\n        return this;\n    }\n\n    /**\n     * Enlarges this rectangle to include the passed rectangle.\n     * @param rectangle - The rectangle to include.\n     * @returns Returns itself.\n     */\n    enlarge(rectangle: Rectangle): this\n    {\n        const x1 = Math.min(this.x, rectangle.x);\n        const x2 = Math.max(this.x + this.width, rectangle.x + rectangle.width);\n        const y1 = Math.min(this.y, rectangle.y);\n        const y2 = Math.max(this.y + this.height, rectangle.y + rectangle.height);\n\n        this.x = x1;\n        this.width = x2 - x1;\n        this.y = y1;\n        this.height = y2 - y1;\n\n        return this;\n    }\n\n    // #if _DEBUG\n    toString(): string\n    {\n        return `[pixijs/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`;\n    }\n    // #endif\n}\n"],"names":[],"mappings":"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"}