{"version":3,"file":"updateRenderGroupTransforms.mjs","sources":["../../../../src/scene/container/utils/updateRenderGroupTransforms.ts"],"sourcesContent":["import { Container, UPDATE_BLEND, UPDATE_COLOR, UPDATE_VISIBLE } from '../Container';\nimport { clearList } from './clearList';\nimport { mixColors } from './mixColors';\n\nimport type { RenderGroup } from '../RenderGroup';\n\nconst tempContainer = new Container();\nconst UPDATE_BLEND_COLOR_VISIBLE = UPDATE_VISIBLE | UPDATE_COLOR | UPDATE_BLEND;\n\nexport function updateRenderGroupTransforms(renderGroup: RenderGroup, updateChildRenderGroups = false)\n{\n updateRenderGroupTransform(renderGroup);\n\n const childrenToUpdate = renderGroup.childrenToUpdate;\n\n const updateTick = renderGroup.updateTick++;\n\n for (const j in childrenToUpdate)\n {\n const renderGroupDepth = Number(j);\n\n const childrenAtDepth = childrenToUpdate[j];\n\n const list = childrenAtDepth.list;\n const index = childrenAtDepth.index;\n\n for (let i = 0; i < index; i++)\n {\n const child = list[i];\n\n // check that these things match our layer and depth - if the renderGroup does not match,\n // the child has been re-parented into another rendergroup since it asked to be updated so we can ignore it here\n // secondly if the relativeRenderGroupDepth has changed, then the it means it will have been nested at a\n // different different level in the render group - so we can wait for the update that does in fact match\n if (child.parentRenderGroup === renderGroup && child.relativeRenderGroupDepth === renderGroupDepth)\n {\n updateTransformAndChildren(child, updateTick, 0);\n }\n }\n\n clearList(list, index);\n\n childrenAtDepth.index = 0;\n }\n\n if (updateChildRenderGroups)\n {\n for (let i = 0; i < renderGroup.renderGroupChildren.length; i++)\n {\n updateRenderGroupTransforms(renderGroup.renderGroupChildren[i], updateChildRenderGroups);\n }\n }\n}\n\nexport function updateRenderGroupTransform(renderGroup: RenderGroup)\n{\n const root = renderGroup.root;\n\n let worldAlpha;\n\n if (renderGroup.renderGroupParent)\n {\n const renderGroupParent = renderGroup.renderGroupParent;\n\n renderGroup.worldTransform.appendFrom(\n root.relativeGroupTransform,\n renderGroupParent.worldTransform,\n );\n\n renderGroup.worldColor = mixColors(\n root.groupColor,\n renderGroupParent.worldColor,\n );\n\n worldAlpha = root.groupAlpha * renderGroupParent.worldAlpha;\n }\n else\n {\n renderGroup.worldTransform.copyFrom(root.localTransform);\n renderGroup.worldColor = root.localColor;\n worldAlpha = root.localAlpha;\n }\n\n // eslint-disable-next-line no-nested-ternary\n worldAlpha = worldAlpha < 0 ? 0 : (worldAlpha > 1 ? 1 : worldAlpha);\n renderGroup.worldAlpha = worldAlpha;\n\n renderGroup.worldColorAlpha = renderGroup.worldColor\n + (((worldAlpha * 255) | 0) << 24);\n}\n\nexport function updateTransformAndChildren(container: Container, updateTick: number, updateFlags: number)\n{\n if (updateTick === container.updateTick) return;\n container.updateTick = updateTick;\n\n container.didChange = false;\n\n const localTransform = container.localTransform;\n\n container.updateLocalTransform();\n\n const parent = container.parent;\n\n if ((parent && !parent.renderGroup))\n {\n updateFlags = updateFlags | container._updateFlags;\n\n container.relativeGroupTransform.appendFrom(\n localTransform,\n parent.relativeGroupTransform,\n );\n\n if (updateFlags & UPDATE_BLEND_COLOR_VISIBLE)\n {\n updateColorBlendVisibility(container, parent, updateFlags);\n }\n }\n else\n {\n updateFlags = container._updateFlags;\n\n container.relativeGroupTransform.copyFrom(localTransform);\n\n if (updateFlags & UPDATE_BLEND_COLOR_VISIBLE)\n {\n updateColorBlendVisibility(container, tempContainer, updateFlags);\n }\n }\n\n // don't update children if its a layer..\n if (!container.renderGroup)\n {\n const children = container.children;\n const length = children.length;\n\n for (let i = 0; i < length; i++)\n {\n updateTransformAndChildren(children[i], updateTick, updateFlags);\n }\n\n const renderGroup = container.parentRenderGroup;\n\n if (container.renderPipeId && !renderGroup.structureDidChange)\n {\n renderGroup.updateRenderable(container);\n }\n }\n}\n\nfunction updateColorBlendVisibility(\n container: Container,\n parent: Container,\n updateFlags: number,\n): void\n{\n if (updateFlags & UPDATE_COLOR)\n {\n container.groupColor = mixColors(\n container.localColor,\n parent.groupColor\n );\n\n let groupAlpha = container.localAlpha * parent.groupAlpha;\n\n // eslint-disable-next-line no-nested-ternary\n groupAlpha = groupAlpha < 0 ? 0 : (groupAlpha > 1 ? 1 : groupAlpha);\n\n container.groupAlpha = groupAlpha;\n container.groupColorAlpha = container.groupColor + (((groupAlpha * 255) | 0) << 24);\n }\n\n if (updateFlags & UPDATE_BLEND)\n {\n container.groupBlendMode = container.localBlendMode === 'inherit' ? parent.groupBlendMode : container.localBlendMode;\n }\n\n if (updateFlags & UPDATE_VISIBLE)\n {\n container.globalDisplayStatus = container.localDisplayStatus & parent.globalDisplayStatus;\n }\n\n container._updateFlags = 0;\n}\n\n"],"names":[],"mappings":"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"}