{"version":3,"file":"CanvasParticleContainerAdaptor.mjs","sources":["../../../../src/scene/particle-container/canvas/CanvasParticleContainerAdaptor.ts"],"sourcesContent":["import { canvasUtils } from '../../../rendering/renderers/canvas/utils/canvasUtils';\n\nimport type { CanvasRenderer } from '../../../rendering/renderers/canvas/CanvasRenderer';\nimport type { ParticleContainer } from '../shared/ParticleContainer';\nimport type { ParticleContainerAdaptor, ParticleContainerPipe } from '../shared/ParticleContainerPipe';\n\n/**\n * A Canvas adaptor for the ParticleContainer that renders particles using Canvas2D.\n * @internal\n */\nexport class CanvasParticleContainerAdaptor implements ParticleContainerAdaptor\n{\n    public execute(particleContainerPipe: ParticleContainerPipe, container: ParticleContainer)\n    {\n        const renderer = particleContainerPipe.renderer as CanvasRenderer;\n        const context = renderer.canvasContext.activeContext;\n        const children = container.particleChildren;\n        const texture = container.texture;\n\n        context.save();\n        renderer.canvasContext.setContextTransform(container.worldTransform, container.roundPixels);\n        renderer.canvasContext.setBlendMode(container.groupBlendMode);\n\n        const groupColorAlpha = container.groupColorAlpha;\n        const filterAlpha = (renderer.filter as { alphaMultiplier?: number } | null)?.alphaMultiplier ?? 1;\n        const groupAlpha = (((groupColorAlpha >>> 24) & 0xFF) / 255) * filterAlpha;\n\n        for (let i = 0; i < children.length; i++)\n        {\n            const particle = children[i];\n            const pTexture = particle.texture || texture;\n\n            if (!pTexture?.source?.resource) continue;\n\n            const color = particle.color;\n            const alpha = (((color >>> 24) & 0xFF) / 255) * groupAlpha;\n\n            if (alpha <= 0) continue;\n\n            const bgr = color & 0xFFFFFF;\n            const tint = ((bgr & 0xFF) << 16) + (bgr & 0xFF00) + ((bgr >> 16) & 0xFF);\n\n            let drawSource: CanvasImageSource = pTexture.source.resource as CanvasImageSource;\n\n            if (tint !== 0xFFFFFF)\n            {\n                drawSource = canvasUtils.getTintedCanvas({ texture: pTexture }, tint) as CanvasImageSource;\n            }\n\n            const frame = pTexture.frame;\n            const resolution = pTexture.source.resolution;\n\n            const sx = frame.x * resolution;\n            const sy = frame.y * resolution;\n            const sw = frame.width * resolution;\n            const sh = frame.height * resolution;\n\n            context.globalAlpha = alpha;\n\n            const dx = -particle.anchorX * frame.width;\n            const dy = -particle.anchorY * frame.height;\n\n            if (particle.rotation !== 0 || particle.scaleX !== 1 || particle.scaleY !== 1)\n            {\n                context.save();\n                context.translate(particle.x, particle.y);\n                context.rotate(particle.rotation);\n                context.scale(particle.scaleX, particle.scaleY);\n                context.drawImage(drawSource, sx, sy, sw, sh, dx, dy, frame.width, frame.height);\n                context.restore();\n            }\n            else\n            {\n                context.drawImage(drawSource, sx, sy, sw, sh, particle.x + dx, particle.y + dy, frame.width, frame.height);\n            }\n        }\n\n        context.restore();\n    }\n}\n"],"names":[],"mappings":"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"}