@carbonenginejs/runtime-trinity 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/curves/CjsGrannyCurves.js +12 -13
  2. package/dist/curves/CjsGrannyCurves.js.map +1 -1
  3. package/dist/eve/EveBannerSet.js +20 -1
  4. package/dist/eve/EveBannerSet.js.map +1 -1
  5. package/dist/eve/EveBoosterSet2.js +19 -1
  6. package/dist/eve/EveBoosterSet2.js.map +1 -1
  7. package/dist/eve/EveComponentTypes.js +116 -0
  8. package/dist/eve/EveComponentTypes.js.map +1 -0
  9. package/dist/eve/EveHazeSet.js +18 -1
  10. package/dist/eve/EveHazeSet.js.map +1 -1
  11. package/dist/eve/EvePlaneSet.js +19 -1
  12. package/dist/eve/EvePlaneSet.js.map +1 -1
  13. package/dist/eve/EveSpotlightSet.js +18 -1
  14. package/dist/eve/EveSpotlightSet.js.map +1 -1
  15. package/dist/eve/EveSpriteLineSet.js +18 -1
  16. package/dist/eve/EveSpriteLineSet.js.map +1 -1
  17. package/dist/eve/EveSpriteSet.js +18 -1
  18. package/dist/eve/EveSpriteSet.js.map +1 -1
  19. package/dist/eve/EveUpdateContext.js +195 -31
  20. package/dist/eve/EveUpdateContext.js.map +1 -1
  21. package/dist/eve/attachment/turrets/EveTurretFiringFX.js +23 -1
  22. package/dist/eve/attachment/turrets/EveTurretFiringFX.js.map +1 -1
  23. package/dist/eve/attachment/turrets/EveTurretSet.js +43 -1
  24. package/dist/eve/attachment/turrets/EveTurretSet.js.map +1 -1
  25. package/dist/eve/child/EveChildContainer.js +95 -60
  26. package/dist/eve/child/EveChildContainer.js.map +1 -1
  27. package/dist/eve/child/EveChildFogVolume.js +14 -1
  28. package/dist/eve/child/EveChildFogVolume.js.map +1 -1
  29. package/dist/eve/child/EveChildInstancedMeshes.js +43 -1
  30. package/dist/eve/child/EveChildInstancedMeshes.js.map +1 -1
  31. package/dist/eve/child/EveChildLightingOverride.js +14 -1
  32. package/dist/eve/child/EveChildLightingOverride.js.map +1 -1
  33. package/dist/eve/child/EveChildMesh.js +121 -80
  34. package/dist/eve/child/EveChildMesh.js.map +1 -1
  35. package/dist/eve/child/EveChildTransform.js +27 -17
  36. package/dist/eve/child/EveChildTransform.js.map +1 -1
  37. package/dist/eve/index.js +2 -0
  38. package/dist/eve/index.js.map +1 -1
  39. package/dist/eve/renderable/stretch/EveFiringEffectElementContainer.js +14 -1
  40. package/dist/eve/renderable/stretch/EveFiringEffectElementContainer.js.map +1 -1
  41. package/dist/eve/renderable/stretch/EveStretch.js +11 -1
  42. package/dist/eve/renderable/stretch/EveStretch.js.map +1 -1
  43. package/dist/eve/renderable/stretch/EveStretch2.js +14 -1
  44. package/dist/eve/renderable/stretch/EveStretch2.js.map +1 -1
  45. package/dist/eve/renderable/stretch/EveStretch3.js +24 -1
  46. package/dist/eve/renderable/stretch/EveStretch3.js.map +1 -1
  47. package/dist/eve/scene/EveSpaceScene.js +443 -16
  48. package/dist/eve/scene/EveSpaceScene.js.map +1 -1
  49. package/dist/eve/spaceObject/EveEffectRoot2.js +28 -1
  50. package/dist/eve/spaceObject/EveEffectRoot2.js.map +1 -1
  51. package/dist/eve/spaceObject/EveMobile.js +25 -1
  52. package/dist/eve/spaceObject/EveMobile.js.map +1 -1
  53. package/dist/eve/spaceObject/EveSpaceObject2.js +59 -1
  54. package/dist/eve/spaceObject/EveSpaceObject2.js.map +1 -1
  55. package/dist/generated/eve/child/EveChildCloud2.js +88 -5
  56. package/dist/generated/eve/child/EveChildCloud2.js.map +1 -1
  57. package/dist/generated/eve/child/EveChildExplosion.js +17 -1
  58. package/dist/generated/eve/child/EveChildExplosion.js.map +1 -1
  59. package/dist/generated/eve/child/EveChildInstanceContainer.js +29 -1
  60. package/dist/generated/eve/child/EveChildInstanceContainer.js.map +1 -1
  61. package/dist/generated/eve/child/EveChildParticleSystem.js +32 -24
  62. package/dist/generated/eve/child/EveChildParticleSystem.js.map +1 -1
  63. package/dist/generated/eve/child/EveChildPlug.js +23 -1
  64. package/dist/generated/eve/child/EveChildPlug.js.map +1 -1
  65. package/dist/generated/eve/child/EveChildPostProcessVolume.js +27 -14
  66. package/dist/generated/eve/child/EveChildPostProcessVolume.js.map +1 -1
  67. package/dist/generated/eve/child/EveChildRef.js +17 -1
  68. package/dist/generated/eve/child/EveChildRef.js.map +1 -1
  69. package/dist/generated/eve/child/EveChildSocket.js +17 -1
  70. package/dist/generated/eve/child/EveChildSocket.js.map +1 -1
  71. package/dist/generated/eve/child/behaviors/BehaviorGroup.js +43 -40
  72. package/dist/generated/eve/child/behaviors/BehaviorGroup.js.map +1 -1
  73. package/dist/generated/eve/child/procedural/EveChildProceduralContainer.js +53 -49
  74. package/dist/generated/eve/child/procedural/EveChildProceduralContainer.js.map +1 -1
  75. package/dist/generated/eve/scene/EveComponentRegistry.js +11 -0
  76. package/dist/generated/eve/scene/EveComponentRegistry.js.map +1 -1
  77. package/dist/generated/eve/scene/TriShadowFrustum.js +74 -22
  78. package/dist/generated/eve/scene/TriShadowFrustum.js.map +1 -1
  79. package/dist/generated/eve/scene/TriShadowOrthoFrustum.js +128 -26
  80. package/dist/generated/eve/scene/TriShadowOrthoFrustum.js.map +1 -1
  81. package/dist/generated/eve/smartLights/EveChildSmartLightSet.js +37 -24
  82. package/dist/generated/eve/smartLights/EveChildSmartLightSet.js.map +1 -1
  83. package/dist/generated/eve/smartLights/EveSmartLightPointLight.js +29 -28
  84. package/dist/generated/eve/smartLights/EveSmartLightPointLight.js.map +1 -1
  85. package/dist/generated/eve/spaceObject/EveShip2.js +39 -19
  86. package/dist/generated/eve/spaceObject/EveShip2.js.map +1 -1
  87. package/dist/generated/eve/spaceObject/swarm/EveSwarm.js +28 -1
  88. package/dist/generated/eve/spaceObject/swarm/EveSwarm.js.map +1 -1
  89. package/dist/generated/eve/spaceObject/swarm/EveSwarmRenderable.js +28 -1
  90. package/dist/generated/eve/spaceObject/swarm/EveSwarmRenderable.js.map +1 -1
  91. package/dist/index.js +3 -0
  92. package/dist/index.js.map +1 -1
  93. package/dist/trinityCore/TriFrustum.js +374 -0
  94. package/dist/trinityCore/TriFrustum.js.map +1 -0
  95. package/dist/trinityCore/TriFrustumOrtho.js +158 -0
  96. package/dist/trinityCore/TriFrustumOrtho.js.map +1 -0
  97. package/dist/trinityCore/index.js +2 -0
  98. package/dist/trinityCore/index.js.map +1 -1
  99. package/package.json +2 -2
@@ -8,6 +8,7 @@ import { io, type, carbon, impl, schema } from '@carbonenginejs/core-types/schem
8
8
  import { EveChildTransform as _EveChildTransform, applyTransformModifiers } from './EveChildTransform.js';
9
9
  import { EveChildInheritProperties as _EveChildInheritPrope } from './EveChildInheritProperties.js';
10
10
  import { EveChildUpdateParams as _EveChildUpdateParams } from '../EveChildUpdateParams.js';
11
+ import { EveComponentType } from '../EveComponentTypes.js';
11
12
  import { Origin } from '../../generated/eve/child/enums.js';
12
13
  import { Tr2RenderReason, TR2SHADERMODEL } from '../../generated/trinityCore/enums.js';
13
14
  import { Tr2Lod } from '../EveLODHelper.js';
@@ -28,7 +29,7 @@ new class extends _identity {
28
29
  } = _applyDecs2311(this, [type.define({
29
30
  className: "EveChildContainer",
30
31
  family: "eve/child"
31
- })], [[[io, io.notify, io, io.persist, type, type.int32, void 0, schema.enum("DisplayQualityModifier")], 16, "displayFilter"], [[io, io.persist, void 0, type.list("IEveSpaceObjectChild")], 16, "objects"], [[io, io.persist, void 0, type.list("IEveChildTransformModifier")], 16, "transformModifiers"], [[io, io.persist, void 0, type.list("TriCurveSet")], 16, "curveSets"], [[io, io.read, type, type.mat4], 16, "worldTransform"], [[io, io.notify, io, io.readwrite, type, type.boolean], 16, "mute"], [[io, io.notify, io, io.persist, type, type.boolean], 16, "display"], [[io, io.persist, type, type.string], 16, "name"], [[io, io.persist, type, type.vec3], 16, "translation"], [[io, io.persist, type, type.quat], 16, "rotation"], [[io, io.persist, type, type.vec3], 16, "scaling"], [[io, io.persist, type, type.mat4], 16, "localTransform"], [[io, io.persist, type, type.boolean], 16, "staticTransform"], [[io, io.persist, type, type.boolean], 16, "alwaysOn"], [[io, io.persist, type, type.boolean], 16, "updateOnDisplay"], [[io, io.persist, void 0, type.list("IEveSpaceObjectAttachment")], 16, "attachments"], [[io, io.persist, void 0, type.list("TriObserverLocal")], 16, "observers"], [[io, io.persist, void 0, type.list("IEveFxAttribute")], 16, "fxAttributes"], [[io, io.persist, void 0, type.list("Tr2Light")], 16, "lights"], [[io, io.persist, void 0, type.list("ITr2Controller")], 16, "controllers"], [[io, io.persist, void 0, type.objectRef("EveChildInheritProperties")], 16, "inheritProperties"], [[io, io.persist, type, type.boolean], 16, "useSRT"], [[io, io.persist, type, type.boolean], 16, "useStaticRotation"], [[io, io.persist, type, type.boolean], 16, "useStaticScale"], [[io, io.persist, void 0, type.objectRef("ITr2GrannyAnimationOwner")], 16, "animationOwner"], [[io, io.persist, type, type.int32, void 0, schema.enum("Origin")], 16, "origin"], [[io, io.persist, type, type.boolean], 16, "isPlacementRoot"], [[carbon, carbon.method, impl, impl.adapted], 18, "Initialize"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Registry re-registration on display/displayFilter changes is engine-owned; the mute fan-out side effect is ported.")], 18, "OnModified"], [[carbon, carbon.method, impl, impl.implemented], 18, "Setup"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetName"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetName"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetOrigin"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetAlwaysOn"], [[carbon, carbon.method, impl, impl.implemented], 18, "IsAlwaysOn"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetDisplayQualityModifier"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetMute"], [[carbon, carbon.method, impl, impl.implemented], 18, "MuteChildren"], [[carbon, carbon.method, impl, impl.implemented], 18, "AddTransformModifier"], [[carbon, carbon.method, impl, impl.implemented], 18, "AddObserver"], [[carbon, carbon.method, impl, impl.adapted], 18, "AddController"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetControllerVariable"], [[carbon, carbon.method, impl, impl.implemented], 18, "HandleControllerEvent"], [[carbon, carbon.method, impl, impl.implemented], 18, "StartControllers"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetProceduralContainerVariable"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetEffectChildByName"], [[carbon, carbon.method, impl, impl.adapted], 18, "AddToEffectChildrenList"], [[carbon, carbon.method, impl, impl.implemented], 18, "RemoveFromEffectChildrenList"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetShaderOption"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetAnimationOwner"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetIsPlacementRoot"], [[carbon, carbon.method, impl, impl.implemented], 18, "AddAttachment"], [[carbon, carbon.method, impl, impl.implemented], 18, "ClearAttachments"], [[carbon, carbon.method, impl, impl.implemented], 18, "Empty"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateSyncronous"], [[carbon, carbon.method, void 0, carbon.contextual(["camera"]), impl, impl.adapted, void 0, impl.reason("The GPU bone ring buffer, task-group dispatch, per-object VS/PS struct refresh, and the Granny bone-list override are engine/animation seams; the CPU update fan-out is ported.")], 18, "UpdateAsyncronous"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("The animationOwner bone list for attachments awaits the animation seam (bones pass as null); the visibility fan-out is ported.")], 18, "UpdateVisibility"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetRenderables"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetBoundingSphere"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetLocalToWorldTransform"], [[carbon, carbon.method, impl, impl.implemented], 18, "ChangeLOD"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetLights"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetBatches"], [[carbon, carbon.method, impl, impl.implemented], 18, "HasTransparentBatches"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetSortValue"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Persistent VS/PS device buffers and the bone ring upload are engine-owned; the record carries the object reference the engine serializer consumes.")], 18, "GetPerObjectData"], [[carbon, carbon.method, impl, impl.implemented], 18, "HasRenderables"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Carbon reads the Tr2Renderer shader-model global; the browser runtime stamps EveChildContainer.shaderModel (default TR2SM_3_0_DEPTH, the DX11 depth path EVE ships).")], 18, "IsRendering"], [[carbon, carbon.method, impl, impl.implemented], 18, "IsUpdating"], [[carbon, carbon.method, impl, impl.implemented], 18, "PlayCurveSet"], [[carbon, carbon.method, impl, impl.implemented], 18, "StopCurveSet"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateCurveSet"], [[carbon, carbon.method, impl, impl.implemented], 18, "PlayAllCurveSets"], [[carbon, carbon.method, impl, impl.implemented], 18, "StopAllCurveSets"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetCurveSetDuration"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetRangeDuration"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("The bool + float& out-param pair collapses to value-or-null in JS.")], 18, "GetControllerValueByName"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetWorldVelocity"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetOwnerMaxSpeed"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetInheritProperties"], [[carbon, carbon.method, impl, impl.implemented], 18, "FindSoundEmitter"]], 0, void 0, _EveChildTransform));
32
+ })], [[[io, io.notify, io, io.persist, type, type.int32, void 0, schema.enum("DisplayQualityModifier")], 16, "displayFilter"], [[io, io.persist, void 0, type.list("IEveSpaceObjectChild")], 16, "objects"], [[io, io.persist, void 0, type.list("IEveChildTransformModifier")], 16, "transformModifiers"], [[io, io.persist, void 0, type.list("TriCurveSet")], 16, "curveSets"], [[io, io.read, type, type.mat4], 16, "worldTransform"], [[io, io.notify, io, io.readwrite, type, type.boolean], 16, "mute"], [[io, io.notify, io, io.persist, type, type.boolean], 16, "display"], [[io, io.persist, type, type.string], 16, "name"], [[io, io.persist, type, type.vec3], 16, "translation"], [[io, io.persist, type, type.quat], 16, "rotation"], [[io, io.persist, type, type.vec3], 16, "scaling"], [[io, io.persist, type, type.mat4], 16, "localTransform"], [[io, io.persist, type, type.boolean], 16, "staticTransform"], [[io, io.persist, type, type.boolean], 16, "alwaysOn"], [[io, io.persist, type, type.boolean], 16, "updateOnDisplay"], [[io, io.persist, void 0, type.list("IEveSpaceObjectAttachment")], 16, "attachments"], [[io, io.persist, void 0, type.list("TriObserverLocal")], 16, "observers"], [[io, io.persist, void 0, type.list("IEveFxAttribute")], 16, "fxAttributes"], [[io, io.persist, void 0, type.list("Tr2Light")], 16, "lights"], [[io, io.persist, void 0, type.list("ITr2Controller")], 16, "controllers"], [[io, io.persist, void 0, type.objectRef("EveChildInheritProperties")], 16, "inheritProperties"], [[io, io.persist, type, type.boolean], 16, "useSRT"], [[io, io.persist, type, type.boolean], 16, "useStaticRotation"], [[io, io.persist, type, type.boolean], 16, "useStaticScale"], [[io, io.persist, void 0, type.objectRef("ITr2GrannyAnimationOwner")], 16, "animationOwner"], [[io, io.persist, type, type.int32, void 0, schema.enum("Origin")], 16, "origin"], [[io, io.persist, type, type.boolean], 16, "isPlacementRoot"], [[carbon, carbon.method, impl, impl.adapted], 18, "Initialize"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Registry re-registration on display/displayFilter changes is engine-owned; the mute fan-out side effect is ported.")], 18, "OnModified"], [[carbon, carbon.method, impl, impl.implemented], 18, "Setup"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetName"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetName"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetOrigin"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetAlwaysOn"], [[carbon, carbon.method, impl, impl.implemented], 18, "IsAlwaysOn"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetDisplayQualityModifier"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetMute"], [[carbon, carbon.method, impl, impl.implemented], 18, "MuteChildren"], [[carbon, carbon.method, impl, impl.implemented], 18, "AddTransformModifier"], [[carbon, carbon.method, impl, impl.implemented], 18, "AddObserver"], [[carbon, carbon.method, impl, impl.adapted], 18, "AddController"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetControllerVariable"], [[carbon, carbon.method, impl, impl.implemented], 18, "HandleControllerEvent"], [[carbon, carbon.method, impl, impl.implemented], 18, "StartControllers"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetProceduralContainerVariable"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetEffectChildByName"], [[carbon, carbon.method, impl, impl.adapted], 18, "AddToEffectChildrenList"], [[carbon, carbon.method, impl, impl.implemented], 18, "RemoveFromEffectChildrenList"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetShaderOption"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetAnimationOwner"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetIsPlacementRoot"], [[carbon, carbon.method, impl, impl.implemented], 18, "AddAttachment"], [[carbon, carbon.method, impl, impl.implemented], 18, "ClearAttachments"], [[carbon, carbon.method, impl, impl.implemented], 18, "Empty"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateSyncronous"], [[carbon, carbon.method, void 0, carbon.contextual(["camera"]), impl, impl.adapted, void 0, impl.reason("The GPU bone ring buffer, task-group dispatch, per-object VS/PS struct refresh, and the Granny bone-list override are engine/animation seams; the CPU update fan-out is ported.")], 18, "UpdateAsyncronous"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("The animationOwner bone list for attachments awaits the animation seam (bones pass as null); the visibility fan-out is ported.")], 18, "UpdateVisibility"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetRenderables"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetBoundingSphere"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetLocalToWorldTransform"], [[carbon, carbon.method, impl, impl.implemented], 18, "ChangeLOD"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetLights"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetBatches"], [[carbon, carbon.method, impl, impl.implemented], 18, "HasTransparentBatches"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetSortValue"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Persistent VS/PS device buffers and the bone ring upload are engine-owned; the record carries the object reference the engine serializer consumes.")], 18, "GetPerObjectData"], [[carbon, carbon.method, impl, impl.implemented], 18, "HasRenderables"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("Carbon reads the Tr2Renderer shader-model global; the browser runtime stamps EveChildContainer.shaderModel (default TR2SM_3_0_DEPTH, the DX11 depth path EVE ships).")], 18, "IsRendering"], [[carbon, carbon.method, impl, impl.implemented], 18, "IsUpdating"], [[carbon, carbon.method, impl, impl.implemented], 18, "RegisterComponents"], [[carbon, carbon.method, impl, impl.implemented], 18, "UnRegisterComponents"], [[carbon, carbon.method, impl, impl.implemented], 18, "PlayCurveSet"], [[carbon, carbon.method, impl, impl.implemented], 18, "StopCurveSet"], [[carbon, carbon.method, impl, impl.implemented], 18, "UpdateCurveSet"], [[carbon, carbon.method, impl, impl.implemented], 18, "PlayAllCurveSets"], [[carbon, carbon.method, impl, impl.implemented], 18, "StopAllCurveSets"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetCurveSetDuration"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetRangeDuration"], [[carbon, carbon.method, impl, impl.adapted, void 0, impl.reason("The bool + float& out-param pair collapses to value-or-null in JS.")], 18, "GetControllerValueByName"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetWorldVelocity"], [[carbon, carbon.method, impl, impl.implemented], 18, "GetOwnerMaxSpeed"], [[carbon, carbon.method, impl, impl.implemented], 18, "SetInheritProperties"], [[carbon, carbon.method, impl, impl.implemented], 18, "FindSoundEmitter"]], 0, void 0, _EveChildTransform));
32
33
  }
33
34
  displayFilter = (_initProto(this), _init_displayFilter(this, 5));
34
35
  objects = (_init_extra_displayFilter(this), _init_objects(this, []));
@@ -78,9 +79,9 @@ new class extends _identity {
78
79
  return true;
79
80
  }
80
81
 
81
- /** Carbon EveChildContainer::OnModified (cpp:76-88): display/displayFilter
82
- * changes re-register with the scene component registry (engine-owned,
83
- * omitted); a mute change fans out to children and observers. The value
82
+ /** Carbon EveChildContainer::OnModified (cpp:76-88): display/displayFilter
83
+ * changes re-register with the scene component registry (engine-owned,
84
+ * omitted); a mute change fans out to children and observers. The value
84
85
  * argument follows the repo's OnModified duck (field name or field value). */
85
86
  OnModified(value = null) {
86
87
  if (value === "mute" || value === this.mute) {
@@ -218,13 +219,13 @@ new class extends _identity {
218
219
  return this.objects.length === 0 && this.lights.length === 0 && this.attachments.length === 0 && this.controllers.length === 0 && this.curveSets.length === 0 && this.transformModifiers.length === 0 && this.observers.length === 0;
219
220
  }
220
221
 
221
- /**
222
- * Sync-side frame update (Carbon EveChildContainer::UpdateSyncronous,
223
- * cpp:496-518): gate on IsUpdating, remember the owner max speed, then
224
- * recurse into the children with childParent params rebased onto this
225
- * container's world transform, and refresh the local observers.
226
- * @param {Object} updateContext - frame context (EveUpdateContext)
227
- * @param {EveChildUpdateParams} params
222
+ /**
223
+ * Sync-side frame update (Carbon EveChildContainer::UpdateSyncronous,
224
+ * cpp:496-518): gate on IsUpdating, remember the owner max speed, then
225
+ * recurse into the children with childParent params rebased onto this
226
+ * container's world transform, and refresh the local observers.
227
+ * @param {Object} updateContext - frame context (EveUpdateContext)
228
+ * @param {EveChildUpdateParams} params
228
229
  */
229
230
  UpdateSyncronous(updateContext, params) {
230
231
  if (!this.IsUpdating()) {
@@ -243,18 +244,18 @@ new class extends _identity {
243
244
  }
244
245
  }
245
246
 
246
- /**
247
- * Per-frame async update (Carbon EveChildContainer::UpdateAsyncronous +
248
- * DoUpdateAsyncronous, cpp:520-641): rebuild the world transform from the
249
- * parent, tick the controllers, fold the transform modifiers, then recurse
250
- * into the children with childParent params, update the curve sets and fx
251
- * attributes, and refresh light/attachment bone state. Carbon's wrapper
252
- * advances the GPU bone ring buffer and may dispatch the body onto the
253
- * placement task group (cpp:522-538) - both engine-owned, so the JS port
254
- * runs the DoUpdateAsyncronous body inline behind the same IsUpdating gate.
255
- * @param {Object} updateContext - frame context (EveUpdateContext), threaded to modifiers
256
- * @param {EveChildUpdateParams} params - localToWorldTransform + boneCount/bones
257
- * @returns {Float32Array} worldTransform
247
+ /**
248
+ * Per-frame async update (Carbon EveChildContainer::UpdateAsyncronous +
249
+ * DoUpdateAsyncronous, cpp:520-641): rebuild the world transform from the
250
+ * parent, tick the controllers, fold the transform modifiers, then recurse
251
+ * into the children with childParent params, update the curve sets and fx
252
+ * attributes, and refresh light/attachment bone state. Carbon's wrapper
253
+ * advances the GPU bone ring buffer and may dispatch the body onto the
254
+ * placement task group (cpp:522-538) - both engine-owned, so the JS port
255
+ * runs the DoUpdateAsyncronous body inline behind the same IsUpdating gate.
256
+ * @param {Object} updateContext - frame context (EveUpdateContext), threaded to modifiers
257
+ * @param {EveChildUpdateParams} params - localToWorldTransform + boneCount/bones
258
+ * @returns {Float32Array} worldTransform
258
259
  */
259
260
  UpdateAsyncronous(updateContext, params) {
260
261
  if (!this.IsUpdating()) {
@@ -329,15 +330,15 @@ new class extends _identity {
329
330
  return this.worldTransform;
330
331
  }
331
332
 
332
- /**
333
- * Frame visibility fan-out (Carbon EveChildContainer::UpdateVisibility,
334
- * cpp:379-410): gate on display/IsUpdating, recurse into the children with
335
- * the unchanged parent transform/LOD, then refresh attachment visibility
336
- * against this container's world transform.
337
- * @param {Object} updateContext - frame context (frustum ducks)
338
- * @param {Float32Array} parentTransform
339
- * @param {Number} parentLod - parent Tr2Lod level
340
- * @returns {Boolean} whether the fan-out ran
333
+ /**
334
+ * Frame visibility fan-out (Carbon EveChildContainer::UpdateVisibility,
335
+ * cpp:379-410): gate on display/IsUpdating, recurse into the children with
336
+ * the unchanged parent transform/LOD, then refresh attachment visibility
337
+ * against this container's world transform.
338
+ * @param {Object} updateContext - frame context (frustum ducks)
339
+ * @param {Float32Array} parentTransform
340
+ * @param {Number} parentLod - parent Tr2Lod level
341
+ * @returns {Boolean} whether the fan-out ran
341
342
  */
342
343
  UpdateVisibility(updateContext, parentTransform = null, parentLod = Tr2Lod.TR2_LOD_HIGH) {
343
344
  if (!this.display) {
@@ -357,7 +358,7 @@ new class extends _identity {
357
358
  return true;
358
359
  }
359
360
 
360
- /** Carbon EveChildContainer::GetRenderables (cpp:412-432): the container
361
+ /** Carbon EveChildContainer::GetRenderables (cpp:412-432): the container
361
362
  * itself renders only when it owns attachments; children always recurse. */
362
363
  GetRenderables(out = []) {
363
364
  if (!this.display || !this.#hasUpdated) {
@@ -375,10 +376,10 @@ new class extends _identity {
375
376
  return out;
376
377
  }
377
378
 
378
- /** Carbon EveChildContainer::GetBoundingSphere (cpp:434-452): the union of
379
- * the children's spheres (BoundingSphereSetOrUpdate -> sph3.union). The
380
- * child sphere is a per-call local rather than module scratch because
381
- * containers nest - a shared scratch would be clobbered between recursion
379
+ /** Carbon EveChildContainer::GetBoundingSphere (cpp:434-452): the union of
380
+ * the children's spheres (BoundingSphereSetOrUpdate -> sph3.union). The
381
+ * child sphere is a per-call local rather than module scratch because
382
+ * containers nest - a shared scratch would be clobbered between recursion
382
383
  * levels; this is a bounds query, not the per-frame update hot path. */
383
384
  GetBoundingSphere(out = vec4.create(), _query = 0) {
384
385
  if (!this.IsUpdating()) {
@@ -399,7 +400,7 @@ new class extends _identity {
399
400
  return success;
400
401
  }
401
402
 
402
- /** Carbon EveChildContainer::GetLocalToWorldTransform (cpp:644-647); the
403
+ /** Carbon EveChildContainer::GetLocalToWorldTransform (cpp:644-647); the
403
404
  * optional out follows the EveChildInstancedMeshes copy-out shape. */
404
405
  GetLocalToWorldTransform(out = null) {
405
406
  if (out) {
@@ -415,9 +416,9 @@ new class extends _identity {
415
416
  }
416
417
  }
417
418
 
418
- /** Carbon EveChildContainer::GetLights (cpp:657-675): each light is added
419
- * with the container world transform and the average basis-length scaling
420
- * ((|X| + |Y| + |Z|) / 3 of the world basis rows - single-matrix reads, no
419
+ /** Carbon EveChildContainer::GetLights (cpp:657-675): each light is added
420
+ * with the container world transform and the average basis-length scaling
421
+ * ((|X| + |Y| + |Z|) / 3 of the world basis rows - single-matrix reads, no
421
422
  * composition). The light manager is duck-typed. */
422
423
  GetLights(lightManager) {
423
424
  if (!this.display || !this.#hasUpdated) {
@@ -433,9 +434,9 @@ new class extends _identity {
433
434
  }
434
435
  }
435
436
 
436
- /** Carbon EveChildContainer::GetBatches (cpp:1134-1143): attachments only,
437
- * gated on display, the NORMAL render reason, and a non-zero activation
438
- * strength. Returns whether any batch was committed (JS addition; Carbon
437
+ /** Carbon EveChildContainer::GetBatches (cpp:1134-1143): attachments only,
438
+ * gated on display, the NORMAL render reason, and a non-zero activation
439
+ * strength. Returns whether any batch was committed (JS addition; Carbon
439
440
  * returns void). */
440
441
  GetBatches(batches, batchType, perObjectData, reason = Tr2RenderReason.TR2RENDERREASON_NORMAL) {
441
442
  if (!this.display || reason !== Tr2RenderReason.TR2RENDERREASON_NORMAL || this.#activationStrength === 0) {
@@ -458,10 +459,10 @@ new class extends _identity {
458
459
  return 0;
459
460
  }
460
461
 
461
- /** Carbon EveChildContainer::GetPerObjectData (cpp:1180-1203) uploads the
462
- * animationOwner bone palette into the GPU ring buffer and allocates
463
- * Tr2PerObjectDataWithPersistentBuffers; both are GPU seams, so the GPU-free
464
- * record carries the live object reference for the engine serializer
462
+ /** Carbon EveChildContainer::GetPerObjectData (cpp:1180-1203) uploads the
463
+ * animationOwner bone palette into the GPU ring buffer and allocates
464
+ * Tr2PerObjectDataWithPersistentBuffers; both are GPU seams, so the GPU-free
465
+ * record carries the live object reference for the engine serializer
465
466
  * (mirrors EveSpaceObject2.GetPerObjectData). */
466
467
  GetPerObjectData(accumulator = null) {
467
468
  const data = typeof accumulator?.Allocate === "function" ? accumulator.Allocate(Tr2PerObjectData) : new Tr2PerObjectData();
@@ -469,13 +470,13 @@ new class extends _identity {
469
470
  return data;
470
471
  }
471
472
 
472
- /** Carbon EveChildContainer::HasRenderables (cpp:1129-1132): the container
473
+ /** Carbon EveChildContainer::HasRenderables (cpp:1129-1132): the container
473
474
  * renders only for its attachments. */
474
475
  HasRenderables() {
475
476
  return this.attachments.length > 0;
476
477
  }
477
478
 
478
- /** Carbon EveChildContainer::IsRendering (cpp:334-362): whether the current
479
+ /** Carbon EveChildContainer::IsRendering (cpp:334-362): whether the current
479
480
  * shader model passes this container's display filter. */
480
481
  IsRendering() {
481
482
  const settings = _EveChildContainer.shaderModel;
@@ -507,7 +508,41 @@ new class extends _identity {
507
508
  return (this.display || !this.updateOnDisplay) && (this.IsRendering() || this.displayFilter === _EveChildContainer.DisplayQualityModifier.ONLY_REFLECTIONS);
508
509
  }
509
510
 
510
- /** Carbon EveChildContainer::PlayCurveSet (cpp:682-712): named own sets play
511
+ /** Carbon EveChildContainer::RegisterComponents (cpp:258-284): LightOwner
512
+ * when lights are authored, then forwards the contained objects and the
513
+ * attachments. Gate m_display && IsUpdating(). */
514
+ RegisterComponents() {
515
+ const registry = this.GetComponentRegistry();
516
+ if (registry && this.display && this.IsUpdating()) {
517
+ if (this.lights.length) {
518
+ registry.RegisterComponent(EveComponentType.LightOwner, this);
519
+ }
520
+ for (const object of this.objects) {
521
+ object?.Register?.(registry);
522
+ }
523
+ for (const attachment of this.attachments) {
524
+ attachment?.Register?.(registry);
525
+ }
526
+ }
527
+ }
528
+
529
+ /** Carbon EveChildContainer::UnRegisterComponents (cpp:290-311): forwards
530
+ * the contained objects and attachments only (own components were already
531
+ * removed by EveEntity::UnRegister, EveEntity.cpp:90); no display/IsUpdating
532
+ * re-check. */
533
+ UnRegisterComponents() {
534
+ const registry = this.GetComponentRegistry();
535
+ if (registry) {
536
+ for (const object of this.objects) {
537
+ object?.UnRegister?.(registry);
538
+ }
539
+ for (const attachment of this.attachments) {
540
+ attachment?.UnRegister?.(registry);
541
+ }
542
+ }
543
+ }
544
+
545
+ /** Carbon EveChildContainer::PlayCurveSet (cpp:682-712): named own sets play
511
546
  * (or play a named range); children recurse via the curve-set-owner duck. */
512
547
  PlayCurveSet(name, rangeName = "") {
513
548
  if (!this.IsUpdating()) {
@@ -546,7 +581,7 @@ new class extends _identity {
546
581
  }
547
582
  }
548
583
 
549
- /** Carbon EveChildContainer::UpdateCurveSet (cpp:770-786): samples matching
584
+ /** Carbon EveChildContainer::UpdateCurveSet (cpp:770-786): samples matching
550
585
  * own and child sets at an explicit time (both clocks, as Carbon does). */
551
586
  UpdateCurveSet(name, time) {
552
587
  const target = String(name ?? "");
@@ -560,7 +595,7 @@ new class extends _identity {
560
595
  }
561
596
  }
562
597
 
563
- /** Carbon EveChildContainer::PlayAllCurveSets (cpp:714-728): children
598
+ /** Carbon EveChildContainer::PlayAllCurveSets (cpp:714-728): children
564
599
  * first, then every own set. */
565
600
  PlayAllCurveSets() {
566
601
  for (const child of this.objects) {
@@ -581,7 +616,7 @@ new class extends _identity {
581
616
  }
582
617
  }
583
618
 
584
- /** Carbon EveChildContainer::GetCurveSetDuration (cpp:788-813): maximum
619
+ /** Carbon EveChildContainer::GetCurveSetDuration (cpp:788-813): maximum
585
620
  * GetMaxCurveDuration over matching own and child sets. */
586
621
  GetCurveSetDuration(name) {
587
622
  if (!this.IsUpdating()) {
@@ -600,7 +635,7 @@ new class extends _identity {
600
635
  return duration;
601
636
  }
602
637
 
603
- /** Carbon EveChildContainer::GetRangeDuration (cpp:815-840): maximum named
638
+ /** Carbon EveChildContainer::GetRangeDuration (cpp:815-840): maximum named
604
639
  * range duration over matching own and child sets. */
605
640
  GetRangeDuration(name, rangeName) {
606
641
  if (!this.IsUpdating()) {
@@ -619,8 +654,8 @@ new class extends _identity {
619
654
  return duration;
620
655
  }
621
656
 
622
- /** Carbon EveChildContainer::GetControllerValueByName (cpp:1083-1098):
623
- * Carbon returns bool with a float& out; the JS port returns the value or
657
+ /** Carbon EveChildContainer::GetControllerValueByName (cpp:1083-1098):
658
+ * Carbon returns bool with a float& out; the JS port returns the value or
624
659
  * null when no controller exposes the named float variable. */
625
660
  GetControllerValueByName(name) {
626
661
  const key = String(name ?? "");
@@ -643,8 +678,8 @@ new class extends _identity {
643
678
  return this.#ownerMaxSpeed;
644
679
  }
645
680
 
646
- /** Carbon EveChildContainer::SetInheritProperties (cpp:1017-1040): lazily
647
- * creates the property holder, then fans the color set out to children and
681
+ /** Carbon EveChildContainer::SetInheritProperties (cpp:1017-1040): lazily
682
+ * creates the property holder, then fans the color set out to children and
648
683
  * lights. */
649
684
  SetInheritProperties(colorSet) {
650
685
  if (!this.inheritProperties) {
@@ -659,7 +694,7 @@ new class extends _identity {
659
694
  }
660
695
  }
661
696
 
662
- /** Carbon EveChildContainer::FindSoundEmitter (cpp:1042-1066): named local
697
+ /** Carbon EveChildContainer::FindSoundEmitter (cpp:1042-1066): named local
663
698
  * observers first, then duck-typed recursion into the children. */
664
699
  FindSoundEmitter(name) {
665
700
  const target = String(name ?? "");