{"version":3,"file":"NineSliceGeometry.mjs","sources":["../../../src/scene/sprite-nine-slice/NineSliceGeometry.ts"],"sourcesContent":["import { type PointData } from '../../maths/point/PointData';\nimport { PlaneGeometry } from '../mesh-plane/PlaneGeometry';\n\n/**\n * Options for the NineSliceGeometry.\n * @category scene\n * @advanced\n */\nexport interface NineSliceGeometryOptions\n{\n\n    /** The width of the NineSlicePlane, setting this will actually modify the vertices and UV's of this plane. */\n    width?: number\n    /** The height of the NineSlicePlane, setting this will actually modify the vertices and UV's of this plane. */\n    height?: number\n    /** The original width of the texture */\n    originalWidth?: number\n    /** The original height of the texture */\n    originalHeight?: number\n    /** The width of the left column. */\n    leftWidth?: number\n    /** The height of the top row. */\n    topHeight?: number\n    /** The width of the right column. */\n    rightWidth?: number\n    /** The height of the bottom row. */\n    bottomHeight?: number\n\n    /** The anchor point of the NineSliceSprite. */\n    anchor?: PointData\n}\n\n/**\n * The NineSliceGeometry class allows you to create a NineSlicePlane object.\n * @category scene\n * @advanced\n */\nexport class NineSliceGeometry extends PlaneGeometry\n{\n    /** The default options for the NineSliceGeometry. */\n    public static defaultOptions: NineSliceGeometryOptions = {\n        /** The width of the NineSlicePlane, setting this will actually modify the vertices and UV's of this plane. */\n        width: 100,\n        /** The height of the NineSlicePlane, setting this will actually modify the vertices and UV's of this plane. */\n        height: 100,\n        /** The width of the left column. */\n        leftWidth: 10,\n        /** The height of the top row. */\n        topHeight: 10,\n        /** The width of the right column. */\n        rightWidth: 10,\n        /** The height of the bottom row. */\n        bottomHeight: 10,\n\n        /** The original width of the texture */\n        originalWidth: 100,\n        /** The original height of the texture */\n        originalHeight: 100,\n    };\n\n    /** @internal */\n    public _leftWidth: number;\n    /** @internal */\n    public _rightWidth: number;\n    /** @internal */\n    public _topHeight: number;\n    /** @internal */\n    public _bottomHeight: number;\n\n    private _originalWidth: number;\n    private _originalHeight: number;\n    private _anchorX: any;\n    private _anchorY: number;\n\n    constructor(options: NineSliceGeometryOptions = {})\n    {\n        options = { ...NineSliceGeometry.defaultOptions, ...options };\n\n        super({\n            width: options.width,\n            height: options.height,\n            verticesX: 4,\n            verticesY: 4,\n        });\n\n        this.update(options);\n    }\n\n    /**\n     * Updates the NineSliceGeometry with the options.\n     * @param options - The options of the NineSliceGeometry.\n     */\n    public update(options: NineSliceGeometryOptions)\n    {\n        this.width = options.width ?? this.width;\n        this.height = options.height ?? this.height;\n        this._originalWidth = options.originalWidth ?? this._originalWidth;\n        this._originalHeight = options.originalHeight ?? this._originalHeight;\n        this._leftWidth = options.leftWidth ?? this._leftWidth;\n        this._rightWidth = options.rightWidth ?? this._rightWidth;\n        this._topHeight = options.topHeight ?? this._topHeight;\n        this._bottomHeight = options.bottomHeight ?? this._bottomHeight;\n\n        this._anchorX = options.anchor?.x;\n        this._anchorY = options.anchor?.y;\n\n        this.updateUvs();\n        this.updatePositions();\n    }\n\n    /** Updates the positions of the vertices. */\n    public updatePositions()\n    {\n        const p = this.positions;\n        const {\n            width,\n            height,\n            _leftWidth,\n            _rightWidth,\n            _topHeight,\n            _bottomHeight,\n            _anchorX,\n            _anchorY,\n        } = this;\n\n        const w = _leftWidth + _rightWidth;\n        const scaleW = width > w ? 1.0 : width / w;\n\n        const h = _topHeight + _bottomHeight;\n        const scaleH = height > h ? 1.0 : height / h;\n\n        const scale = Math.min(scaleW, scaleH);\n\n        const anchorOffsetX = _anchorX * width;\n        const anchorOffsetY = _anchorY * height;\n\n        p[0] = p[8] = p[16] = p[24] = -anchorOffsetX;\n        p[2] = p[10] = p[18] = p[26] = (_leftWidth * scale) - anchorOffsetX;\n        p[4] = p[12] = p[20] = p[28] = width - (_rightWidth * scale) - anchorOffsetX;\n        p[6] = p[14] = p[22] = p[30] = width - anchorOffsetX;\n\n        p[1] = p[3] = p[5] = p[7] = -anchorOffsetY;\n        p[9] = p[11] = p[13] = p[15] = (_topHeight * scale) - anchorOffsetY;\n        p[17] = p[19] = p[21] = p[23] = height - (_bottomHeight * scale) - anchorOffsetY;\n        p[25] = p[27] = p[29] = p[31] = height - anchorOffsetY;\n\n        this.getBuffer('aPosition').update();\n    }\n\n    /** Updates the UVs of the vertices. */\n    public updateUvs()\n    {\n        const uvs = this.uvs;\n\n        uvs[0] = uvs[8] = uvs[16] = uvs[24] = 0;\n        uvs[1] = uvs[3] = uvs[5] = uvs[7] = 0;\n\n        uvs[6] = uvs[14] = uvs[22] = uvs[30] = 1;\n        uvs[25] = uvs[27] = uvs[29] = uvs[31] = 1;\n\n        const _uvw = 1.0 / this._originalWidth;\n        const _uvh = 1.0 / this._originalHeight;\n\n        uvs[2] = uvs[10] = uvs[18] = uvs[26] = _uvw * this._leftWidth;\n        uvs[9] = uvs[11] = uvs[13] = uvs[15] = _uvh * this._topHeight;\n\n        uvs[4] = uvs[12] = uvs[20] = uvs[28] = 1 - (_uvw * this._rightWidth);\n        uvs[17] = uvs[19] = uvs[21] = uvs[23] = 1 - (_uvh * this._bottomHeight);\n\n        this.getBuffer('aUV').update();\n    }\n}\n\n"],"names":[],"mappings":"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"}