{"version":3,"file":"PlaneGeometry.mjs","sources":["../../../src/scene/mesh-plane/PlaneGeometry.ts"],"sourcesContent":["import { deprecation, v8_0_0 } from '../../utils/logging/deprecation';\nimport { MeshGeometry } from '../mesh/shared/MeshGeometry';\n\nimport type { MeshGeometryOptions } from '../mesh/shared/MeshGeometry';\n\n/**\n * Constructor options used for `PlaneGeometry` instances.\n * ```js\n * const planeGeometry = new PlaneGeometry({\n *    width: 100,\n *    height: 100,\n *    verticesX: 10,\n *    verticesY: 10,\n * });\n * ```\n * @see {@link PlaneGeometry}\n * @category scene\n * @advanced\n */\nexport interface PlaneGeometryOptions\n{\n    /** Width of plane */\n    width?: number;\n    /** Height of plane */\n    height?: number;\n    /** Number of vertices on x-axis */\n    verticesX?: number;\n    /** Number of vertices on y-axis */\n    verticesY?: number;\n}\n\n/**\n * The PlaneGeometry allows you to draw a 2d plane\n * @category scene\n * @advanced\n */\nexport class PlaneGeometry extends MeshGeometry\n{\n    public static defaultOptions: PlaneGeometryOptions & MeshGeometryOptions = {\n        width: 100,\n        height: 100,\n        verticesX: 10,\n        verticesY: 10,\n    };\n\n    /** The number of vertices on x-axis */\n    public verticesX: number;\n    /** The number of vertices on y-axis */\n    public verticesY: number;\n    /** The width of plane */\n    public width: number;\n    /** The height of plane */\n    public height: number;\n\n    /**\n     * @param {PlaneGeometryOptions} options - Options to be applied to plane geometry\n     */\n    constructor(options: PlaneGeometryOptions);\n    /** @deprecated since 8.0.0 */\n    constructor(width?: number, height?: number, verticesX?: number, verticesY?: number);\n    constructor(...args: [PlaneGeometryOptions?] | [number?, number?, number?, number?])\n    {\n        super({});\n\n        let options = args[0] ?? {};\n\n        if (typeof options === 'number')\n        {\n            // #if _DEBUG\n            // eslint-disable-next-line max-len\n            deprecation(v8_0_0, 'PlaneGeometry constructor changed please use { width, height, verticesX, verticesY } instead');\n            // #endif\n\n            options = {\n                width: options,\n                height: args[1],\n                verticesX: args[2],\n                verticesY: args[3],\n            };\n        }\n\n        this.build(options);\n    }\n\n    /**\n     * Refreshes plane coordinates\n     * @param options - Options to be applied to plane geometry\n     */\n    public build(options: PlaneGeometryOptions): void\n    {\n        options = { ...PlaneGeometry.defaultOptions, ...options };\n\n        this.verticesX = this.verticesX ?? options.verticesX;\n        this.verticesY = this.verticesY ?? options.verticesY;\n\n        this.width = this.width ?? options.width;\n        this.height = this.height ?? options.height;\n\n        const total = this.verticesX * this.verticesY;\n        const verts = [];\n        const uvs = [];\n        const indices = [];\n\n        const verticesX = this.verticesX - 1;\n        const verticesY = this.verticesY - 1;\n\n        const sizeX = (this.width) / verticesX;\n        const sizeY = (this.height) / verticesY;\n\n        for (let i = 0; i < total; i++)\n        {\n            const x = (i % this.verticesX);\n            const y = ((i / this.verticesX) | 0);\n\n            verts.push(x * sizeX, y * sizeY);\n            uvs.push(x / verticesX, y / verticesY);\n        }\n\n        const totalSub = verticesX * verticesY;\n\n        for (let i = 0; i < totalSub; i++)\n        {\n            const xpos = i % verticesX;\n            const ypos = (i / verticesX) | 0;\n\n            const value = (ypos * this.verticesX) + xpos;\n            const value2 = (ypos * this.verticesX) + xpos + 1;\n            const value3 = ((ypos + 1) * this.verticesX) + xpos;\n            const value4 = ((ypos + 1) * this.verticesX) + xpos + 1;\n\n            indices.push(value, value2, value3,\n                value2, value4, value3);\n        }\n\n        this.buffers[0].data = new Float32Array(verts);\n        this.buffers[1].data = new Float32Array(uvs);\n        this.indexBuffer.data = new Uint32Array(indices);\n\n        // ensure that the changes are uploaded\n        this.buffers[0].update();\n        this.buffers[1].update();\n        this.indexBuffer.update();\n    }\n}\n"],"names":[],"mappings":";;;;AAoCO,MAAM,cAAA,GAAN,MAAM,cAAA,SAAsB,YAAA,CACnC;AAAA,EAuBI,eAAe,IAAA,EACf;AACI,IAAA,KAAA,CAAM,EAAE,CAAA;AAER,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,CAAC,CAAA,IAAK,EAAC;AAE1B,IAAA,IAAI,OAAO,YAAY,QAAA,EACvB;AAGI,MAAA,WAAA,CAAY,QAAQ,8FAA8F,CAAA;AAGlH,MAAA,OAAA,GAAU;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,QACd,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,QACjB,SAAA,EAAW,KAAK,CAAC;AAAA,OACrB;AAAA,IACJ;AAEA,IAAA,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,MAAM,OAAA,EACb;AACI,IAAA,OAAA,GAAU,EAAE,GAAG,cAAA,CAAc,cAAA,EAAgB,GAAG,OAAA,EAAQ;AAExD,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,OAAA,CAAQ,SAAA;AAC3C,IAAA,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA,IAAa,OAAA,CAAQ,SAAA;AAE3C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,KAAA,IAAS,OAAA,CAAQ,KAAA;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,OAAA,CAAQ,MAAA;AAErC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,GAAY,IAAA,CAAK,SAAA;AACpC,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,MAAM,MAAM,EAAC;AACb,IAAA,MAAM,UAAU,EAAC;AAEjB,IAAA,MAAM,SAAA,GAAY,KAAK,SAAA,GAAY,CAAA;AACnC,IAAA,MAAM,SAAA,GAAY,KAAK,SAAA,GAAY,CAAA;AAEnC,IAAA,MAAM,KAAA,GAAS,KAAK,KAAA,GAAS,SAAA;AAC7B,IAAA,MAAM,KAAA,GAAS,KAAK,MAAA,GAAU,SAAA;AAE9B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAC3B;AACI,MAAA,MAAM,CAAA,GAAK,IAAI,IAAA,CAAK,SAAA;AACpB,MAAA,MAAM,CAAA,GAAM,CAAA,GAAI,IAAA,CAAK,SAAA,GAAa,CAAA;AAElC,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,KAAK,CAAA;AAC/B,MAAA,GAAA,CAAI,IAAA,CAAK,CAAA,GAAI,SAAA,EAAW,CAAA,GAAI,SAAS,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,WAAW,SAAA,GAAY,SAAA;AAE7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,EAAU,CAAA,EAAA,EAC9B;AACI,MAAA,MAAM,OAAO,CAAA,GAAI,SAAA;AACjB,MAAA,MAAM,IAAA,GAAQ,IAAI,SAAA,GAAa,CAAA;AAE/B,MAAA,MAAM,KAAA,GAAS,IAAA,GAAO,IAAA,CAAK,SAAA,GAAa,IAAA;AACxC,MAAA,MAAM,MAAA,GAAU,IAAA,GAAO,IAAA,CAAK,SAAA,GAAa,IAAA,GAAO,CAAA;AAChD,MAAA,MAAM,MAAA,GAAA,CAAW,IAAA,GAAO,CAAA,IAAK,IAAA,CAAK,SAAA,GAAa,IAAA;AAC/C,MAAA,MAAM,MAAA,GAAA,CAAW,IAAA,GAAO,CAAA,IAAK,IAAA,CAAK,YAAa,IAAA,GAAO,CAAA;AAEtD,MAAA,OAAA,CAAQ,IAAA;AAAA,QAAK,KAAA;AAAA,QAAO,MAAA;AAAA,QAAQ,MAAA;AAAA,QACxB,MAAA;AAAA,QAAQ,MAAA;AAAA,QAAQ;AAAA,OAAM;AAAA,IAC9B;AAEA,IAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,IAAA,GAAO,IAAI,aAAa,KAAK,CAAA;AAC7C,IAAA,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,IAAA,GAAO,IAAI,aAAa,GAAG,CAAA;AAC3C,IAAA,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,IAAI,WAAA,CAAY,OAAO,CAAA;AAG/C,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA,EAAO;AACvB,IAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,CAAE,MAAA,EAAO;AACvB,IAAA,IAAA,CAAK,YAAY,MAAA,EAAO;AAAA,EAC5B;AACJ,CAAA;AA3Ga,cAAA,CAEK,cAAA,GAA6D;AAAA,EACvE,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,EAAA;AAAA,EACX,SAAA,EAAW;AACf,CAAA;AAPG,IAAM,aAAA,GAAN;;;;"}