{"version":3,"file":"buildPoly.mjs","sources":["../../src/utils/buildPoly.ts"],"sourcesContent":["import { utils } from 'pixijs/core';\n\nimport type { Polygon } from 'pixijs/core';\nimport type { IShapeBuildCommand } from './IShapeBuildCommand';\n\nfunction fixOrientation(points: number[], hole = false)\n{\n    const m = points.length;\n\n    if (m < 6)\n    {\n        return;\n    }\n\n    let area = 0;\n\n    for (let i = 0, x1 = points[m - 2], y1 = points[m - 1]; i < m; i += 2)\n    {\n        const x2 = points[i];\n        const y2 = points[i + 1];\n\n        area += (x2 - x1) * (y2 + y1);\n\n        x1 = x2;\n        y1 = y2;\n    }\n\n    if ((!hole && area > 0) || (hole && area <= 0))\n    {\n        const n = m / 2;\n\n        for (let i = n + (n % 2); i < m; i += 2)\n        {\n            const i1 = m - i - 2;\n            const i2 = m - i - 1;\n            const i3 = i;\n            const i4 = i + 1;\n\n            [points[i1], points[i3]] = [points[i3], points[i1]];\n            [points[i2], points[i4]] = [points[i4], points[i2]];\n        }\n    }\n}\n/**\n * Builds a polygon to draw\n *\n * Ignored from docs since it is not directly exposed.\n * @ignore\n * @private\n * @param {PIXI.WebGLGraphicsData} graphicsData - The graphics object containing all the necessary properties\n * @param {object} webGLData - an object containing all the WebGL-specific information to create this shape\n * @param {object} webGLDataNativeLines - an object containing all the WebGL-specific information to create nativeLines\n */\nexport const buildPoly: IShapeBuildCommand = {\n\n    build(graphicsData)\n    {\n        graphicsData.points = (graphicsData.shape as Polygon).points.slice();\n    },\n\n    triangulate(graphicsData, graphicsGeometry)\n    {\n        let points = graphicsData.points;\n        const holes = graphicsData.holes;\n        const verts = graphicsGeometry.points;\n        const indices = graphicsGeometry.indices;\n\n        if (points.length >= 6)\n        {\n            fixOrientation(points, false);\n\n            const holeArray = [];\n            // Process holes..\n\n            for (let i = 0; i < holes.length; i++)\n            {\n                const hole = holes[i];\n\n                fixOrientation(hole.points, true);\n\n                holeArray.push(points.length / 2);\n                points = points.concat(hole.points);\n            }\n\n            // sort color\n            const triangles = utils.earcut(points, holeArray, 2);\n\n            if (!triangles)\n            {\n                return;\n            }\n\n            const vertPos = verts.length / 2;\n\n            for (let i = 0; i < triangles.length; i += 3)\n            {\n                indices.push(triangles[i] + vertPos);\n                indices.push(triangles[i + 1] + vertPos);\n                indices.push(triangles[i + 2] + vertPos);\n            }\n\n            for (let i = 0; i < points.length; i++)\n            {\n                verts.push(points[i]);\n            }\n        }\n    },\n};\n"],"names":[],"mappings":"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"}