@woosh/meep-engine 3.16.0 → 3.17.1
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.
- package/README.md +8 -72
- package/editor/particles/effect/ParticleEffectDocument.d.ts +21 -6
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
- package/editor/particles/effect/ParticleEffectDocument.js +38 -17
- package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
- package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
- package/editor/view/node-graph/NodeGraphEditorView.d.ts +59 -1
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +248 -5
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +84 -8
- package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
- package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
- package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleCodeEditorView.js +4 -3
- package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
- package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +27 -1
- package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
- package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +5 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleGraphEditorView.js +61 -31
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
- package/editor/view/particles/effect/ParticleNodeParametersView.js +33 -0
- package/editor/view/particles/effect/particle-editor.css +123 -35
- package/package.json +1 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +10 -1
- package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
- package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
- package/src/core/collection/array/typed/float32_array_hash.js +38 -0
- package/src/core/graph/csr/CSRGraph.d.ts +8 -1
- package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
- package/src/core/graph/csr/CSRGraph.js +14 -6
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +24 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/LayoutProblem.js +27 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +26 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +28 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +92 -3
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -242
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +50 -5
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/RouteSearch.js +160 -24
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +7 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/RouteSet.js +8 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +9 -3
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +7 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +9 -3
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +17 -3
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +9 -6
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +49 -7
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +11 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/layout_order_layers.js +135 -16
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/route_connections.js +716 -309
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +3 -2
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +7 -15
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +6 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/layout/route_nudge.js +42 -13
- package/src/engine/animation/AnimationUtils.js +246 -246
- package/src/engine/animation/Animations.js +74 -74
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2078
- package/src/engine/ecs/EventType.d.ts +0 -1
- package/src/engine/ecs/EventType.js +1 -26
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +3 -7
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +4 -9
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -364
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +8 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts +10 -7
- package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -1
- package/src/engine/ecs/transform/t64_announce_change.js +12 -12
- package/src/engine/ecs/transform/t64_set_rotation_axis_angle.d.ts +25 -0
- package/src/engine/ecs/transform/t64_set_rotation_axis_angle.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_set_rotation_axis_angle.js +45 -0
- package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
- package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +13 -21
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +4 -8
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +4 -8
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +9 -19
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +4 -8
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +4 -10
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +4 -8
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -218
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundListenerSystem.js +6 -8
- package/src/engine/sound/simulation/AcousticSimulator.d.ts +11 -8
- package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
- package/src/engine/sound/simulation/AcousticSimulator.js +45 -36
- package/src/engine/sound/simulation/README.md +2 -2
- package/src/engine/sound/simulation/core/OcclusionSolver.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/VolumeField.d.ts +9 -9
- package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/VolumeField.js +29 -13
- package/src/engine/sound/simulation/core/acoustic_occlusion_solve.d.ts +31 -0
- package/src/engine/sound/simulation/core/acoustic_occlusion_solve.d.ts.map +1 -0
- package/src/engine/sound/simulation/core/acoustic_occlusion_solve.js +134 -0
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +0 -4
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +5 -11
- package/src/shade/playground/particle_editor/README.md +43 -2
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +4 -5
- package/src/shade/playground/particle_system/particle_scene.js +4 -4
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +6 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +13 -1
- package/src/shade/renderer/particles/DESIGN.md +104 -19
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +64 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +176 -78
- package/src/shade/renderer/particles/ParticleConstants.d.ts +59 -23
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +66 -23
- package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
- package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
- package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -166
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +3 -3
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -303
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +18 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -133
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +0 -11
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -621
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +8 -3
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -213
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +6 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -319
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -517
- package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -159
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/make_particle_group.js +2 -20
- package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
- package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +28 -8
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -25
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +40 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -234
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +59 -3
- package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
- package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +7 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +66 -10
- package/src/shade/renderer/particles/graph_particles.d.ts +23 -69
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +105 -262
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +3 -2
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
- package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +51 -22
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +98 -38
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +49 -8
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +95 -150
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +306 -64
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +505 -136
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +36 -12
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/particle_assembly.js +354 -139
- package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +23 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +68 -0
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +81 -42
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -478
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +139 -59
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -647
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +40 -7
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -213
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +30 -3
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -223
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +24 -38
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -206
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +3 -2
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -197
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +19 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -561
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -72
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -86
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -271
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -268
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -151
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +20 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -1
- package/src/shade/renderer/particles/particle_test_fixtures.js +229 -203
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +99 -25
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +438 -286
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +87 -102
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +184 -163
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
- package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
- package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +5 -2
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -19
- package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -9
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +20 -80
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +33 -101
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
- package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
- package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +4 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +261 -140
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +217 -255
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
- package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +7 -0
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +7 -0
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +49 -10
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +4 -9
- package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
- package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
- package/src/engine/ecs/transform/__probe.d.ts +0 -4
- package/src/engine/ecs/transform/__probe.d.ts.map +0 -1
- package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
- package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
- package/src/engine/sound/simulation/core/OcclusionSolver.js +0 -112
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +0 -27
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +0 -1
- package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
- package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/Emitter.d.ts +0 -219
- package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -77
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +0 -89
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -155
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +0 -15
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -32
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Everything the GPU side knows about one {@link ./ParticleEmitter.js} that the emitter itself has
|
|
3
|
+
* no business knowing.
|
|
4
|
+
*
|
|
5
|
+
* An emitter is a scene node and a description of an effect: what to run, how fast, how big, which
|
|
6
|
+
* attribute is the colour. None of that depends on a device. The rest — which row of the emitter
|
|
7
|
+
* table it was given, which tenancy of that row it is, where its program was placed in the program
|
|
8
|
+
* heap, which `transforms` row its node ended up in, where its texture was packed into the atlas —
|
|
9
|
+
* is the particle system's bookkeeping, true only while the emitter is registered and only for the
|
|
10
|
+
* registry that registered it. Kept on the emitter it would travel with a saved effect, mean
|
|
11
|
+
* nothing when loaded, and be there for an author to set to a number the table has never heard of.
|
|
12
|
+
*
|
|
13
|
+
* So it lives here, in an object the registry owns and hands out ({@link ./EmitterRegistry.js#context}),
|
|
14
|
+
* and an emitter that no registry holds simply has none. That is also what makes "is this emitter
|
|
15
|
+
* live?" a question with one answer — the presence of a context — rather than a `row` of `-1` that
|
|
16
|
+
* anything could have written.
|
|
17
|
+
*
|
|
18
|
+
* Fields are set by the registry. Reading them is what a caller wants (the spawn ring addresses an
|
|
19
|
+
* emitter by row, a spec reads the generation a particle header should carry); writing them outside
|
|
20
|
+
* of {@link ./EmitterRegistry.js} desynchronises the context from the table it describes.
|
|
21
|
+
*/
|
|
22
|
+
export class GPUParticleEmitterContext {
|
|
23
|
+
/**
|
|
24
|
+
* Row this emitter occupies in the emitter table. Stable for as long as the emitter is
|
|
25
|
+
* registered — it is what every live particle's record header stores, so it cannot be
|
|
26
|
+
* renumbered while particles are in flight.
|
|
27
|
+
*
|
|
28
|
+
* Not to be confused with {@link ./ParticleEmitter.js Node3D#id}, which is the node's own
|
|
29
|
+
* identity and the key the scene context maps to a `transforms` row.
|
|
30
|
+
*
|
|
31
|
+
* @type {number}
|
|
32
|
+
*/
|
|
33
|
+
row: number;
|
|
34
|
+
/**
|
|
35
|
+
* Which tenancy of {@link row} this is. Distinct from every other the registry has ever handed
|
|
36
|
+
* out, and never zero. Stamped into every particle the emitter spawns, and what lets the
|
|
37
|
+
* simulate pass tell those particles from a later tenant's.
|
|
38
|
+
*
|
|
39
|
+
* @type {number}
|
|
40
|
+
*/
|
|
41
|
+
generation: number;
|
|
42
|
+
/**
|
|
43
|
+
* Row of the scene database's `transforms` table the emitter's node occupies, as the scene
|
|
44
|
+
* context reported it — what the record's `node` field carries. `0` (the scene root) until
|
|
45
|
+
* bound, so an emitter registered before its node is placed still reads a valid row.
|
|
46
|
+
*
|
|
47
|
+
* @type {number}
|
|
48
|
+
*/
|
|
49
|
+
transform_row: number;
|
|
50
|
+
/**
|
|
51
|
+
* Where this emitter's program sits in the shared {@link ./ProgramHeap.js}, and the program id
|
|
52
|
+
* the simulation-order bucketing keys on. Emitters compiled from the same graph hold the same
|
|
53
|
+
* object — which is also why it is held rather than copied out: the heap rewrites its offsets in
|
|
54
|
+
* place when it moves the program.
|
|
55
|
+
*
|
|
56
|
+
* @type {import("./ProgramPlacement.js").ProgramPlacement|null}
|
|
57
|
+
*/
|
|
58
|
+
placement: import("./ProgramPlacement.js").ProgramPlacement | null;
|
|
59
|
+
/**
|
|
60
|
+
* Where {@link ./ParticleEmitter.js#texture} landed in the particle system's atlas: uv offset
|
|
61
|
+
* `.xy`, uv scale `.zw`. Mirrors meep's `AtlasPatch`.
|
|
62
|
+
*
|
|
63
|
+
* Resolved, never authored. The emitter names an image; which sheet it is packed into and where
|
|
64
|
+
* is the system's answer, and it changes without the emitter changing — a repack moves every
|
|
65
|
+
* patch. `[0, 0, 1, 1]` is the whole sheet, which is what an emitter with no texture of its own
|
|
66
|
+
* gets: the default atlas is a single white texel.
|
|
67
|
+
*
|
|
68
|
+
* @type {Float32Array}
|
|
69
|
+
*/
|
|
70
|
+
atlas_region: Float32Array;
|
|
71
|
+
/**
|
|
72
|
+
* The emitter's {@link ../../scene/Node3D.js Node3D#version} as of the last time its row was
|
|
73
|
+
* staged, or `-1` for a row that must be restaged whatever the emitter says.
|
|
74
|
+
*
|
|
75
|
+
* This is the whole of the dirty tracking: {@link ./EmitterRegistry.js#flush} restages an
|
|
76
|
+
* emitter whose version has moved since. A node already counts its own changes for the
|
|
77
|
+
* renderer, and a second flag on the emitter saying the same thing would be one more thing to
|
|
78
|
+
* forget to set — so the emitter carries none, and an author who changes a field marks it the
|
|
79
|
+
* way they mark any node change, with `needsUpdate = true`.
|
|
80
|
+
*
|
|
81
|
+
* The version is the node's, so it also moves when the node merely moves, and the row is
|
|
82
|
+
* restaged for a change it does not hold. That costs one row: an emitter that moved is an
|
|
83
|
+
* emitter whose `transforms` row the scene context is uploading this frame anyway.
|
|
84
|
+
*
|
|
85
|
+
* A version of `-1` is unreachable for a node — the counter starts at 0 and only rises — so it
|
|
86
|
+
* is safe as the "not staged" sentinel, and it is what the fields above are set back to when
|
|
87
|
+
* one of *them* changes, since those move without the emitter moving.
|
|
88
|
+
*
|
|
89
|
+
* @type {number}
|
|
90
|
+
*/
|
|
91
|
+
staged_version: number;
|
|
92
|
+
/**
|
|
93
|
+
* @param {import("./ParticleEmitter.js").ParticleEmitter} emitter the emitter this describes
|
|
94
|
+
* @returns {boolean} whether the table row is out of step with `emitter`
|
|
95
|
+
*/
|
|
96
|
+
is_stale(emitter: import("./ParticleEmitter.js").ParticleEmitter): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Mark the row as needing to be restaged on the next flush, for a change the emitter's version
|
|
99
|
+
* does not record — one of this context's own fields.
|
|
100
|
+
*/
|
|
101
|
+
invalidate(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Record that the table row now holds `emitter` as it currently is.
|
|
104
|
+
*
|
|
105
|
+
* @param {import("./ParticleEmitter.js").ParticleEmitter} emitter
|
|
106
|
+
*/
|
|
107
|
+
staged(emitter: import("./ParticleEmitter.js").ParticleEmitter): void;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=GPUParticleEmitterContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GPUParticleEmitterContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAEI;;;;;;;;;OASG;IACH,KAFU,MAAM,CAEP;IAET;;;;;;OAMG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;OAMG;IACH,eAFU,MAAM,CAEE;IAElB;;;;;;;OAOG;IACH,WAFU,OAAO,uBAAuB,EAAE,gBAAgB,GAAC,IAAI,CAE9C;IAEjB;;;;;;;;;;OAUG;IACH,cAFU,YAAY,CAEwB;IAE9C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,gBAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,kBAHW,OAAO,sBAAsB,EAAE,eAAe,GAC5C,OAAO,CAInB;IAED;;;OAGG;IACH,mBAEC;IAED;;;;OAIG;IACH,gBAFW,OAAO,sBAAsB,EAAE,eAAe,QAMxD;CACJ"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Everything the GPU side knows about one {@link ./ParticleEmitter.js} that the emitter itself has
|
|
5
|
+
* no business knowing.
|
|
6
|
+
*
|
|
7
|
+
* An emitter is a scene node and a description of an effect: what to run, how fast, how big, which
|
|
8
|
+
* attribute is the colour. None of that depends on a device. The rest — which row of the emitter
|
|
9
|
+
* table it was given, which tenancy of that row it is, where its program was placed in the program
|
|
10
|
+
* heap, which `transforms` row its node ended up in, where its texture was packed into the atlas —
|
|
11
|
+
* is the particle system's bookkeeping, true only while the emitter is registered and only for the
|
|
12
|
+
* registry that registered it. Kept on the emitter it would travel with a saved effect, mean
|
|
13
|
+
* nothing when loaded, and be there for an author to set to a number the table has never heard of.
|
|
14
|
+
*
|
|
15
|
+
* So it lives here, in an object the registry owns and hands out ({@link ./EmitterRegistry.js#context}),
|
|
16
|
+
* and an emitter that no registry holds simply has none. That is also what makes "is this emitter
|
|
17
|
+
* live?" a question with one answer — the presence of a context — rather than a `row` of `-1` that
|
|
18
|
+
* anything could have written.
|
|
19
|
+
*
|
|
20
|
+
* Fields are set by the registry. Reading them is what a caller wants (the spawn ring addresses an
|
|
21
|
+
* emitter by row, a spec reads the generation a particle header should carry); writing them outside
|
|
22
|
+
* of {@link ./EmitterRegistry.js} desynchronises the context from the table it describes.
|
|
23
|
+
*/
|
|
24
|
+
export class GPUParticleEmitterContext {
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Row this emitter occupies in the emitter table. Stable for as long as the emitter is
|
|
28
|
+
* registered — it is what every live particle's record header stores, so it cannot be
|
|
29
|
+
* renumbered while particles are in flight.
|
|
30
|
+
*
|
|
31
|
+
* Not to be confused with {@link ./ParticleEmitter.js Node3D#id}, which is the node's own
|
|
32
|
+
* identity and the key the scene context maps to a `transforms` row.
|
|
33
|
+
*
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
row = -1;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Which tenancy of {@link row} this is. Distinct from every other the registry has ever handed
|
|
40
|
+
* out, and never zero. Stamped into every particle the emitter spawns, and what lets the
|
|
41
|
+
* simulate pass tell those particles from a later tenant's.
|
|
42
|
+
*
|
|
43
|
+
* @type {number}
|
|
44
|
+
*/
|
|
45
|
+
generation = 0;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Row of the scene database's `transforms` table the emitter's node occupies, as the scene
|
|
49
|
+
* context reported it — what the record's `node` field carries. `0` (the scene root) until
|
|
50
|
+
* bound, so an emitter registered before its node is placed still reads a valid row.
|
|
51
|
+
*
|
|
52
|
+
* @type {number}
|
|
53
|
+
*/
|
|
54
|
+
transform_row = 0;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Where this emitter's program sits in the shared {@link ./ProgramHeap.js}, and the program id
|
|
58
|
+
* the simulation-order bucketing keys on. Emitters compiled from the same graph hold the same
|
|
59
|
+
* object — which is also why it is held rather than copied out: the heap rewrites its offsets in
|
|
60
|
+
* place when it moves the program.
|
|
61
|
+
*
|
|
62
|
+
* @type {import("./ProgramPlacement.js").ProgramPlacement|null}
|
|
63
|
+
*/
|
|
64
|
+
placement = null;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Where {@link ./ParticleEmitter.js#texture} landed in the particle system's atlas: uv offset
|
|
68
|
+
* `.xy`, uv scale `.zw`. Mirrors meep's `AtlasPatch`.
|
|
69
|
+
*
|
|
70
|
+
* Resolved, never authored. The emitter names an image; which sheet it is packed into and where
|
|
71
|
+
* is the system's answer, and it changes without the emitter changing — a repack moves every
|
|
72
|
+
* patch. `[0, 0, 1, 1]` is the whole sheet, which is what an emitter with no texture of its own
|
|
73
|
+
* gets: the default atlas is a single white texel.
|
|
74
|
+
*
|
|
75
|
+
* @type {Float32Array}
|
|
76
|
+
*/
|
|
77
|
+
atlas_region = new Float32Array([0, 0, 1, 1]);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The emitter's {@link ../../scene/Node3D.js Node3D#version} as of the last time its row was
|
|
81
|
+
* staged, or `-1` for a row that must be restaged whatever the emitter says.
|
|
82
|
+
*
|
|
83
|
+
* This is the whole of the dirty tracking: {@link ./EmitterRegistry.js#flush} restages an
|
|
84
|
+
* emitter whose version has moved since. A node already counts its own changes for the
|
|
85
|
+
* renderer, and a second flag on the emitter saying the same thing would be one more thing to
|
|
86
|
+
* forget to set — so the emitter carries none, and an author who changes a field marks it the
|
|
87
|
+
* way they mark any node change, with `needsUpdate = true`.
|
|
88
|
+
*
|
|
89
|
+
* The version is the node's, so it also moves when the node merely moves, and the row is
|
|
90
|
+
* restaged for a change it does not hold. That costs one row: an emitter that moved is an
|
|
91
|
+
* emitter whose `transforms` row the scene context is uploading this frame anyway.
|
|
92
|
+
*
|
|
93
|
+
* A version of `-1` is unreachable for a node — the counter starts at 0 and only rises — so it
|
|
94
|
+
* is safe as the "not staged" sentinel, and it is what the fields above are set back to when
|
|
95
|
+
* one of *them* changes, since those move without the emitter moving.
|
|
96
|
+
*
|
|
97
|
+
* @type {number}
|
|
98
|
+
*/
|
|
99
|
+
staged_version = -1;
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @param {import("./ParticleEmitter.js").ParticleEmitter} emitter the emitter this describes
|
|
103
|
+
* @returns {boolean} whether the table row is out of step with `emitter`
|
|
104
|
+
*/
|
|
105
|
+
is_stale(emitter) {
|
|
106
|
+
return this.staged_version !== emitter.version;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Mark the row as needing to be restaged on the next flush, for a change the emitter's version
|
|
111
|
+
* does not record — one of this context's own fields.
|
|
112
|
+
*/
|
|
113
|
+
invalidate() {
|
|
114
|
+
this.staged_version = -1;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Record that the table row now holds `emitter` as it currently is.
|
|
119
|
+
*
|
|
120
|
+
* @param {import("./ParticleEmitter.js").ParticleEmitter} emitter
|
|
121
|
+
*/
|
|
122
|
+
staged(emitter) {
|
|
123
|
+
assert.defined(emitter, 'emitter');
|
|
124
|
+
|
|
125
|
+
this.staged_version = emitter.version;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* An empty staging record with every field of {@link ../data/PARTICLE_EMITTER_STRUCT.js} present,
|
|
3
|
-
* typed arrays for the vector fields so {@link ParticleEmitter#write_record} can copy into them.
|
|
4
|
-
*
|
|
5
|
-
* @returns {object}
|
|
6
|
-
*/
|
|
7
|
-
export function create_emitter_record(): object;
|
|
8
1
|
/**
|
|
9
2
|
* Render channels an emitter can bind to one of its effect's per-particle attributes. The names
|
|
10
3
|
* match the `render_*` fields of {@link ../data/PARTICLE_EMITTER_STRUCT.js}.
|
|
@@ -38,47 +31,55 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS: {
|
|
|
38
31
|
* particles, within a frame, because the emitter's table row is retired with it and its particles
|
|
39
32
|
* carry that row's generation. There is no transform of its own to keep in step with anything.
|
|
40
33
|
*
|
|
41
|
-
* The rest is
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* between the two. Fields are plain data with no setters — after changing any of them, set
|
|
46
|
-
* {@link dirty} so {@link ./EmitterRegistry.js} restages the row on its next flush. A flag rather
|
|
47
|
-
* than a setter per field because a row is restaged whole either way: one changed field and ten
|
|
48
|
-
* cost the same upload.
|
|
34
|
+
* The rest is a description of an effect and nothing else: the attribute {@link layout} and the
|
|
35
|
+
* compiled {@link program}, the {@link texture} to draw with, spawn rate, blend / projection /
|
|
36
|
+
* feature flags, bounds sphere, render-attribute bindings and flipbook grid. Every one of those is
|
|
37
|
+
* the author's, means the same thing with no device present, and is what a saved effect is made of.
|
|
49
38
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
39
|
+
* **Nothing here is the GPU's.** Which table row the emitter was given, which tenancy of it, where
|
|
40
|
+
* its program was placed in the program heap, which `transforms` row its node ended up in, where
|
|
41
|
+
* its texture was packed into the atlas — all of that is
|
|
42
|
+
* {@link ./GPUParticleEmitterContext.js GPUParticleEmitterContext}, held by the
|
|
43
|
+
* {@link ./EmitterRegistry.js} that registered the emitter and reachable through
|
|
44
|
+
* {@link ./EmitterRegistry.js#context}. An emitter no registry holds has none, which is also how
|
|
45
|
+
* "is this emitter live?" is asked. Nor is anything the GPU integrates per frame here — spawn
|
|
46
|
+
* accumulator, age, sleep are {@link ../data/PARTICLE_EMITTER_STATE.js}, and they stay on the GPU.
|
|
52
47
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
48
|
+
* Fields are plain data with no setters. After changing any of them, set `needsUpdate = true` — the
|
|
49
|
+
* node's own change counter, the same one the renderer reads to decide whether a transform needs
|
|
50
|
+
* re-uploading — and {@link ./EmitterRegistry.js#flush} restages the row on its next flush. One
|
|
51
|
+
* counter rather than a setter per field because a row is restaged whole either way: one changed
|
|
52
|
+
* field and ten cost the same upload.
|
|
56
53
|
*/
|
|
57
54
|
export class ParticleEmitter extends Node3D {
|
|
58
55
|
/**
|
|
59
|
-
* Build an emitter from a plain description. Every parameter is optional except the
|
|
60
|
-
* an emitter with no program has nothing to run.
|
|
56
|
+
* Build an emitter from a plain description. Every parameter is optional except the compiled
|
|
57
|
+
* effect — an emitter with no program has nothing to run.
|
|
58
|
+
*
|
|
59
|
+
* `layout` and `program` are the two halves of what {@link ./create_particle_effect.js} returns,
|
|
60
|
+
* so an effect goes in by spreading it: `ParticleEmitter.from({ ...effect, spawn_rate: 100 })`.
|
|
61
61
|
*
|
|
62
62
|
* @param {object} config
|
|
63
|
-
* @param {
|
|
64
|
-
*
|
|
63
|
+
* @param {import("../layout/ParticleLayout.js").ParticleLayout} config.layout per-particle
|
|
64
|
+
* attribute schema
|
|
65
|
+
* @param {import("../isa/ParticleProgram.js").ParticleProgram} config.program compiled INIT /
|
|
66
|
+
* UPDATE bytecode
|
|
65
67
|
* @param {ArrayLike<number>} [config.position] local translation, `[x, y, z]`
|
|
68
|
+
* @param {string|null} [config.texture] image URL to draw with
|
|
66
69
|
* @param {number} [config.seed]
|
|
67
70
|
* @param {number} [config.spawn_rate] particles/second
|
|
68
71
|
* @param {object} [config.flags] passed to {@link make_emitter_flags}
|
|
69
72
|
* @param {{center?: ArrayLike<number>, radius?: number}} [config.bounds]
|
|
70
73
|
* @param {Object<string,string>} [config.render] render channel -> attribute name
|
|
71
|
-
* @param {ArrayLike<number>} [config.atlas_region] [uvOffsetX, uvOffsetY, uvScaleX, uvScaleY]
|
|
72
74
|
* @param {ArrayLike<number>} [config.flipbook] [cols, rows]
|
|
73
75
|
* @param {string} [config.name]
|
|
74
76
|
* @returns {ParticleEmitter}
|
|
75
77
|
*/
|
|
76
78
|
static from(config: {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
program: object;
|
|
80
|
-
};
|
|
79
|
+
layout: import("../layout/ParticleLayout.js").ParticleLayout;
|
|
80
|
+
program: import("../isa/ParticleProgram.js").ParticleProgram;
|
|
81
81
|
position?: ArrayLike<number>;
|
|
82
|
+
texture?: string | null;
|
|
82
83
|
seed?: number;
|
|
83
84
|
spawn_rate?: number;
|
|
84
85
|
flags?: object;
|
|
@@ -89,67 +90,41 @@ export class ParticleEmitter extends Node3D {
|
|
|
89
90
|
render?: {
|
|
90
91
|
[x: string]: string;
|
|
91
92
|
};
|
|
92
|
-
atlas_region?: ArrayLike<number>;
|
|
93
93
|
flipbook?: ArrayLike<number>;
|
|
94
94
|
name?: string;
|
|
95
95
|
}): ParticleEmitter;
|
|
96
96
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* are in flight. `-1` until the registry assigns one.
|
|
97
|
+
* The per-particle attribute schema: which named attributes a particle of this emitter has, how
|
|
98
|
+
* wide each is, and what word of the record it sits at.
|
|
100
99
|
*
|
|
101
|
-
*
|
|
102
|
-
* scene context maps to a `transforms` row.
|
|
103
|
-
*
|
|
104
|
-
* @type {number}
|
|
100
|
+
* @type {import("../layout/ParticleLayout.js").ParticleLayout}
|
|
105
101
|
*/
|
|
106
|
-
|
|
102
|
+
layout: import("../layout/ParticleLayout.js").ParticleLayout;
|
|
107
103
|
/**
|
|
108
|
-
*
|
|
109
|
-
* other emitter it has ever assigned, never zero. Stamped into every particle the emitter
|
|
110
|
-
* spawns, and what lets the simulate pass tell those particles from a later tenant's.
|
|
104
|
+
* The compiled INIT/UPDATE bytecode run for every particle of this emitter.
|
|
111
105
|
*
|
|
112
|
-
* @type {
|
|
106
|
+
* @type {import("../isa/ParticleProgram.js").ParticleProgram}
|
|
113
107
|
*/
|
|
114
|
-
|
|
108
|
+
program: import("../isa/ParticleProgram.js").ParticleProgram;
|
|
115
109
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* an emitter that is registered before its node is placed still reads a valid row.
|
|
110
|
+
* Image to draw the particles with, by URL, or `null` to draw against the default atlas — a
|
|
111
|
+
* single white texel, so an untextured emitter is a flat quad of its colour.
|
|
119
112
|
*
|
|
120
|
-
*
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
*
|
|
113
|
+
* A URL rather than a texture, and no uv rect: the particle system packs every emitter's image
|
|
114
|
+
* into one sheet so that a hundred effects sharing a puff of smoke pay for one image, and where
|
|
115
|
+
* a given image lands in that sheet is the system's answer, not the author's — it changes on
|
|
116
|
+
* every repack, without the emitter changing. The resolved patch is
|
|
117
|
+
* {@link ./GPUParticleEmitterContext.js#atlas_region}.
|
|
125
118
|
*
|
|
126
|
-
* @type {
|
|
119
|
+
* @type {string|null}
|
|
127
120
|
*/
|
|
128
|
-
|
|
129
|
-
layout: import("../layout/ParticleLayout.js").ParticleLayout;
|
|
130
|
-
program: import("../isa/ParticleProgram.js").ParticleProgram;
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* Where this emitter's program sits in the shared arena, and the dense program id the
|
|
134
|
-
* simulation-order bucketing keys on. Assigned by {@link EmitterRegistry#add} from
|
|
135
|
-
* {@link ../runtime/ProgramArena.js}; emitters compiled from the same graph share one.
|
|
136
|
-
*
|
|
137
|
-
* @type {{init_offset: number, init_count: number, update_offset: number, update_count: number, constant_offset: number, program_id: number}}
|
|
138
|
-
*/
|
|
139
|
-
placement: {
|
|
140
|
-
init_offset: number;
|
|
141
|
-
init_count: number;
|
|
142
|
-
update_offset: number;
|
|
143
|
-
update_count: number;
|
|
144
|
-
constant_offset: number;
|
|
145
|
-
program_id: number;
|
|
146
|
-
};
|
|
121
|
+
texture: string | null;
|
|
147
122
|
/**
|
|
148
123
|
* Base RNG seed.
|
|
149
124
|
*
|
|
150
|
-
* Two emitters running one program produce identical particles from identical seeds
|
|
151
|
-
*
|
|
152
|
-
*
|
|
125
|
+
* Two emitters running one program produce identical particles from identical seeds. `0` reads
|
|
126
|
+
* as "unset", and the row written for such an emitter takes its registration's generation
|
|
127
|
+
* instead, which no other emitter of that registry shares.
|
|
153
128
|
*
|
|
154
129
|
* @type {number}
|
|
155
130
|
*/
|
|
@@ -186,12 +161,8 @@ export class ParticleEmitter extends Node3D {
|
|
|
186
161
|
*/
|
|
187
162
|
bounds_radius: number;
|
|
188
163
|
/**
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
*/
|
|
192
|
-
atlas_region: Float32Array;
|
|
193
|
-
/**
|
|
194
|
-
* Flipbook grid: columns, rows. `[1, 1]` is a single frame.
|
|
164
|
+
* Flipbook grid: columns, rows, over whatever region {@link texture} was packed into. `[1, 1]`
|
|
165
|
+
* is a single frame.
|
|
195
166
|
* @type {Float32Array}
|
|
196
167
|
*/
|
|
197
168
|
flipbook: Float32Array;
|
|
@@ -207,13 +178,6 @@ export class ParticleEmitter extends Node3D {
|
|
|
207
178
|
render_frame: number;
|
|
208
179
|
/** @type {number} record word offset of velocity, read by the STRETCHED projection */
|
|
209
180
|
render_velocity: number;
|
|
210
|
-
/**
|
|
211
|
-
* Whether the table row is out of step with the fields above. Set it after changing anything;
|
|
212
|
-
* {@link EmitterRegistry#flush} clears it once the row has been staged for upload.
|
|
213
|
-
*
|
|
214
|
-
* @type {boolean}
|
|
215
|
-
*/
|
|
216
|
-
dirty: boolean;
|
|
217
181
|
get type(): string;
|
|
218
182
|
/**
|
|
219
183
|
* Bind render channels to per-particle attributes of this emitter's effect, by attribute name.
|
|
@@ -232,28 +196,49 @@ export class ParticleEmitter extends Node3D {
|
|
|
232
196
|
[x: string]: string;
|
|
233
197
|
}): void;
|
|
234
198
|
/**
|
|
235
|
-
*
|
|
236
|
-
*
|
|
199
|
+
* Structural equality over everything an emitter *is*: where it sits, what it runs, what it
|
|
200
|
+
* draws with, and how it is bound to the renderer. Two emitters that compare equal describe one
|
|
201
|
+
* effect in one place, and one row would serve both.
|
|
237
202
|
*
|
|
238
|
-
*
|
|
239
|
-
*
|
|
240
|
-
*
|
|
203
|
+
* The node's identity is not part of it — `id`, parent and children say where an emitter is in
|
|
204
|
+
* a scene, not what it is — and neither is anything the GPU assigned it, which is not here to
|
|
205
|
+
* be compared. {@link transform_global} is left out too, being derived from
|
|
206
|
+
* {@link transform_local} and the parent chain.
|
|
241
207
|
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
|
|
208
|
+
* @param {ParticleEmitter} other
|
|
209
|
+
* @returns {boolean}
|
|
210
|
+
*/
|
|
211
|
+
equals(other: ParticleEmitter): boolean;
|
|
212
|
+
/**
|
|
213
|
+
* Hash over everything {@link equals} compares, in the same terms — the compiled program hashes
|
|
214
|
+
* by its own bytecode rather than by object identity, so two emitters separately compiled from
|
|
215
|
+
* one graph hash equally, as they compare equally.
|
|
216
|
+
*
|
|
217
|
+
* @returns {number} int32
|
|
218
|
+
*/
|
|
219
|
+
hash(): number;
|
|
220
|
+
/**
|
|
221
|
+
* Make this emitter a copy of `other`: same effect, same settings, same placement.
|
|
222
|
+
*
|
|
223
|
+
* The layout and the compiled program are shared rather than duplicated — both are immutable
|
|
224
|
+
* once compiled, and sharing them is what puts two emitters of one effect on one program id in
|
|
225
|
+
* the program heap, hence in one simulation bucket.
|
|
245
226
|
*
|
|
246
|
-
*
|
|
247
|
-
*
|
|
227
|
+
* What is not copied is the node's identity and its place in a scene ({@link Node3D#id},
|
|
228
|
+
* parent, children), and anything a registry gave the original: a copy is a second emitter, not
|
|
229
|
+
* a second reference to the first one's table row.
|
|
230
|
+
*
|
|
231
|
+
* @param {ParticleEmitter} other
|
|
248
232
|
*/
|
|
249
|
-
|
|
233
|
+
copy(other: ParticleEmitter): void;
|
|
250
234
|
/**
|
|
251
|
-
*
|
|
252
|
-
*
|
|
235
|
+
* A second emitter equal to this one, and registered with nothing. Its subtree is cloned the
|
|
236
|
+
* way {@link Node3D#clone} clones one — overridden only because the base builds a plain
|
|
237
|
+
* `Node3D`, which would keep the transform and drop the effect.
|
|
253
238
|
*
|
|
254
|
-
* @returns {
|
|
239
|
+
* @returns {ParticleEmitter}
|
|
255
240
|
*/
|
|
256
|
-
|
|
241
|
+
clone(): ParticleEmitter;
|
|
257
242
|
/**
|
|
258
243
|
* @readonly
|
|
259
244
|
* @type {boolean}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleEmitter.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticleEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleEmitter.js"],"names":[],"mappings":"AAUA;;;;;GAKG;AACH,sCAFU,MAAM,EAAE,CAIf;AAEH;;;;;;;;;;;;GAYG;AACH;QAFiB,MAAM,GAAE,MAAM;EAS5B;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH;IA+QI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH;QAfwE,MAAM,EAAnE,OAAO,6BAA6B,EAAE,cAAc;QAEQ,OAAO,EAAnE,OAAO,2BAA2B,EAAE,eAAe;QAExB,QAAQ,GAAnC,UAAU,MAAM,CAAC;QACI,OAAO,GAA5B,MAAM,GAAC,IAAI;QACK,IAAI,GAApB,MAAM;QACU,UAAU,GAA1B,MAAM;QACU,KAAK,GAArB,MAAM;QACiD,MAAM,GAA7D;YAAC,MAAM,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAC;QACd,MAAM;gBAA9B,MAAM,GAAC,MAAM;;QACO,QAAQ,GAAnC,UAAU,MAAM,CAAC;QACD,IAAI,GAApB,MAAM;QACJ,eAAe,CAqD3B;IAvVD;;;;;OAKG;IACH,QAFU,OAAO,6BAA6B,EAAE,cAAc,CAEvD;IAEP;;;;OAIG;IACH,SAFU,OAAO,2BAA2B,EAAE,eAAe,CAErD;IAER;;;;;;;;;;;OAWG;IACH,SAFU,MAAM,GAAC,IAAI,CAEN;IAEf;;;;;;;;OAQG;IACH,MAFU,MAAM,CAEP;IAET;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;;;;;;;;;;;OAcG;IACH,eAFU,YAAY,CAEc;IAEpC;;OAEG;IACH,eAFU,MAAM,CAEE;IAElB;;;;OAIG;IACH,UAFU,YAAY,CAEc;IAEpC,+FAA+F;IAC/F,iBADW,MAAM,CAC0B;IAC3C,gDAAgD;IAChD,aADW,MAAM,CACsB;IACvC,uDAAuD;IACvD,cADW,MAAM,CACuB;IACxC,+DAA+D;IAC/D,iBADW,MAAM,CAC0B;IAC3C,gEAAgE;IAChE,cADW,MAAM,CACuB;IACxC,sFAAsF;IACtF,iBADW,MAAM,CAC0B;IAE3C,mBAEC;IAED;;;;;;;;;;;;OAYG;IACH;YAHkB,MAAM,GAAC,MAAM;aA2B9B;IAED;;;;;;;;;;;;OAYG;IACH,cAHW,eAAe,GACb,OAAO,CAwBnB;IAED;;;;;;OAMG;IACH,QAFa,MAAM,CA0BlB;IAED;;;;;;;;;;;;OAYG;IACH,YAFW,eAAe,QAyBzB;IAED;;;;;;OAMG;IACH,SAFa,eAAe,CAgB3B;IA+EL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAN1C;uBA3ZsB,uBAAuB"}
|