@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
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleNodeParametersView.d.ts","sourceRoot":"","sources":["../../../../../editor/view/particles/effect/ParticleNodeParametersView.js"],"names":[],"mappings":"AAmCA;IAOI;;;;;;OAMG;IACH;QALyG,MAAM,EAApG,OAAO,qDAAqD,EAAE,sBAAsB;QAE9D,IAAI;QACG,MAAM,SAA1B,MAAM;OA6BzB;IAxBG,mBAAuC;IAIvC;;OAEG;IACH,mBAAgB;;CAgcvB;iBAtfgB,8BAA8B"}
1
+ {"version":3,"file":"ParticleNodeParametersView.d.ts","sourceRoot":"","sources":["../../../../../editor/view/particles/effect/ParticleNodeParametersView.js"],"names":[],"mappings":"AAqCA;IAOI;;;;;;OAMG;IACH;QALyG,MAAM,EAApG,OAAO,qDAAqD,EAAE,sBAAsB;QAE9D,IAAI;QACG,MAAM,SAA1B,MAAM;OA6BzB;IAxBG,mBAAuC;IAIvC;;OAEG;IACH,mBAAgB;;CA0cvB;iBAlgBgB,8BAA8B"}
@@ -9,6 +9,8 @@ import {
9
9
  PARTICLE_WIDTH_OPTIONS,
10
10
  particle_node_parameters,
11
11
  } from "../../../../src/shade/renderer/particles/graph/particle_node_parameters.js";
12
+ import { ParticleCurveEditorView } from "./ParticleCurveEditorView.js";
13
+ import { ParticleGradientEditorView } from "./ParticleGradientEditorView.js";
12
14
 
13
15
  /**
14
16
  * The controls for one particle node's static parameters, drawn inside the node.
@@ -138,6 +140,16 @@ export class ParticleNodeParametersView extends View {
138
140
  control = this.#buildIntegerControl(parameter, value, write);
139
141
  break;
140
142
 
143
+ case PARTICLE_PARAMETER_KIND.CURVE:
144
+ control = editor_control(new ParticleCurveEditorView({ read: value, write }));
145
+ break;
146
+
147
+ case PARTICLE_PARAMETER_KIND.GRADIENT:
148
+ control = editor_control(
149
+ new ParticleGradientEditorView({ read: value, write, alpha: parameter.alpha !== false })
150
+ );
151
+ break;
152
+
141
153
  default:
142
154
  throw new Error(
143
155
  `Particle parameter '${parameter.name}' has kind '${parameter.kind}', which has no control.`
@@ -507,6 +519,27 @@ export class ParticleNodeParametersView extends View {
507
519
  }
508
520
  }
509
521
 
522
+ /**
523
+ * A control that is a view of its own, in the shape the rest of this file uses.
524
+ *
525
+ * The two ramp editors are not built out of `<input>`s the way the rest are — a gradient is a canvas
526
+ * with a lane of stops under it — so they arrive already made, and all that is left is to say how a
527
+ * value written from outside reaches them. That is by re-reading rather than by being handed the
528
+ * value: both hold a working copy that a drag is written into, and re-reading is what throws that
529
+ * copy away in favour of what the node now says. The node's parameter is already set by the time its
530
+ * signal arrives, so there is nothing stale to read.
531
+ *
532
+ * @param {{refresh: function():void}} editor
533
+ * @returns {{view: View, write: function(*):void, refresh: function():void}}
534
+ */
535
+ function editor_control(editor) {
536
+ return {
537
+ view: editor,
538
+ write: () => editor.refresh(),
539
+ refresh: () => editor.refresh(),
540
+ };
541
+ }
542
+
510
543
  /**
511
544
  * @param {string} type
512
545
  * @returns {HTMLInputElement}
@@ -139,6 +139,11 @@
139
139
  color: var(--meep-warning, #e2b341);
140
140
  }
141
141
 
142
+ /* a note is not a problem: it reads as quietly as the graph it is about is running */
143
+ .problem.info {
144
+ opacity: 0.7;
145
+ }
146
+
142
147
  .problems > .none {
143
148
  padding: 4px 10px;
144
149
  color: var(--meep-fg-muted, #9da0a3);
@@ -153,6 +158,12 @@
153
158
  border-color: var(--meep-warning, #e2b341);
154
159
  }
155
160
 
161
+ /* nothing reads this node, so it is not compiled — drawn as the aside it is, not as a fault */
162
+ .ui-node-view.has-info {
163
+ opacity: 0.6;
164
+ border-style: dashed;
165
+ }
166
+
156
167
  /* --- particle node parameters --------------------------------------------------------------- */
157
168
 
158
169
  .ui-particle-node-parameters {
@@ -199,6 +210,83 @@
199
210
  color: var(--meep-error, #ff7a7a);
200
211
  }
201
212
 
213
+ /*
214
+ The ramp controls — a gradient's strip and a curve's plot.
215
+
216
+ Both are wider than a label and a field side by side, so their rows put the label on its own line
217
+ and give the control the width of the node. The canvases scale with the row rather than holding
218
+ their drawn size: the graph is zoomable, and a control that stayed 208 pixels while everything
219
+ around it grew would be the one thing on the node that could not be read.
220
+ */
221
+
222
+ .ui-particle-node-parameters .parameter-row.kind-gradient,
223
+ .ui-particle-node-parameters .parameter-row.kind-curve {
224
+ flex-direction: column;
225
+ align-items: stretch;
226
+ gap: 3px;
227
+ }
228
+
229
+ .ui-particle-gradient,
230
+ .ui-particle-curve {
231
+ display: flex;
232
+ flex-direction: column;
233
+ gap: 3px;
234
+ }
235
+
236
+ .ui-particle-gradient > .strip,
237
+ .ui-particle-curve > .plot {
238
+ display: block;
239
+ width: 100%;
240
+ height: auto;
241
+ border: 1px solid var(--meep-graph-node-border, #363c46);
242
+ border-radius: 3px;
243
+ background: var(--meep-graph-input-bg, #171b21);
244
+ /* the strip and the plot are both dragged in, and a drag that selects text is a drag that fights */
245
+ touch-action: none;
246
+ user-select: none;
247
+ }
248
+
249
+ .ui-particle-gradient > .stop-fields,
250
+ .ui-particle-curve > .key-fields {
251
+ display: flex;
252
+ gap: 2px;
253
+ align-items: center;
254
+ }
255
+
256
+ .ui-particle-gradient .swatch {
257
+ flex: 1 1 auto;
258
+ min-width: 3em;
259
+ padding: 0;
260
+ }
261
+
262
+ .ui-particle-gradient .alpha,
263
+ .ui-particle-gradient .position {
264
+ flex: 0 0 auto;
265
+ width: 4em;
266
+ }
267
+
268
+ .ui-particle-curve .tangents {
269
+ flex: 1 1 auto;
270
+ }
271
+
272
+ .ui-particle-gradient .remove,
273
+ .ui-particle-curve .remove {
274
+ flex: 0 0 auto;
275
+ width: 1.8em;
276
+ padding: 2px 0;
277
+ border: 1px solid var(--meep-graph-node-border, #363c46);
278
+ border-radius: 3px;
279
+ background: var(--meep-graph-input-bg, #171b21);
280
+ color: var(--meep-fg, #d6d8da);
281
+ cursor: pointer;
282
+ line-height: 1;
283
+ }
284
+
285
+ .ui-particle-gradient .remove:hover,
286
+ .ui-particle-curve .remove:hover {
287
+ background: rgba(255, 255, 255, 0.08);
288
+ }
289
+
202
290
  /* --- code layer ----------------------------------------------------------------------------- */
203
291
 
204
292
  .ui-particle-code-editor > .header > .authority {
@@ -519,38 +607,38 @@
519
607
  border-style: dashed;
520
608
  opacity: 0.92;
521
609
  }
522
-
523
- /*
524
- A group's name, while an author is inside it. Sized to the text rather than to a form field: it
525
- lives in a breadcrumb and has to read as part of one until it is being typed in.
526
- */
527
- .ui-particle-graph-editor .group-trail input.rename {
528
- width: 11ch;
529
- padding: 1px 4px;
530
- border: 1px solid transparent;
531
- border-radius: 3px;
532
- background: transparent;
533
- color: inherit;
534
- font: inherit;
535
- }
536
-
537
- .ui-particle-graph-editor .group-trail input.rename:hover {
538
- border-color: var(--meep-graph-node-border, #363c46);
539
- }
540
-
541
- .ui-particle-graph-editor .group-trail input.rename:focus {
542
- outline: none;
543
- border-color: var(--meep-accent, #2d7dd2);
544
- background: var(--meep-graph-input-bg, #171b21);
545
- }
546
-
547
- /* a command that does not apply to what is selected; the title says why */
548
- .toolbar-button.disabled {
549
- opacity: 0.45;
550
- cursor: default;
551
- }
552
-
553
- .toolbar-button.disabled:hover {
554
- border-color: transparent;
555
- color: var(--meep-fg-muted, #9da0a3);
556
- }
610
+
611
+ /*
612
+ A group's name, while an author is inside it. Sized to the text rather than to a form field: it
613
+ lives in a breadcrumb and has to read as part of one until it is being typed in.
614
+ */
615
+ .ui-particle-graph-editor .group-trail input.rename {
616
+ width: 11ch;
617
+ padding: 1px 4px;
618
+ border: 1px solid transparent;
619
+ border-radius: 3px;
620
+ background: transparent;
621
+ color: inherit;
622
+ font: inherit;
623
+ }
624
+
625
+ .ui-particle-graph-editor .group-trail input.rename:hover {
626
+ border-color: var(--meep-graph-node-border, #363c46);
627
+ }
628
+
629
+ .ui-particle-graph-editor .group-trail input.rename:focus {
630
+ outline: none;
631
+ border-color: var(--meep-accent, #2d7dd2);
632
+ background: var(--meep-graph-input-bg, #171b21);
633
+ }
634
+
635
+ /* a command that does not apply to what is selected; the title says why */
636
+ .toolbar-button.disabled {
637
+ opacity: 0.45;
638
+ cursor: default;
639
+ }
640
+
641
+ .toolbar-button.disabled:hover {
642
+ border-color: transparent;
643
+ color: var(--meep-fg-muted, #9da0a3);
644
+ }
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.16.0",
9
+ "version": "3.17.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -1,4 +1,29 @@
1
1
  export const ALLOCATOR_NO_SPACE: 4294967295;
2
+ /**
3
+ * One range handed out by {@link OffsetAllocator#allocate}: where it starts, plus the allocator's
4
+ * own handle on it. A caller keeps the whole object to give back to {@link OffsetAllocator#free},
5
+ * or keeps {@link Allocation#metadata} alone and releases it through
6
+ * {@link OffsetAllocator#free_node}.
7
+ *
8
+ * An {@link Allocation} whose `offset` is {@link ALLOCATOR_NO_SPACE} is a failed allocation, not a
9
+ * range at offset zero — the allocator is out of space, or out of nodes to describe one with.
10
+ */
11
+ export class Allocation {
12
+ /**
13
+ *
14
+ * @param {number} offset
15
+ * @param {number} metadata
16
+ * @return {Allocation}
17
+ */
18
+ static from(offset: number, metadata: number): Allocation;
19
+ /**
20
+ * @readonly
21
+ * @type {Allocation}
22
+ */
23
+ static readonly INVALID: Allocation;
24
+ offset: number;
25
+ metadata: number;
26
+ }
2
27
  /**
3
28
  * Fast hard realtime O(1) offset allocator with minimal fragmentation.
4
29
  *
@@ -106,22 +131,6 @@ export class OffsetAllocator {
106
131
  #private;
107
132
  }
108
133
  import { RowFirstTable } from "../../collection/table/RowFirstTable.js";
109
- declare class Allocation {
110
- /**
111
- *
112
- * @param {number} offset
113
- * @param {number} metadata
114
- * @return {Allocation}
115
- */
116
- static from(offset: number, metadata: number): Allocation;
117
- /**
118
- * @readonly
119
- * @type {Allocation}
120
- */
121
- static readonly INVALID: Allocation;
122
- offset: number;
123
- metadata: number;
124
- }
125
134
  declare class StorageReport {
126
135
  totalFreeSpace: number;
127
136
  largestFreeRegion: number;
@@ -1 +1 @@
1
- {"version":3,"file":"OffsetAllocator.d.ts","sourceRoot":"","sources":["../../../../../src/core/binary/allocator/OffsetAllocator.js"],"names":[],"mappings":"AAaA,4CAA6C;AAyF7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAwDI;;;;OAIG;IACH,kBAHW,MAAM,cACN,MAAM,EAYhB;IAtED;;;;OAIG;IACH,MAFU,MAAM,CAEP;IAET;;;;OAIG;IACH,WAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,UAFU,UAAU,CAEoB;IAExC;;;OAGG;IACH,YAFU,WAAW,CAEuB;IAE5C;;;OAGG;IACH,OAFU,aAAa,CAEmB;IAE1C;;OAEG;IACH,WAFU,WAAW,CAEX;IAEV;;;OAGG;IACH,YAFU,MAAM,CAED;IAmBf;;;;OAIG;IACH,eAHW,MAAM,GACJ,UAAU,CAkGtB;IAED;;;;;;;OAOG;IACH,sBAHW,MAAM,QAqFhB;IAED;;;OAGG;IACH,iBAHW,UAAU,QAUpB;IAqID;;OAEG;IACH,cA4BC;IAED;;;OAGG;IACH,iBAFY,aAAa,CA2BxB;;CACJ;8BAtlB6B,yCAAyC;AAgDvE;IAII;;;;;OAKG;IACH,oBAJW,MAAM,YACN,MAAM,GACL,UAAU,CASrB;IAED;;;OAGG;IACH,yBAFU,UAAU,CAEoE;IAtBxF,eAA4B;IAC5B,iBAA8B;CAsBjC;AAoBD;IACI,uBAAkB;IAClB,0BAAqB;CACxB"}
1
+ {"version":3,"file":"OffsetAllocator.d.ts","sourceRoot":"","sources":["../../../../../src/core/binary/allocator/OffsetAllocator.js"],"names":[],"mappings":"AAaA,4CAA6C;AAoC7C;;;;;;;;GAQG;AACH;IAII;;;;;OAKG;IACH,oBAJW,MAAM,YACN,MAAM,GACL,UAAU,CASrB;IAED;;;OAGG;IACH,yBAFU,UAAU,CAEoE;IAtBxF,eAA4B;IAC5B,iBAA8B;CAsBjC;AA6BD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH;IAwDI;;;;OAIG;IACH,kBAHW,MAAM,cACN,MAAM,EAYhB;IAtED;;;;OAIG;IACH,MAFU,MAAM,CAEP;IAET;;;;OAIG;IACH,WAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,UAFU,UAAU,CAEoB;IAExC;;;OAGG;IACH,YAFU,WAAW,CAEuB;IAE5C;;;OAGG;IACH,OAFU,aAAa,CAEmB;IAE1C;;OAEG;IACH,WAFU,WAAW,CAEX;IAEV;;;OAGG;IACH,YAFU,MAAM,CAED;IAmBf;;;;OAIG;IACH,eAHW,MAAM,GACJ,UAAU,CAkGtB;IAED;;;;;;;OAOG;IACH,sBAHW,MAAM,QAqFhB;IAED;;;OAGG;IACH,iBAHW,UAAU,QAUpB;IAqID;;OAEG;IACH,cA4BC;IAED;;;OAGG;IACH,iBAFY,aAAa,CA2BxB;;CACJ;8BA/lB6B,yCAAyC;AAqGvE;IACI,uBAAkB;IAClB,0BAAqB;CACxB"}
@@ -47,7 +47,16 @@ const NODE_FIELD_NEIGHBOR_PREV = 4;
47
47
  const NODE_FIELD_NEIGHBOR_NEXT = 5;
48
48
  const NODE_FIELD_FLAGS = 6;
49
49
 
50
- class Allocation {
50
+ /**
51
+ * One range handed out by {@link OffsetAllocator#allocate}: where it starts, plus the allocator's
52
+ * own handle on it. A caller keeps the whole object to give back to {@link OffsetAllocator#free},
53
+ * or keeps {@link Allocation#metadata} alone and releases it through
54
+ * {@link OffsetAllocator#free_node}.
55
+ *
56
+ * An {@link Allocation} whose `offset` is {@link ALLOCATOR_NO_SPACE} is a failed allocation, not a
57
+ * range at offset zero — the allocator is out of space, or out of nodes to describe one with.
58
+ */
59
+ export class Allocation {
51
60
  offset = ALLOCATOR_NO_SPACE;
52
61
  metadata = ALLOCATOR_NO_SPACE;
53
62
 
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Hash of a float32 range, in the terms `===` compares floats in — the counterpart to
3
+ * {@link uint32_array_hash} for arrays that hold values rather than words.
4
+ *
5
+ * The hash reads each element's raw IEEE-754 word, because a float carries distinctions no
6
+ * integer conversion keeps: `0.5` and `0.25` are different weights and truncate to the same
7
+ * integer. The one place where the bits say more than the value does is the sign of a zero, and
8
+ * there the bits are wrong for this purpose: `-0 === +0`, so anything hashing them apart would
9
+ * disagree with the equality it is meant to accompany. The zero is folded onto `+0`, and every
10
+ * other value keeps its exact bit pattern.
11
+ *
12
+ * A NaN hashes by its bits and so hashes equal to itself, which `===` does not — that direction
13
+ * is free, as unequal values are always allowed to collide.
14
+ *
15
+ * @param {Float32Array} array
16
+ * @param {number} offset first index to hash
17
+ * @param {number} length index to stop before, matching {@link uint32_array_hash}
18
+ * @return {number}
19
+ */
20
+ export function float32_array_hash(array: Float32Array, offset: number, length: number): number;
21
+ //# sourceMappingURL=float32_array_hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"float32_array_hash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/collection/array/typed/float32_array_hash.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,0CALW,YAAY,UACZ,MAAM,UACN,MAAM,GACL,MAAM,CAoBjB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Hash of a float32 range, in the terms `===` compares floats in — the counterpart to
3
+ * {@link uint32_array_hash} for arrays that hold values rather than words.
4
+ *
5
+ * The hash reads each element's raw IEEE-754 word, because a float carries distinctions no
6
+ * integer conversion keeps: `0.5` and `0.25` are different weights and truncate to the same
7
+ * integer. The one place where the bits say more than the value does is the sign of a zero, and
8
+ * there the bits are wrong for this purpose: `-0 === +0`, so anything hashing them apart would
9
+ * disagree with the equality it is meant to accompany. The zero is folded onto `+0`, and every
10
+ * other value keeps its exact bit pattern.
11
+ *
12
+ * A NaN hashes by its bits and so hashes equal to itself, which `===` does not — that direction
13
+ * is free, as unequal values are always allowed to collide.
14
+ *
15
+ * @param {Float32Array} array
16
+ * @param {number} offset first index to hash
17
+ * @param {number} length index to stop before, matching {@link uint32_array_hash}
18
+ * @return {number}
19
+ */
20
+ export function float32_array_hash(array, offset, length) {
21
+ // a Float32Array is 4-byte aligned by construction, so this view always exists
22
+ const bits = new Uint32Array(array.buffer, array.byteOffset, array.length);
23
+
24
+ let hash = length;
25
+
26
+ for (let i = offset; i < length; ++i) {
27
+
28
+ const value = array[i];
29
+
30
+ // `value === 0` is true for both zeroes and for nothing else
31
+ const word = value === 0 ? 0 : bits[i];
32
+
33
+ hash = ((hash << 5) - hash) + word;
34
+
35
+ }
36
+
37
+ return hash;
38
+ }
@@ -149,7 +149,14 @@ export class CSRGraph {
149
149
  */
150
150
  clone(): CSRGraph;
151
151
  /**
152
- * Structural equality — same shape and same buffer contents.
152
+ * Structural equality — same shape and same contents.
153
+ *
154
+ * The three integer arrays compare as words. `edge_weights` compares as floats, by value: a
155
+ * weight is a measurement, and every consumer of it — `sum_of_edge_weights`, the distance-field
156
+ * and shortest-path relaxations, metis partitioning — only ever adds or compares it, so `-0` and
157
+ * `+0` are one weight and no graph behaves differently for holding one rather than the other.
158
+ * {@link CSRGraph#hash} folds them together to match.
159
+ *
153
160
  * @param {CSRGraph} other
154
161
  * @returns {boolean}
155
162
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CSRGraph.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/csr/CSRGraph.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IAkQI;;;;;;;;;;;;;OAaG;IACH,gCAPW,MAAM,kBACN,UAAU,MAAM,CAAC,aACjB,UAAU,MAAM,CAAC,gBACjB,UAAU,MAAM,CAAC,mBACjB,UAAU,MAAM,CAAC,GACf,QAAQ,CAgBpB;IA7RD;;;;OAIG;IACH,0BAJW,MAAM,oBACN,MAAM,EAgEhB;IAzDG,qBAAqB;IACrB,cADW,MAAM,CACe;IAChC,qBAAqB;IACrB,kBADW,MAAM,CACuB;IAOxC;;;;OAIG;IACH,sBAA4D;IAI5D;;;;OAIG;IACH,gBAFU,WAAW,CAEmE;IAGxF;;;OAGG;IACH,WAFU,WAAW,CAE8D;IAGnF;;;;;OAKG;IACH,cAFU,YAAY,CAEiE;IAGvF;;;;;OAKG;IACH,gBAFU,WAAW,CAE+D;IAGpF;;;OAGG;IACH,qBAFU,MAAM,CAEuB;IAG3C;;;;OAIG;IACH,+BAEC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,uBAFa,MAAM,CAUlB;IAED;;OAEG;IACH,oCAQC;IAED;;;;;;;;;;;;;;;OAeG;IACH,yCAFW,MAAM,QA6ChB;IAED;;;;;;;;;OASG;IACH,YAFW,QAAQ,QASlB;IAED;;;OAGG;IACH,SAFa,QAAQ,CAMpB;IAED;;;;OAIG;IACH,cAHW,QAAQ,GACN,OAAO,CAyBnB;IAED;;;;;OAKG;IACH,QAFa,MAAM,CAiBlB;IAiCL;;;;;OAKG;IACH,qBAFU,OAAO,CAEY;CAR5B"}
1
+ {"version":3,"file":"CSRGraph.d.ts","sourceRoot":"","sources":["../../../../../src/core/graph/csr/CSRGraph.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH;IAyQI;;;;;;;;;;;;;OAaG;IACH,gCAPW,MAAM,kBACN,UAAU,MAAM,CAAC,aACjB,UAAU,MAAM,CAAC,gBACjB,UAAU,MAAM,CAAC,mBACjB,UAAU,MAAM,CAAC,GACf,QAAQ,CAgBpB;IApSD;;;;OAIG;IACH,0BAJW,MAAM,oBACN,MAAM,EAgEhB;IAzDG,qBAAqB;IACrB,cADW,MAAM,CACe;IAChC,qBAAqB;IACrB,kBADW,MAAM,CACuB;IAOxC;;;;OAIG;IACH,sBAA4D;IAI5D;;;;OAIG;IACH,gBAFU,WAAW,CAEmE;IAGxF;;;OAGG;IACH,WAFU,WAAW,CAE8D;IAGnF;;;;;OAKG;IACH,cAFU,YAAY,CAEiE;IAGvF;;;;;OAKG;IACH,gBAFU,WAAW,CAE+D;IAGpF;;;OAGG;IACH,qBAFU,MAAM,CAEuB;IAG3C;;;;OAIG;IACH,+BAEC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;OAIG;IACH,uBAFa,MAAM,CAUlB;IAED;;OAEG;IACH,oCAQC;IAED;;;;;;;;;;;;;;;OAeG;IACH,yCAFW,MAAM,QA6ChB;IAED;;;;;;;;;OASG;IACH,YAFW,QAAQ,QASlB;IAED;;;OAGG;IACH,SAFa,QAAQ,CAMpB;IAED;;;;;;;;;;;OAWG;IACH,cAHW,QAAQ,GACN,OAAO,CAyBnB;IAED;;;;;OAKG;IACH,QAFa,MAAM,CAiBlB;IAiCL;;;;;OAKG;IACH,qBAFU,OAAO,CAEY;CAR5B"}
@@ -1,4 +1,5 @@
1
1
  import { assert } from "../../assert.js";
2
+ import { float32_array_hash } from "../../collection/array/typed/float32_array_hash.js";
2
3
  import { is_typed_array_equals } from "../../collection/array/typed/is_typed_array_equals.js";
3
4
  import { uint32_array_hash } from "../../collection/array/typed/uint32_array_hash.js";
4
5
 
@@ -241,7 +242,14 @@ export class CSRGraph {
241
242
  }
242
243
 
243
244
  /**
244
- * Structural equality — same shape and same buffer contents.
245
+ * Structural equality — same shape and same contents.
246
+ *
247
+ * The three integer arrays compare as words. `edge_weights` compares as floats, by value: a
248
+ * weight is a measurement, and every consumer of it — `sum_of_edge_weights`, the distance-field
249
+ * and shortest-path relaxations, metis partitioning — only ever adds or compares it, so `-0` and
250
+ * `+0` are one weight and no graph behaves differently for holding one rather than the other.
251
+ * {@link CSRGraph#hash} folds them together to match.
252
+ *
245
253
  * @param {CSRGraph} other
246
254
  * @returns {boolean}
247
255
  */
@@ -284,11 +292,11 @@ export class CSRGraph {
284
292
  // adjacency_length); otherwise two logically-equal graphs with differently-sized buffers hash unequally.
285
293
  h = ((h << 5) - h) + uint32_array_hash(this.edge_addresses, 0, this.edge_addresses.length);
286
294
  h = ((h << 5) - h) + uint32_array_hash(this.adjacency, 0, this.adjacency.length);
287
- // edge_weights is float32; hash its raw IEEE-754 bit pattern via a uint32 view over the
288
- // exact same bytes (its own buffer/offset, which need not be __data_buffer if the view was
289
- // re-pointed) so fractional weights are distinguished and equal graphs hash equally.
290
- const edge_weight_bits = new Uint32Array(this.edge_weights.buffer, this.edge_weights.byteOffset, this.edge_weights.length);
291
- h = ((h << 5) - h) + uint32_array_hash(edge_weight_bits, 0, edge_weight_bits.length);
295
+ // edge_weights is float32, and `equals` compares it as float32 — by value, because a weight
296
+ // is a measurement. Hashing it must speak the same language: `float32_array_hash` keeps the
297
+ // bits that carry a value (so fractional weights stay distinct) and folds the one bit that
298
+ // does not, the sign of a zero, which `-0 === +0` makes invisible to `equals`.
299
+ h = ((h << 5) - h) + float32_array_hash(this.edge_weights, 0, this.edge_weights.length);
292
300
  h = ((h << 5) - h) + uint32_array_hash(this.vertex_weights, 0, this.vertex_weights.length);
293
301
  return h | 0;
294
302
  }
@@ -105,5 +105,29 @@ export class LayoutProblem {
105
105
  * @type {Uint8Array}
106
106
  */
107
107
  to_side: Uint8Array;
108
+ /**
109
+ * Link of {@link boxes} each connection became, or -1 for a connection from a node to itself.
110
+ *
111
+ * Only meaningful until the lanes go in: {@link layout_insert_lanes} rewrites the links, and
112
+ * what this indexes afterwards is the links as they were before it.
113
+ *
114
+ * @type {Int32Array}
115
+ */
116
+ link_of_connection: Int32Array;
117
+ /**
118
+ * Where each connection's lanes begin in {@link lane_box}. Length `connection_count + 1`, and
119
+ * all zero — no lanes at all — until placement has run: a graph being re-routed where it stands
120
+ * has no lanes, and its wires find their own way.
121
+ * @type {Int32Array}
122
+ */
123
+ lane_start: Int32Array;
124
+ /**
125
+ * Lane boxes, grouped by connection and in the order the wire passes through them: the lane in
126
+ * the column after the source first, the one before the target last. A wire is routed through
127
+ * its lanes, column by column, so this is what turns the placement's crossing-minimised order
128
+ * into the drawing rather than leaving the router to rediscover it.
129
+ * @type {Int32Array}
130
+ */
131
+ lane_box: Int32Array;
108
132
  }
109
133
  //# sourceMappingURL=LayoutProblem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutProblem.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/LayoutProblem.js"],"names":[],"mappings":"AAgHA;;;;;;;;;;;;GAYG;AACH,mCANW,MAAM,MACN,MAAM,SACN,MAAM,UACN,MAAM,GACJ,MAAM,CAiBlB;AA5ID;;;GAGG;AACH,+BAFU,MAAM,CAEkB;AAElC;;GAEG;AACH,gCAFU,MAAM,CAEmB;AAEnC;;GAEG;AACH,8BAFU,MAAM,CAEiB;AAEjC;;GAEG;AACH,iCAFU,MAAM,CAEoB;AAEpC;;;;;;;;;;;;;;;GAeG;AACH;IAEI;;OAEG;IACH,sBAAa;IAEb;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,aAFU,UAAU,CAED;IAEnB;;OAEG;IACH,kBAFU,MAAM,CAEK;IAErB;;OAEG;IACH,eAFU,UAAU,CAEC;IAErB;;;OAGG;IACH,UAFU,UAAU,CAEJ;IAEhB;;OAEG;IACH,QAFU,UAAU,CAEN;IAEd;;;;OAIG;IACH,SAFU,YAAY,CAEP;IAEf;;OAEG;IACH,SAFU,YAAY,CAEP;IAEf;;OAEG;IACH,OAFU,YAAY,CAET;IAEb;;OAEG;IACH,OAFU,YAAY,CAET;IAEb;;;OAGG;IACH,WAFU,UAAU,CAEH;IAEjB;;OAEG;IACH,SAFU,UAAU,CAEL;CAClB"}
1
+ {"version":3,"file":"LayoutProblem.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/LayoutProblem.js"],"names":[],"mappings":"AA2IA;;;;;;;;;;;;GAYG;AACH,mCANW,MAAM,MACN,MAAM,SACN,MAAM,UACN,MAAM,GACJ,MAAM,CAiBlB;AAvKD;;;GAGG;AACH,+BAFU,MAAM,CAEkB;AAElC;;GAEG;AACH,gCAFU,MAAM,CAEmB;AAEnC;;GAEG;AACH,8BAFU,MAAM,CAEiB;AAEjC;;GAEG;AACH,iCAFU,MAAM,CAEoB;AAEpC;;;;;;;;;;;;;;;GAeG;AACH;IAEI;;OAEG;IACH,sBAAa;IAEb;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,aAFU,UAAU,CAED;IAEnB;;OAEG;IACH,kBAFU,MAAM,CAEK;IAErB;;OAEG;IACH,eAFU,UAAU,CAEC;IAErB;;;OAGG;IACH,UAFU,UAAU,CAEJ;IAEhB;;OAEG;IACH,QAFU,UAAU,CAEN;IAEd;;;;OAIG;IACH,SAFU,YAAY,CAEP;IAEf;;OAEG;IACH,SAFU,YAAY,CAEP;IAEf;;OAEG;IACH,OAFU,YAAY,CAET;IAEb;;OAEG;IACH,OAFU,YAAY,CAET;IAEb;;;OAGG;IACH,WAFU,UAAU,CAEH;IAEjB;;OAEG;IACH,SAFU,UAAU,CAEL;IAEf;;;;;;;OAOG;IACH,oBAFU,UAAU,CAEM;IAE1B;;;;;OAKG;IACH,YAFU,UAAU,CAEF;IAElB;;;;;;OAMG;IACH,UAFU,UAAU,CAEJ;CACnB"}
@@ -108,6 +108,33 @@ export class LayoutProblem {
108
108
  * @type {Uint8Array}
109
109
  */
110
110
  to_side = null;
111
+
112
+ /**
113
+ * Link of {@link boxes} each connection became, or -1 for a connection from a node to itself.
114
+ *
115
+ * Only meaningful until the lanes go in: {@link layout_insert_lanes} rewrites the links, and
116
+ * what this indexes afterwards is the links as they were before it.
117
+ *
118
+ * @type {Int32Array}
119
+ */
120
+ link_of_connection = null;
121
+
122
+ /**
123
+ * Where each connection's lanes begin in {@link lane_box}. Length `connection_count + 1`, and
124
+ * all zero — no lanes at all — until placement has run: a graph being re-routed where it stands
125
+ * has no lanes, and its wires find their own way.
126
+ * @type {Int32Array}
127
+ */
128
+ lane_start = null;
129
+
130
+ /**
131
+ * Lane boxes, grouped by connection and in the order the wire passes through them: the lane in
132
+ * the column after the source first, the one before the target last. A wire is routed through
133
+ * its lanes, column by column, so this is what turns the placement's crossing-minimised order
134
+ * into the drawing rather than leaving the router to rediscover it.
135
+ * @type {Int32Array}
136
+ */
137
+ lane_box = null;
111
138
  }
112
139
 
113
140
  /**
@@ -71,6 +71,32 @@ export class NodeGraphLayoutOptions {
71
71
  * @type {number}
72
72
  */
73
73
  bend_penalty: number;
74
+ /**
75
+ * What crossing another wire costs the router, in the same units as length.
76
+ *
77
+ * A crossing is the one thing in a drawing that costs the reader more than a bend: following a
78
+ * wire through a corner is easy, following it through another wire means deciding which of the
79
+ * two lines leaving the crossing is the one being followed. So this is above the bend penalty,
80
+ * and a wire will go about half a channel out of its way to avoid one crossing — and any
81
+ * distance at all to avoid six, which is what the reader would otherwise get from a wire that
82
+ * had a route of the same length round the outside and no reason to take it.
83
+ *
84
+ * @type {number}
85
+ */
86
+ crossing_penalty: number;
87
+ /**
88
+ * Rounds of improvement after the negotiation has settled.
89
+ *
90
+ * Negotiation asks a wire to look again only when it is sharing a line, so a wire that was
91
+ * routed early — before most of what it now crosses existed — and shares nothing is never asked
92
+ * again. Each round here re-routes every wire in turn with all the others present, keeping the
93
+ * new route only where it is cheaper, and stops as soon as a round changes nothing. Cost can
94
+ * only fall, so this always settles; the number here is what bounds it on a graph where it is
95
+ * slow to.
96
+ *
97
+ * @type {number}
98
+ */
99
+ improvement_rounds: number;
74
100
  /**
75
101
  * Rounds of rip-up and reroute.
76
102
  *
@@ -1 +1 @@
1
- {"version":3,"file":"NodeGraphLayoutOptions.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;IAkJI;;;OAGG;IACH,wBAHW,QAAQ,sBAAsB,CAAC,GAC7B,sBAAsB,CAclC;IAhKD;;;;;;;OAOG;IACH,WAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,UAFU,MAAM,CAEF;IAEd;;;;;;;OAOG;IACH,UAFU,MAAM,CAEF;IAEd;;;;;;;;;;OAUG;IACH,WAFU,MAAM,CAED;IAEf;;;;;;;;OAQG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;;;;;;OASG;IACH,cAFU,MAAM,CAEE;IAElB;;;;;;;;;;;;;OAaG;IACH,uBAFU,MAAM,CAEU;IAE1B;;;;;;;;;OASG;IACH,cAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;;;;;OAQG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;;;OAOG;IACH,eAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;;;;OAQG;IACH,mBAFU,MAAM,CAEY;IAE5B;;;;;;;OAOG;IACH,sBAFU,MAAM,CAEc;CAmBjC"}
1
+ {"version":3,"file":"NodeGraphLayoutOptions.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH;IA8KI;;;OAGG;IACH,wBAHW,QAAQ,sBAAsB,CAAC,GAC7B,sBAAsB,CAclC;IA5LD;;;;;;;OAOG;IACH,WAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,UAFU,MAAM,CAEF;IAEd;;;;;;;OAOG;IACH,UAFU,MAAM,CAEF;IAEd;;;;;;;;;;OAUG;IACH,WAFU,MAAM,CAED;IAEf;;;;;;;;OAQG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;;;;;;OASG;IACH,cAFU,MAAM,CAEE;IAElB;;;;;;;;;;;OAWG;IACH,kBAFU,MAAM,CAEM;IAEtB;;;;;;;;;;;OAWG;IACH,oBAFU,MAAM,CAEO;IAEvB;;;;;;;;;;;;;OAaG;IACH,uBAFU,MAAM,CAEU;IAE1B;;;;;;;;;OASG;IACH,cAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;;;;;OAQG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;;;OAOG;IACH,eAFU,MAAM,CAEG;IAEnB;;;OAGG;IACH,cAFU,MAAM,CAEC;IAEjB;;;;;;;;OAQG;IACH,mBAFU,MAAM,CAEY;IAE5B;;;;;;;OAOG;IACH,sBAFU,MAAM,CAEc;CAmBjC"}
@@ -73,6 +73,34 @@ export class NodeGraphLayoutOptions {
73
73
  */
74
74
  bend_penalty = 40;
75
75
 
76
+ /**
77
+ * What crossing another wire costs the router, in the same units as length.
78
+ *
79
+ * A crossing is the one thing in a drawing that costs the reader more than a bend: following a
80
+ * wire through a corner is easy, following it through another wire means deciding which of the
81
+ * two lines leaving the crossing is the one being followed. So this is above the bend penalty,
82
+ * and a wire will go about half a channel out of its way to avoid one crossing — and any
83
+ * distance at all to avoid six, which is what the reader would otherwise get from a wire that
84
+ * had a route of the same length round the outside and no reason to take it.
85
+ *
86
+ * @type {number}
87
+ */
88
+ crossing_penalty = 60;
89
+
90
+ /**
91
+ * Rounds of improvement after the negotiation has settled.
92
+ *
93
+ * Negotiation asks a wire to look again only when it is sharing a line, so a wire that was
94
+ * routed early — before most of what it now crosses existed — and shares nothing is never asked
95
+ * again. Each round here re-routes every wire in turn with all the others present, keeping the
96
+ * new route only where it is cheaper, and stops as soon as a round changes nothing. Cost can
97
+ * only fall, so this always settles; the number here is what bounds it on a graph where it is
98
+ * slow to.
99
+ *
100
+ * @type {number}
101
+ */
102
+ improvement_rounds = 4;
103
+
76
104
  /**
77
105
  * Rounds of rip-up and reroute.
78
106
  *