@woosh/meep-engine 3.16.0 → 3.17.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 (410) hide show
  1. package/editor/particles/effect/ParticleEffectDocument.d.ts +21 -6
  2. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  3. package/editor/particles/effect/ParticleEffectDocument.js +38 -17
  4. package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
  5. package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
  6. package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
  7. package/editor/view/node-graph/NodeGraphEditorView.d.ts +59 -1
  8. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  9. package/editor/view/node-graph/NodeGraphEditorView.js +248 -5
  10. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  11. package/editor/view/node-graph/NodeGraphView.js +84 -8
  12. package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
  13. package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
  14. package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
  15. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -1
  16. package/editor/view/particles/effect/ParticleCodeEditorView.js +4 -3
  17. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
  18. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
  19. package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
  20. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  21. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +27 -1
  22. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
  23. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
  24. package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
  25. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +5 -0
  26. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
  27. package/editor/view/particles/effect/ParticleGraphEditorView.js +61 -31
  28. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  29. package/editor/view/particles/effect/ParticleNodeParametersView.js +33 -0
  30. package/editor/view/particles/effect/particle-editor.css +123 -35
  31. package/package.json +1 -1
  32. package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
  33. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  34. package/src/core/binary/allocator/OffsetAllocator.js +10 -1
  35. package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
  36. package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
  37. package/src/core/collection/array/typed/float32_array_hash.js +38 -0
  38. package/src/core/graph/csr/CSRGraph.d.ts +8 -1
  39. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  40. package/src/core/graph/csr/CSRGraph.js +14 -6
  41. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +24 -0
  42. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -1
  43. package/src/core/model/node-graph/visual/layout/LayoutProblem.js +27 -0
  44. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +26 -0
  45. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
  46. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +28 -0
  47. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +92 -3
  48. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -1
  49. package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -242
  50. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +50 -5
  51. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -1
  52. package/src/core/model/node-graph/visual/layout/RouteSearch.js +160 -24
  53. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +7 -0
  54. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -1
  55. package/src/core/model/node-graph/visual/layout/RouteSet.js +8 -0
  56. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +9 -3
  57. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -1
  58. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +7 -0
  59. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +9 -3
  60. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -1
  61. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +17 -3
  62. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +9 -6
  63. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
  64. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +49 -7
  65. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +11 -1
  66. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
  67. package/src/core/model/node-graph/visual/layout/layout_order_layers.js +135 -16
  68. package/src/core/model/node-graph/visual/layout/route_connections.d.ts +29 -0
  69. package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -1
  70. package/src/core/model/node-graph/visual/layout/route_connections.js +716 -309
  71. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +3 -2
  72. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -1
  73. package/src/core/model/node-graph/visual/layout/route_grid_build.js +7 -15
  74. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +6 -0
  75. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -1
  76. package/src/core/model/node-graph/visual/layout/route_nudge.js +42 -13
  77. package/src/engine/animation/AnimationUtils.js +246 -246
  78. package/src/engine/animation/Animations.js +74 -74
  79. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2078
  80. package/src/engine/ecs/EventType.d.ts +0 -1
  81. package/src/engine/ecs/EventType.js +1 -26
  82. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +1 -1
  83. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  84. package/src/engine/ecs/ik/ik_write_local_rotation.js +3 -7
  85. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  86. package/src/engine/ecs/parent/EntityNode.js +4 -9
  87. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  88. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -364
  89. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
  90. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
  91. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
  92. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +8 -0
  93. package/src/engine/ecs/transform/t64_announce_change.d.ts +10 -7
  94. package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -1
  95. package/src/engine/ecs/transform/t64_announce_change.js +12 -12
  96. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
  97. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
  98. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
  99. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  100. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +13 -21
  101. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  102. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +4 -8
  103. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  104. package/src/engine/graphics3/LightSystem.js +4 -8
  105. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  106. package/src/engine/graphics3/MeshSystem.js +9 -19
  107. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  108. package/src/engine/graphics3/ParticleEmitterSystem.js +4 -8
  109. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  110. package/src/engine/graphics3/ShadedGeometrySystem.js +4 -10
  111. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +1 -1
  112. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  113. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +4 -8
  114. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -218
  115. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  116. package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
  117. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  118. package/src/engine/sound/ecs/SoundListenerSystem.js +6 -8
  119. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +0 -4
  120. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
  121. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +5 -11
  122. package/src/shade/playground/particle_editor/README.md +43 -2
  123. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  124. package/src/shade/playground/particle_system/particle_prototype.js +4 -5
  125. package/src/shade/playground/particle_system/particle_scene.js +4 -4
  126. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  127. package/src/shade/renderer/Renderer.js +13 -1
  128. package/src/shade/renderer/particles/DESIGN.md +104 -19
  129. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +64 -50
  130. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  131. package/src/shade/renderer/particles/GPUParticleSystem.js +176 -78
  132. package/src/shade/renderer/particles/ParticleConstants.d.ts +59 -23
  133. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  134. package/src/shade/renderer/particles/ParticleConstants.js +66 -23
  135. package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
  136. package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
  137. package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
  138. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  139. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -166
  140. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
  141. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
  142. package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
  143. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +3 -3
  144. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -303
  145. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +18 -0
  146. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  147. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -133
  148. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +0 -11
  149. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  150. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -621
  151. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  152. package/src/shade/renderer/particles/graph/compile_particle_graph.js +8 -3
  153. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -213
  155. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +6 -0
  157. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
  158. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -319
  159. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -1
  160. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -517
  161. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
  162. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
  163. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
  164. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -1
  165. package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -159
  166. package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
  167. package/src/shade/renderer/particles/graph/make_particle_group.js +2 -20
  168. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
  169. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
  170. package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
  171. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +28 -8
  172. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -25
  174. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +40 -0
  175. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -234
  177. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  178. package/src/shade/renderer/particles/graph/particle_node_presentation.js +59 -3
  179. package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
  180. package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
  181. package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
  182. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +7 -1
  183. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
  184. package/src/shade/renderer/particles/graph/validate_particle_graph.js +66 -10
  185. package/src/shade/renderer/particles/graph_particles.d.ts +23 -69
  186. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  187. package/src/shade/renderer/particles/graph_particles.js +105 -262
  188. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  189. package/src/shade/renderer/particles/graph_particles_avboit.js +3 -2
  190. package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
  191. package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
  192. package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
  193. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +51 -22
  194. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  195. package/src/shade/renderer/particles/isa/InstructionStream.js +98 -38
  196. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +49 -8
  197. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  198. package/src/shade/renderer/particles/isa/ParticleProgram.js +95 -150
  199. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +306 -64
  200. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  201. package/src/shade/renderer/particles/isa/ParticleVMISA.js +505 -136
  202. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +36 -12
  203. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  204. package/src/shade/renderer/particles/isa/particle_assembly.js +354 -139
  205. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
  206. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
  207. package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
  208. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +23 -0
  209. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  210. package/src/shade/renderer/particles/layout/ParticleLayout.js +68 -0
  211. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
  212. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
  213. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
  214. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
  215. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
  216. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
  217. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
  218. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
  219. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
  220. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
  221. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
  222. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
  223. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
  224. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
  225. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
  226. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
  227. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
  228. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
  229. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
  230. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
  231. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
  232. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
  233. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
  234. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
  235. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +81 -42
  236. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
  237. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -478
  238. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
  239. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
  240. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
  241. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +139 -59
  242. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
  243. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -647
  244. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +40 -7
  245. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  246. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -213
  247. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +30 -3
  248. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
  249. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -223
  250. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +24 -38
  251. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  252. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -206
  253. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
  254. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
  255. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
  256. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +3 -2
  257. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
  258. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -197
  259. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
  260. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +19 -0
  261. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
  262. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -561
  263. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
  264. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
  265. package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
  266. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  267. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -72
  268. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  269. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -86
  270. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  271. package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -271
  272. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  273. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -268
  274. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
  275. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
  276. package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
  277. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  278. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -151
  279. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +20 -0
  280. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -1
  281. package/src/shade/renderer/particles/particle_test_fixtures.js +229 -203
  282. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +99 -25
  283. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  284. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +438 -286
  285. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
  286. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
  287. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
  288. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +87 -102
  289. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  290. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +184 -163
  291. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +26 -0
  292. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
  293. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
  294. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
  295. package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
  296. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
  297. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
  298. package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
  299. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +5 -2
  300. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  301. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -19
  302. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
  303. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
  304. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
  305. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
  306. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
  307. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
  308. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -9
  309. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  310. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +20 -80
  311. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
  312. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
  313. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
  314. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
  315. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  316. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +33 -101
  317. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
  318. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
  319. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
  320. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
  321. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
  322. package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
  323. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
  324. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
  325. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
  326. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +4 -1
  327. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  328. package/src/shade/renderer/particles/vm/ParticleVMReference.js +261 -140
  329. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  330. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +217 -255
  331. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
  332. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
  333. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
  334. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
  335. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
  336. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
  337. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
  338. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
  339. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
  340. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
  341. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
  342. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
  343. package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
  344. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
  345. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
  346. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
  347. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
  348. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
  349. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
  350. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
  351. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
  352. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
  353. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
  354. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
  355. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
  356. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
  357. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
  358. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
  359. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
  360. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
  361. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
  362. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
  363. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
  364. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
  365. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
  366. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
  367. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
  368. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
  369. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
  370. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
  371. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
  372. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
  373. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
  374. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
  375. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
  376. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
  377. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
  378. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  379. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +49 -10
  380. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  381. package/src/view/minimap/dom/MinimapCameraView.js +4 -9
  382. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
  383. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
  384. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
  385. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
  386. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
  387. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
  388. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
  389. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
  390. package/src/engine/ecs/transform/__probe.d.ts +0 -4
  391. package/src/engine/ecs/transform/__probe.d.ts.map +0 -1
  392. package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
  393. package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
  394. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +0 -27
  395. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +0 -1
  396. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
  397. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
  398. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
  399. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
  400. package/src/shade/renderer/particles/runtime/Emitter.d.ts +0 -219
  401. package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +0 -1
  402. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -77
  403. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
  404. package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -155
  405. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +0 -15
  406. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +0 -1
  407. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
  408. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
  409. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -32
  410. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Entity event announcing that an entity's {@link Transform64} was mutated in place.
3
+ *
4
+ * A {@link Transform64} carries no signals - that is the point of it - so a write is invisible
5
+ * until someone says so, and saying so is the writer's job. Everything that used to wake on
6
+ * `position.onChanged` waits on this instead: the render placement, the parent/child sync,
7
+ * fog-of-war, the grid mirror, the spatial audio refit.
8
+ *
9
+ * The name is the whole message, and there is no payload. A listener is registered against one
10
+ * entity and one event name, so by the time it runs it already knows which entity moved, that what
11
+ * moved was the transform, and which instance that is - it was handed the instance when it linked.
12
+ * Anything sent alongside would only be handing back what the listener already holds, at the price
13
+ * of an `if` at the top of every listener to discard the dispatches meant for somebody else.
14
+ *
15
+ * Announce with {@link t64_announce_change}, once per group of writes:
16
+ *
17
+ * ```
18
+ * transform.setRotation(x, y, z, w);
19
+ * transform.updateMatrix();
20
+ *
21
+ * t64_announce_change(ecd, entity);
22
+ * ```
23
+ *
24
+ * Deliberately coarse - it says *that* the transform changed, not *what* changed inside it. A
25
+ * transform rewritten wholesale, as {@link Transform64#multiplyTransforms} rewrites one, has no
26
+ * finer answer to give, and a per-channel axis running beside this one would be a second mechanism
27
+ * describing one write. Waking on a superset of what you care about is expected: a consumer woken
28
+ * by a scale write when it only tracks translation does redundant work, not wrong work. Where that
29
+ * is too expensive, that one consumer keeps a copy and compares against it.
30
+ *
31
+ * @type {string}
32
+ *
33
+ * @see t64_announce_change
34
+ * @see TRANSFORM_ATTACHMENT_EVENT_CHANGE
35
+ * @see EntityComponentDataset#addEntityEventListener
36
+ *
37
+ * @author Alex Goldring
38
+ * @copyright Company Named Limited (c) 2026
39
+ */
40
+ export const TRANSFORM64_EVENT_CHANGE: string;
41
+ //# sourceMappingURL=TRANSFORM64_EVENT_CHANGE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TRANSFORM64_EVENT_CHANGE.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,uCATU,MAAM,CAS8C"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Entity event announcing that an entity's {@link Transform64} was mutated in place.
3
+ *
4
+ * A {@link Transform64} carries no signals - that is the point of it - so a write is invisible
5
+ * until someone says so, and saying so is the writer's job. Everything that used to wake on
6
+ * `position.onChanged` waits on this instead: the render placement, the parent/child sync,
7
+ * fog-of-war, the grid mirror, the spatial audio refit.
8
+ *
9
+ * The name is the whole message, and there is no payload. A listener is registered against one
10
+ * entity and one event name, so by the time it runs it already knows which entity moved, that what
11
+ * moved was the transform, and which instance that is - it was handed the instance when it linked.
12
+ * Anything sent alongside would only be handing back what the listener already holds, at the price
13
+ * of an `if` at the top of every listener to discard the dispatches meant for somebody else.
14
+ *
15
+ * Announce with {@link t64_announce_change}, once per group of writes:
16
+ *
17
+ * ```
18
+ * transform.setRotation(x, y, z, w);
19
+ * transform.updateMatrix();
20
+ *
21
+ * t64_announce_change(ecd, entity);
22
+ * ```
23
+ *
24
+ * Deliberately coarse - it says *that* the transform changed, not *what* changed inside it. A
25
+ * transform rewritten wholesale, as {@link Transform64#multiplyTransforms} rewrites one, has no
26
+ * finer answer to give, and a per-channel axis running beside this one would be a second mechanism
27
+ * describing one write. Waking on a superset of what you care about is expected: a consumer woken
28
+ * by a scale write when it only tracks translation does redundant work, not wrong work. Where that
29
+ * is too expensive, that one consumer keeps a copy and compares against it.
30
+ *
31
+ * @type {string}
32
+ *
33
+ * @see t64_announce_change
34
+ * @see TRANSFORM_ATTACHMENT_EVENT_CHANGE
35
+ * @see EntityComponentDataset#addEntityEventListener
36
+ *
37
+ * @author Alex Goldring
38
+ * @copyright Company Named Limited (c) 2026
39
+ */
40
+ export const TRANSFORM64_EVENT_CHANGE = "@transform64/change";
@@ -5,6 +5,14 @@ change-detection mechanism next to one the ECS already has, it proposed deleting
5
5
  "no importers" evidence, and its facade would have left the abstraction layers Transform64 exists to
6
6
  remove. This revision replaces the architecture; the survey work underneath it stands.*
7
7
 
8
+ *Update, 2026-09-05: the change-detection mechanism specified below - `EventType.ComponentChanged`
9
+ carrying `{klass, instance}` - has been replaced by one event name per component that announces
10
+ itself: `TRANSFORM64_EVENT_CHANGE` (`@transform64/change`) and `TRANSFORM_ATTACHMENT_EVENT_CHANGE`
11
+ (`@transform_attachment/change`), each sent with no payload, so a listener is woken only by the
12
+ thing it asked about and has nothing to filter. `EventType.ComponentChanged` is gone, and with it
13
+ the residual unknown about broadening it. Everything else here stands; read `ComponentChanged`
14
+ throughout as "the changed component's own event".*
15
+
8
16
  ---
9
17
 
10
18
  ## Where things stand
@@ -3,13 +3,16 @@
3
3
  *
4
4
  * A {@link Transform64} carries no signals - that is the point of it - so a write is invisible until
5
5
  * someone says so, and saying so is the writer's job. Every consumer that used to wake on
6
- * `position.onChanged` wakes on {@link EventType.ComponentChanged} instead: the render placement,
6
+ * `position.onChanged` wakes on {@link TRANSFORM64_EVENT_CHANGE} instead: the render placement,
7
7
  * the parent/child sync, fog-of-war, the grid mirror, the spatial audio refit.
8
8
  *
9
- * The announcement is deliberately coarse - it names the component, not what changed inside it - so
9
+ * The announcement is deliberately coarse - it names the transform, not what changed inside it - so
10
10
  * a consumer that only tracks translation still wakes on a scale write. That is redundant work, not
11
11
  * wrong work, and it is what lets one call stand in for the three signals it replaces.
12
12
  *
13
+ * Nothing is sent with it. The event names the transform and reaches only this entity's listeners,
14
+ * which is everything a listener needs to know; the instance it wants is the one it linked with.
15
+ *
13
16
  * Call it once per group of writes, after the last of them and after any
14
17
  * {@link Transform64#updateMatrix} the group owes:
15
18
  *
@@ -17,17 +20,17 @@
17
20
  * transform.setRotation(x, y, z, w);
18
21
  * transform.updateMatrix();
19
22
  *
20
- * t64_announce_change(ecd, entity, transform);
23
+ * t64_announce_change(ecd, entity);
21
24
  * ```
22
25
  *
23
26
  * @param {EntityComponentDataset} ecd
24
- * @param {number} entity
25
- * @param {Transform64} transform the instance that was written, handed to listeners as `instance`
27
+ * @param {number} entity the entity whose transform was written
26
28
  * @returns {void}
27
29
  *
30
+ * @see TRANSFORM64_EVENT_CHANGE
31
+ *
28
32
  * @author Alex Goldring
29
33
  * @copyright Company Named Limited (c) 2026
30
34
  */
31
- export function t64_announce_change(ecd: EntityComponentDataset, entity: number, transform: Transform64): void;
32
- import { Transform64 } from "./Transform64.js";
35
+ export function t64_announce_change(ecd: EntityComponentDataset, entity: number): void;
33
36
  //# sourceMappingURL=t64_announce_change.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"t64_announce_change.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_announce_change.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,yEAPW,MAAM,aACN,WAAW,GACT,IAAI,CAUhB;4BArC2B,kBAAkB"}
1
+ {"version":3,"file":"t64_announce_change.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/t64_announce_change.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,yEARW,MAAM,GACJ,IAAI,CAShB"}
@@ -1,18 +1,20 @@
1
- import { EventType } from "../EventType.js";
2
- import { Transform64 } from "./Transform64.js";
1
+ import { TRANSFORM64_EVENT_CHANGE } from "./TRANSFORM64_EVENT_CHANGE.js";
3
2
 
4
3
  /**
5
4
  * Tell the dataset that an entity's {@link Transform64} was mutated in place.
6
5
  *
7
6
  * A {@link Transform64} carries no signals - that is the point of it - so a write is invisible until
8
7
  * someone says so, and saying so is the writer's job. Every consumer that used to wake on
9
- * `position.onChanged` wakes on {@link EventType.ComponentChanged} instead: the render placement,
8
+ * `position.onChanged` wakes on {@link TRANSFORM64_EVENT_CHANGE} instead: the render placement,
10
9
  * the parent/child sync, fog-of-war, the grid mirror, the spatial audio refit.
11
10
  *
12
- * The announcement is deliberately coarse - it names the component, not what changed inside it - so
11
+ * The announcement is deliberately coarse - it names the transform, not what changed inside it - so
13
12
  * a consumer that only tracks translation still wakes on a scale write. That is redundant work, not
14
13
  * wrong work, and it is what lets one call stand in for the three signals it replaces.
15
14
  *
15
+ * Nothing is sent with it. The event names the transform and reaches only this entity's listeners,
16
+ * which is everything a listener needs to know; the instance it wants is the one it linked with.
17
+ *
16
18
  * Call it once per group of writes, after the last of them and after any
17
19
  * {@link Transform64#updateMatrix} the group owes:
18
20
  *
@@ -20,20 +22,18 @@ import { Transform64 } from "./Transform64.js";
20
22
  * transform.setRotation(x, y, z, w);
21
23
  * transform.updateMatrix();
22
24
  *
23
- * t64_announce_change(ecd, entity, transform);
25
+ * t64_announce_change(ecd, entity);
24
26
  * ```
25
27
  *
26
28
  * @param {EntityComponentDataset} ecd
27
- * @param {number} entity
28
- * @param {Transform64} transform the instance that was written, handed to listeners as `instance`
29
+ * @param {number} entity the entity whose transform was written
29
30
  * @returns {void}
30
31
  *
32
+ * @see TRANSFORM64_EVENT_CHANGE
33
+ *
31
34
  * @author Alex Goldring
32
35
  * @copyright Company Named Limited (c) 2026
33
36
  */
34
- export function t64_announce_change(ecd, entity, transform) {
35
- ecd.sendEvent(entity, EventType.ComponentChanged, {
36
- klass: Transform64,
37
- instance: transform
38
- });
37
+ export function t64_announce_change(ecd, entity) {
38
+ ecd.sendEvent(entity, TRANSFORM64_EVENT_CHANGE);
39
39
  }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Entity event announcing that an entity's {@link TransformAttachment} was mutated in place.
3
+ *
4
+ * The other half of the spatial hierarchy from {@link TRANSFORM64_EVENT_CHANGE}, and announced for
5
+ * the same reason: the offset a {@link TransformAttachment} holds is plain data, so writing it says
6
+ * nothing, and {@link TransformAttachmentSystem} is waiting to hear that it changed before it
7
+ * recomposes the entity's world {@link Transform64} and everything below it.
8
+ *
9
+ * A solved bone angle comes through here rather than through the transform channel, because a
10
+ * bone's local pose is not a component in its own right - it lives inside the attachment.
11
+ *
12
+ * No payload, for the reason {@link TRANSFORM64_EVENT_CHANGE} carries none: the listener is already
13
+ * holding the attachment it linked with.
14
+ *
15
+ * ```
16
+ * attachment.transform.copy(pose);
17
+ *
18
+ * ecd.sendEvent(entity, TRANSFORM_ATTACHMENT_EVENT_CHANGE);
19
+ * ```
20
+ *
21
+ * @type {string}
22
+ *
23
+ * @see TRANSFORM64_EVENT_CHANGE
24
+ * @see EntityComponentDataset#addEntityEventListener
25
+ *
26
+ * @author Alex Goldring
27
+ * @copyright Company Named Limited (c) 2026
28
+ */
29
+ export const TRANSFORM_ATTACHMENT_EVENT_CHANGE: string;
30
+ //# sourceMappingURL=TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,gDARU,MAAM,CAQgE"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Entity event announcing that an entity's {@link TransformAttachment} was mutated in place.
3
+ *
4
+ * The other half of the spatial hierarchy from {@link TRANSFORM64_EVENT_CHANGE}, and announced for
5
+ * the same reason: the offset a {@link TransformAttachment} holds is plain data, so writing it says
6
+ * nothing, and {@link TransformAttachmentSystem} is waiting to hear that it changed before it
7
+ * recomposes the entity's world {@link Transform64} and everything below it.
8
+ *
9
+ * A solved bone angle comes through here rather than through the transform channel, because a
10
+ * bone's local pose is not a component in its own right - it lives inside the attachment.
11
+ *
12
+ * No payload, for the reason {@link TRANSFORM64_EVENT_CHANGE} carries none: the listener is already
13
+ * holding the attachment it linked with.
14
+ *
15
+ * ```
16
+ * attachment.transform.copy(pose);
17
+ *
18
+ * ecd.sendEvent(entity, TRANSFORM_ATTACHMENT_EVENT_CHANGE);
19
+ * ```
20
+ *
21
+ * @type {string}
22
+ *
23
+ * @see TRANSFORM64_EVENT_CHANGE
24
+ * @see EntityComponentDataset#addEntityEventListener
25
+ *
26
+ * @author Alex Goldring
27
+ * @copyright Company Named Limited (c) 2026
28
+ */
29
+ export const TRANSFORM_ATTACHMENT_EVENT_CHANGE = "@transform_attachment/change";
@@ -1 +1 @@
1
- {"version":3,"file":"TransformAttachmentSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform-attachment/TransformAttachmentSystem.js"],"names":[],"mappings":"AAiMA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;;IAEI;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,mBAAoC;IAEpC;;;;OAIG;IACH,gBAAa;IACb,qBAAiB;IACjB,uBAAmB;IAEnB,kEAAkD;IAClD,+HAGE;IAEF;;;;OAIG;IACH,wBASC;IAED;;;;OAIG;IACH,kBAEC;IAED;;;;;OAKG;IACH,yBAYC;IAED;;;;;;;;OAQG;IACH,uBALW,MAAM,EAAE,iBACR,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,iBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,mBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAkBhB;IAED,6BAoBC;CACJ;uBAtYsB,cAAc;4BACT,6BAA6B;oCACK,0BAA0B;4CAL5C,oDAAoD"}
1
+ {"version":3,"file":"TransformAttachmentSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform-attachment/TransformAttachmentSystem.js"],"names":[],"mappings":"AAyLA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH;;IAEI;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,mBAAoC;IAEpC;;;;OAIG;IACH,gBAAa;IACb,qBAAiB;IACjB,uBAAmB;IAEnB,kEAAkD;IAClD,+HAGE;IAEF;;;;OAIG;IACH,wBASC;IAED;;;;OAIG;IACH,kBAEC;IAED;;;;;OAKG;IACH,yBAYC;IAED;;;;;;;;OAQG;IACH,uBALW,MAAM,EAAE,iBACR,MAAM,UACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;OAKG;IACH,iBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAsBhB;IAED;;;;;OAKG;IACH,mBAJW,mBAAmB,aACnB,WAAW,UACX,MAAM,QAkBhB;IAED,6BAoBC;CACJ;uBA9XsB,cAAc;4BAET,6BAA6B;oCAEK,0BAA0B;4CAP5C,oDAAoD"}
@@ -4,7 +4,9 @@ import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessS
4
4
  import { EventType } from "../EventType.js";
5
5
  import { EntityChildIndex } from "../hierarchy/EntityChildIndex.js";
6
6
  import { System } from "../System.js";
7
+ import { TRANSFORM64_EVENT_CHANGE } from "../transform/TRANSFORM64_EVENT_CHANGE.js";
7
8
  import { Transform64 } from "../transform/Transform64.js";
9
+ import { TRANSFORM_ATTACHMENT_EVENT_CHANGE } from "./TRANSFORM_ATTACHMENT_EVENT_CHANGE.js";
8
10
  import { TransformAttachment, TransformAttachmentFlags } from "./TransformAttachment.js";
9
11
 
10
12
  /**
@@ -74,10 +76,7 @@ class UpdateContext {
74
76
  Note that nothing here listens to this: reacting to your own output is a loop, which is
75
77
  why the self-listener below is about the attachment only.
76
78
  */
77
- this.ecd.sendEvent(this.entity, EventType.ComponentChanged, {
78
- klass: Transform64,
79
- instance: this.transform
80
- });
79
+ this.ecd.sendEvent(this.entity, TRANSFORM64_EVENT_CHANGE);
81
80
  }
82
81
 
83
82
  /**
@@ -122,30 +121,23 @@ class UpdateContext {
122
121
 
123
122
  link() {
124
123
  // Neither transform carries signals any more, so both announcements come through the
125
- // dataset. The parent's pose arrives as a change to its own Transform64 - whether the
126
- // parent is a root somebody moved or a link whose own composition just ran; the attachment's
127
- // offset arrives as a change to the TransformAttachment component holding it.
128
- this.#on_parent_changed = event => {
129
- if (event.klass === Transform64) {
130
- this.update();
131
- }
132
- };
124
+ // dataset, on the channel belonging to the thing that moved. The parent's pose arrives as
125
+ // TRANSFORM64_EVENT_CHANGE on the parent - whether it is a root somebody moved or a link
126
+ // whose own composition just ran; the offset arrives as TRANSFORM_ATTACHMENT_EVENT_CHANGE
127
+ // on this entity, from whoever wrote the attachment.
128
+ this.#on_parent_changed = () => this.update();
133
129
 
134
- this.#on_self_changed = event => {
135
- if (event.klass === TransformAttachment) {
136
- this.update();
137
- }
138
- };
130
+ this.#on_self_changed = () => this.update();
139
131
 
140
132
  this.ecd.addEntityEventListener(
141
133
  this.attachment.parent,
142
- EventType.ComponentChanged,
134
+ TRANSFORM64_EVENT_CHANGE,
143
135
  this.#on_parent_changed
144
136
  );
145
137
 
146
138
  this.ecd.addEntityEventListener(
147
139
  this.entity,
148
- EventType.ComponentChanged,
140
+ TRANSFORM_ATTACHMENT_EVENT_CHANGE,
149
141
  this.#on_self_changed
150
142
  );
151
143
 
@@ -165,7 +157,7 @@ class UpdateContext {
165
157
  if (this.#on_parent_changed !== null) {
166
158
  this.ecd.removeEntityEventListener(
167
159
  this.attachment.parent,
168
- EventType.ComponentChanged,
160
+ TRANSFORM64_EVENT_CHANGE,
169
161
  this.#on_parent_changed
170
162
  );
171
163
 
@@ -175,7 +167,7 @@ class UpdateContext {
175
167
  if (this.#on_self_changed !== null) {
176
168
  this.ecd.removeEntityEventListener(
177
169
  this.entity,
178
- EventType.ComponentChanged,
170
+ TRANSFORM_ATTACHMENT_EVENT_CHANGE,
179
171
  this.#on_self_changed
180
172
  );
181
173
 
@@ -1 +1 @@
1
- {"version":3,"file":"SpriteSystemPE.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/sprite/SpriteSystemPE.js"],"names":[],"mappings":"AA0IA;IAGI,cAEC;IAJD,qDAAqC;CAKxC;sCA7IqC,8CAA8C;4BAGxD,uCAAuC;uBAQ5C,aAAa"}
1
+ {"version":3,"file":"SpriteSystemPE.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/sprite/SpriteSystemPE.js"],"names":[],"mappings":"AAsIA;IAGI,cAEC;IAJD,qDAAqC;CAKxC;sCAzIqC,8CAA8C;4BAGxD,uCAAuC;uBAQ5C,aAAa"}
@@ -3,7 +3,7 @@ import { SerializationMetadata } from "../../../ecs/components/SerializationMeta
3
3
  import Entity from "../../../ecs/Entity.js";
4
4
  import { AbstractContextSystem } from "../../../ecs/system/AbstractContextSystem.js";
5
5
  import { SystemEntityContext } from "../../../ecs/system/SystemEntityContext.js";
6
- import { EventType } from "../../../ecs/EventType.js";
6
+ import { TRANSFORM64_EVENT_CHANGE } from "../../../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
7
7
  import { Transform64 } from "../../../ecs/transform/Transform64.js";
8
8
  import {
9
9
  PARTICLE_ATTRIBUTE_COLOR,
@@ -102,14 +102,10 @@ class Context extends SystemEntityContext {
102
102
  //
103
103
  // One listener where there were two, because a Transform64 announces itself whole rather
104
104
  // than through a sub-object per component.
105
- this.__on_transform_changed = event => {
106
- if (event.klass === Transform64) {
107
- this.__copy_transform();
108
- }
109
- };
105
+ this.__on_transform_changed = () => this.__copy_transform();
110
106
 
111
107
  this.getDataset().addEntityEventListener(
112
- this.entity, EventType.ComponentChanged, this.__on_transform_changed
108
+ this.entity, TRANSFORM64_EVENT_CHANGE, this.__on_transform_changed
113
109
  );
114
110
 
115
111
  emitter.computeBoundingBox();
@@ -124,7 +120,7 @@ class Context extends SystemEntityContext {
124
120
 
125
121
  if (this.__on_transform_changed !== undefined) {
126
122
  this.getDataset().removeEntityEventListener(
127
- this.entity, EventType.ComponentChanged, this.__on_transform_changed
123
+ this.entity, TRANSFORM64_EVENT_CHANGE, this.__on_transform_changed
128
124
  );
129
125
 
130
126
  this.__on_transform_changed = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"LightSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/LightSystem.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AACH;IAgBI;;;OAGG;IACH,oDAUC;IADG,oDAAwC;IAG5C,2CAIC;IAED,4CAIC;IAED;;;;OAIG;IACH,gBAJW,KAAK,aACL,WAAW,UACX,MAAM,QA2EhB;IAED;;;;OAIG;IACH,kBAJW,KAAK,aACL,WAAW,UACX,MAAM,QAIhB;;CA4BJ;uBAlLsB,kBAAkB;4BACb,iCAAiC;sBACvC,gCAAgC"}
1
+ {"version":3,"file":"LightSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/LightSystem.js"],"names":[],"mappings":"AAWA;;;;;;;;;;;;GAYG;AACH;IAgBI;;;OAGG;IACH,oDAUC;IADG,oDAAwC;IAG5C,2CAIC;IAED,4CAIC;IAED;;;;OAIG;IACH,gBAJW,KAAK,aACL,WAAW,UACX,MAAM,QAuEhB;IAED;;;;OAIG;IACH,kBAJW,KAAK,aACL,WAAW,UACX,MAAM,QAIhB;;CA4BJ;uBA9KsB,kBAAkB;4BACb,iCAAiC;sBACvC,gCAAgC"}
@@ -7,7 +7,7 @@ import { System } from "../ecs/System.js";
7
7
  import { Transform64 } from "../ecs/transform/Transform64.js";
8
8
  import { Light } from "../graphics/ecs/light/Light.js";
9
9
  import { LightType } from "../graphics/ecs/light/LightType.js";
10
- import { EventType } from "../ecs/EventType.js";
10
+ import { TRANSFORM64_EVENT_CHANGE } from "../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
11
11
 
12
12
  /**
13
13
  * Mirrors light entities into Shade's scene.
@@ -115,14 +115,10 @@ export class LightSystem extends System {
115
115
  // One dataset listener replaces the three sub-object signals a Transform used to carry.
116
116
  // Coarser - it wakes on any change to the transform rather than on a named channel - and
117
117
  // that is the trade: the placement reads the whole transform anyway.
118
- entry.on_transform_changed = event => {
119
- if (event.klass === Transform64) {
120
- place();
121
- }
122
- };
118
+ entry.on_transform_changed = place;
123
119
 
124
120
  this.entityManager.dataset.addEntityEventListener(
125
- entity, EventType.ComponentChanged, entry.on_transform_changed
121
+ entity, TRANSFORM64_EVENT_CHANGE, entry.on_transform_changed
126
122
  );
127
123
 
128
124
  // A light's properties are gameplay-driven — a torch guttering, a spell charging, a
@@ -171,7 +167,7 @@ export class LightSystem extends System {
171
167
 
172
168
  if (entry.on_transform_changed !== undefined && entry.on_transform_changed !== null) {
173
169
  this.entityManager.dataset.removeEntityEventListener(
174
- entity, EventType.ComponentChanged, entry.on_transform_changed
170
+ entity, TRANSFORM64_EVENT_CHANGE, entry.on_transform_changed
175
171
  );
176
172
 
177
173
  entry.on_transform_changed = null;
@@ -1 +1 @@
1
- {"version":3,"file":"MeshSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/MeshSystem.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAmFI;;;;OAIG;IACH,6CAHW,KAAK,eACI,MAAM,KAAG,oBAAoB,EAchD;IADG,qDAAyC;IAG7C;;OAEG;IACH,mBAEC;IAED;;;;;;;;;;;;OAYG;IACH,wBALW,MAAM,kBACG,MAAM,KAAG,IAAI,GACpB,OAAO,CAqBnB;IAoCD;;;;;;;;;;;OAWG;IACH,oBAJW,MAAM,GACJ,sBAAoB,IAAI,CAWpC;IAED;;;;;;;;;;;OAWG;IACH,qBAJW,MAAM,GACJ,gCAA8B,IAAI,CAW9C;IAED;;;;;;;;;;;OAWG;IACH,6BALW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,UACvC,MAAM,GACJ,OAAO,CAuCnB;IAED,2CAIC;IAED,4CASC;IA6GD;;;;OAIG;IACH,YAJW,MAAM,aACN,WAAW,UACX,MAAM,QA+BhB;IAED;;;;OAIG;IACH,cAJW,MAAM,aACN,WAAW,UACX,MAAM,QAIhB;;CA0MJ;uBA5pBsB,kBAAkB;4BACb,iCAAiC;uBAGtC,6CAA6C;sBAV9C,qCAAqC"}
1
+ {"version":3,"file":"MeshSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/MeshSystem.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAmFI;;;;OAIG;IACH,6CAHW,KAAK,eACI,MAAM,KAAG,oBAAoB,EAchD;IADG,qDAAyC;IAG7C;;OAEG;IACH,mBAEC;IAED;;;;;;;;;;;;OAYG;IACH,wBALW,MAAM,kBACG,MAAM,KAAG,IAAI,GACpB,OAAO,CAqBnB;IAoCD;;;;;;;;;;;OAWG;IACH,oBAJW,MAAM,GACJ,sBAAoB,IAAI,CAWpC;IAED;;;;;;;;;;;OAWG;IACH,qBAJW,MAAM,GACJ,gCAA8B,IAAI,CAW9C;IAED;;;;;;;;;;;OAWG;IACH,6BALW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,UACvC,MAAM,GACJ,OAAO,CAuCnB;IAED,2CAIC;IAED,4CASC;IA6GD;;;;OAIG;IACH,YAJW,MAAM,aACN,WAAW,UACX,MAAM,QA2BhB;IAED;;;;OAIG;IACH,cAJW,MAAM,aACN,WAAW,UACX,MAAM,QAIhB;;CAoMJ;uBAlpBsB,kBAAkB;4BACb,iCAAiC;uBAGtC,6CAA6C;sBAV9C,qCAAqC"}
@@ -13,7 +13,7 @@ import { ParentEntity } from "../ecs/parent/ParentEntity.js";
13
13
  import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
14
14
  import { SGMesh } from "../graphics/ecs/mesh-v2/aggregate/SGMesh.js";
15
15
  import { shade_bundle_to_entity_composition } from "./shade_node_to_entity_composition.js";
16
- import { EventType } from "../ecs/EventType.js";
16
+ import { TRANSFORM64_EVENT_CHANGE } from "../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
17
17
  import { t64_announce_change } from "../ecs/transform/t64_announce_change.js";
18
18
 
19
19
  /**
@@ -443,18 +443,14 @@ export class MeshSystem extends System {
443
443
  // The entity is placed the moment its transform moves, not on a poll: a transform that has
444
444
  // not changed costs nothing, which is the same bargain the scene database makes downstream.
445
445
  // A Transform64 has no signals of its own, so the announcement comes from the dataset: the
446
- // writer sends ComponentChanged and this wakes on it. Coarser than the three sub-object
447
- // signals it replaces - a scale write wakes a placement that only reads the whole transform
448
- // anyway - and #place already skips when nothing moved.
449
- const on_changed = event => {
450
- if (event.klass === Transform64) {
451
- this.#place(entity, transform);
452
- }
453
- };
446
+ // writer sends TRANSFORM64_EVENT_CHANGE and this wakes on it. Coarser than the three
447
+ // sub-object signals it replaces - a scale write wakes a placement that only reads the whole
448
+ // transform anyway - and #place already skips when nothing moved.
449
+ const on_changed = () => this.#place(entity, transform);
454
450
 
455
451
  entry.on_changed = on_changed;
456
452
 
457
- this.entityManager.dataset.addEntityEventListener(entity, EventType.ComponentChanged, on_changed);
453
+ this.entityManager.dataset.addEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, on_changed);
458
454
 
459
455
  if (model.url === null) {
460
456
  // nothing to show yet; {@link update} watches for the url arriving
@@ -581,18 +577,12 @@ export class MeshSystem extends System {
581
577
 
582
578
  // the composed entity follows the source transform, and a Transform64 has no signals of
583
579
  // its own, so the follow rides the dataset announcement like every other consumer
584
- const on_source_changed = event => {
585
- if (event.klass === Transform64) {
586
- follow();
587
- }
588
- };
589
-
590
580
  const ecd = this.entityManager.dataset;
591
581
 
592
- ecd.addEntityEventListener(entity, EventType.ComponentChanged, on_source_changed);
582
+ ecd.addEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, follow);
593
583
 
594
584
  composition.on.destroyed.addOne(
595
- () => ecd.removeEntityEventListener(entity, EventType.ComponentChanged, on_source_changed)
585
+ () => ecd.removeEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, follow)
596
586
  );
597
587
 
598
588
  entry.composition = composition;
@@ -633,7 +623,7 @@ export class MeshSystem extends System {
633
623
  }
634
624
 
635
625
  if (entry.on_changed !== null) {
636
- this.entityManager.dataset.removeEntityEventListener(entity, EventType.ComponentChanged, entry.on_changed);
626
+ this.entityManager.dataset.removeEntityEventListener(entity, TRANSFORM64_EVENT_CHANGE, entry.on_changed);
637
627
 
638
628
  entry.on_changed = null;
639
629
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;GAaG;AACH;IAiDI;;;OAGG;IACH,4DAUC;IA9DD,8DAA8C;IAuC9C;;;;OAIG;IACH,kCAEC;IAkBD,2CAUC;IAED,4CAeC;IAED;;;;OAIG;IACH,cAJW,eAAe,aACf,WAAW,UACX,MAAM,QA0ChB;IAED;;;;;;;;;OASG;IACH,iBAFW,eAAe,QAqBzB;IAED;;;;OAIG;IACH,gBAJW,eAAe,aACf,WAAW,UACX,MAAM,QA0BhB;IAED,6BAaC;IAED;;OAEG;IACH,kCA+BC;;CACJ;AAED;;;GAGG;AACH;IAUI;;OAEG;IACH,oBAFW,qBAAqB,EAM/B;IAED,yBAEC;;CACJ;uBA/SsB,kBAAkB;4BACb,iCAAiC;gCAC7B,oEAAoE;gCANpE,mDAAmD"}
1
+ {"version":3,"file":"ParticleEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ParticleEmitterSystem.js"],"names":[],"mappings":"AAcA;;;;;;;;;;;;;GAaG;AACH;IAiDI;;;OAGG;IACH,4DAUC;IA9DD,8DAA8C;IAuC9C;;;;OAIG;IACH,kCAEC;IAkBD,2CAUC;IAED,4CAeC;IAED;;;;OAIG;IACH,cAJW,eAAe,aACf,WAAW,UACX,MAAM,QAsChB;IAED;;;;;;;;;OASG;IACH,iBAFW,eAAe,QAqBzB;IAED;;;;OAIG;IACH,gBAJW,eAAe,aACf,WAAW,UACX,MAAM,QA0BhB;IAED,6BAaC;IAED;;OAEG;IACH,kCA+BC;;CACJ;AAED;;;GAGG;AACH;IAUI;;OAEG;IACH,oBAFW,qBAAqB,EAM/B;IAED,yBAEC;;CACJ;uBA3SsB,kBAAkB;4BACb,iCAAiC;gCAC7B,oEAAoE;gCANpE,mDAAmD"}
@@ -10,7 +10,7 @@ import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter
10
10
  import { ParticleEmitterFlag } from "../graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js";
11
11
  import { ParticularEngine } from "../graphics/particles/particular/engine/ParticularEngine.js";
12
12
  import { GPUParticularRenderer } from "./particles/GPUParticularRenderer.js";
13
- import { EventType } from "../ecs/EventType.js";
13
+ import { TRANSFORM64_EVENT_CHANGE } from "../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
14
14
 
15
15
  /**
16
16
  * Draws the game's particle effects under Shade.
@@ -138,18 +138,14 @@ export class ParticleEmitterSystem extends System {
138
138
 
139
139
  // Vector3.process called the callback AND subscribed. The transform has no signals, so
140
140
  // the subscription half becomes one dataset listener that re-pushes the whole pose.
141
- const on_transform_changed = event => {
142
- if (event.klass !== Transform64) {
143
- return;
144
- }
145
-
141
+ const on_transform_changed = () => {
146
142
  position(transform.translation_x, transform.translation_y, transform.translation_z);
147
143
  rotation(transform.rotation_x, transform.rotation_y, transform.rotation_z, transform.rotation_w);
148
144
  scale(transform.scale_x, transform.scale_y, transform.scale_z);
149
145
  };
150
146
 
151
147
  this.entityManager.dataset.addEntityEventListener(
152
- entity, EventType.ComponentChanged, on_transform_changed
148
+ entity, TRANSFORM64_EVENT_CHANGE, on_transform_changed
153
149
  );
154
150
 
155
151
  this.#entries.set(entity, { emitter, position, rotation, scale, on_transform_changed });
@@ -212,7 +208,7 @@ export class ParticleEmitterSystem extends System {
212
208
 
213
209
  if (entry.on_transform_changed !== undefined) {
214
210
  this.entityManager.dataset.removeEntityEventListener(
215
- entity, EventType.ComponentChanged, entry.on_transform_changed
211
+ entity, TRANSFORM64_EVENT_CHANGE, entry.on_transform_changed
216
212
  );
217
213
  }
218
214
 
@@ -1 +1 @@
1
- {"version":3,"file":"ShadedGeometrySystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ShadedGeometrySystem.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAkBI;;;OAGG;IACH,oDAUC;IADG,6DAAiD;IAGrD,2CAEC;IAED,4CAIC;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,WAAW,UACX,MAAM,QAgDhB;IAED;;;;OAIG;IACH,iBAJW,cAAc,aACd,WAAW,UACX,MAAM,QAMhB;;CA4CJ;uBA/KsB,kBAAkB;4BACb,iCAAiC;+BAC9B,2CAA2C"}
1
+ {"version":3,"file":"ShadedGeometrySystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ShadedGeometrySystem.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAkBI;;;OAGG;IACH,oDAUC;IADG,6DAAiD;IAGrD,2CAEC;IAED,4CAIC;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,WAAW,UACX,MAAM,QA0ChB;IAED;;;;OAIG;IACH,iBAJW,cAAc,aACd,WAAW,UACX,MAAM,QAMhB;;CA4CJ;uBAzKsB,kBAAkB;4BACb,iCAAiC;+BAC9B,2CAA2C"}
@@ -5,7 +5,7 @@ import Name from "../ecs/name/Name.js";
5
5
  import { System } from "../ecs/System.js";
6
6
  import { Transform64 } from "../ecs/transform/Transform64.js";
7
7
  import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
8
- import { EventType } from "../ecs/EventType.js";
8
+ import { TRANSFORM64_EVENT_CHANGE } from "../ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
9
9
 
10
10
  /**
11
11
  * Puts one primitive into Shade's scene, and keeps it where the entity says.
@@ -103,17 +103,11 @@ export class ShadedGeometrySystem extends System {
103
103
  // One dataset listener replaces the three sub-object signals a Transform used to carry.
104
104
  // Coarser - it wakes on any change to the transform rather than on a named channel - and
105
105
  // that is the trade: the placement reads the whole transform anyway.
106
- const on_transform_changed = event => {
107
- if (event.klass === Transform64) {
108
- place();
109
- }
110
- };
111
-
112
106
  this.entityManager.dataset.addEntityEventListener(
113
- entity, EventType.ComponentChanged, on_transform_changed
107
+ entity, TRANSFORM64_EVENT_CHANGE, place
114
108
  );
115
109
 
116
- this.#entries.set(entity, { node, bindings, on_transform_changed });
110
+ this.#entries.set(entity, { node, bindings, on_transform_changed: place });
117
111
 
118
112
  // the component carries its own row, so anything holding the component can ask where the
119
113
  // primitive ended up without going through this system
@@ -169,7 +163,7 @@ export class ShadedGeometrySystem extends System {
169
163
 
170
164
  if (entry.on_transform_changed !== undefined) {
171
165
  this.entityManager.dataset.removeEntityEventListener(
172
- entity, EventType.ComponentChanged, entry.on_transform_changed
166
+ entity, TRANSFORM64_EVENT_CHANGE, entry.on_transform_changed
173
167
  );
174
168
  }
175
169
 
@@ -52,7 +52,7 @@ declare class Synchronizer {
52
52
  ecd: EntityComponentDataset;
53
53
  write(): void;
54
54
  link(): void;
55
- on_transform_changed: (event: any) => void;
55
+ on_transform_changed: () => void;
56
56
  unlink(): void;
57
57
  }
58
58
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Transform2GridPositionSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/grid/transform2grid/Transform2GridPositionSystem.js"],"names":[],"mappings":"AAmGA;;IACI,2FAAmE;IACnE,oEAEE;IAEF;;;OAGG;IACH,MAFU,YAAY,EAAE,CAEd;IAEV;;;;;;OAMG;IACH,gBALW,sBAAsB,aACtB,WAAW,MACX,YAAY,UACZ,MAAM,QAehB;IAED;;;;;;OAMG;IACH,kBALW,sBAAsB,aACtB,WAAW,MACX,YAAY,UACZ,MAAM,QAYhB;CACJ;uBAvJsB,qBAAqB;4BAGhB,oCAAoC;yBADvC,6BAA6B;uCADf,6BAA6B;4CAMxB,oDAAoD;AAMhG;IACI;;;OAGG;IACH,WAFU,WAAW,CAEJ;IAEjB;;;OAGG;IACH,UAFU,YAAY,CAEN;IAEhB;;;OAGG;IACH,WAFU,sBAAsB,CAEf;IAEjB;;;OAGG;IACH,4BAAW;IAEX,cAgCC;IAGD,aAWC;IATG,2CAIC;IAOL,eAUC;CACJ"}
1
+ {"version":3,"file":"Transform2GridPositionSystem.d.ts","sourceRoot":"","sources":["../../../../../src/engine/grid/transform2grid/Transform2GridPositionSystem.js"],"names":[],"mappings":"AA+FA;;IACI,2FAAmE;IACnE,oEAEE;IAEF;;;OAGG;IACH,MAFU,YAAY,EAAE,CAEd;IAEV;;;;;;OAMG;IACH,gBALW,sBAAsB,aACtB,WAAW,MACX,YAAY,UACZ,MAAM,QAehB;IAED;;;;;;OAMG;IACH,kBALW,sBAAsB,aACtB,WAAW,MACX,YAAY,UACZ,MAAM,QAYhB;CACJ;uBAnJsB,qBAAqB;4BAGhB,oCAAoC;yBADvC,6BAA6B;uCADf,6BAA6B;4CAMxB,oDAAoD;AAMhG;IACI;;;OAGG;IACH,WAFU,WAAW,CAEJ;IAEjB;;;OAGG;IACH,UAFU,YAAY,CAEN;IAEhB;;;OAGG;IACH,WAFU,sBAAsB,CAEf;IAEjB;;;OAGG;IACH,4BAAW;IAEX,cAgCC;IAGD,aAOC;IALG,iCAA8C;IAOlD,eAUC;CACJ"}