@woosh/meep-engine 3.15.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.
- package/editor/Editor.js +7 -7
- package/editor/actions/concrete/TransformModifyAction.d.ts +4 -4
- package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
- package/editor/actions/concrete/TransformModifyAction.js +4 -4
- package/editor/camera/camera_framing.js +7 -7
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts +20 -0
- package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -0
- package/editor/ecs/component/editors/ecs/Transform64Editor.js +70 -0
- package/editor/ecs/component/prototypeObjectEditor.js +2 -2
- package/editor/ecs/component/registerEngineComponentEditors.js +3 -3
- package/editor/particles/effect/ParticleEffectDocument.d.ts +411 -0
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
- package/editor/particles/effect/ParticleEffectDocument.js +1010 -0
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +113 -0
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -0
- package/editor/particles/effect/ParticleReferenceSimulation.js +377 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts +35 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.d.ts.map +1 -0
- package/editor/particles/effect/actions/ParticleGroupDefineAction.js +45 -0
- package/editor/particles/effect/make_starter_particle_effect.d.ts +23 -0
- package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -0
- package/editor/particles/effect/make_starter_particle_effect.js +177 -0
- package/editor/persistence/buildNewSceneDataset.d.ts.map +1 -1
- package/editor/persistence/buildNewSceneDataset.js +10 -8
- package/editor/process/symbolic/AudioEmitterSymbolicDisplay.js +67 -67
- package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
- package/editor/process/symbolic/GridPositionSymbolicDisplay.js +6 -6
- package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +1 -1
- package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +6 -3
- package/editor/process/symbolic/PositionedMarkerSymbolicDisplay.js +6 -6
- package/editor/selection/editor_pick.js +130 -130
- package/editor/templates/entity_templates.js +7 -7
- package/editor/tools/TransformToolV2.d.ts +3 -3
- package/editor/tools/TransformToolV2.d.ts.map +1 -1
- package/editor/tools/TransformToolV2.js +58 -25
- package/editor/tools/paint/TerrainHeightPaintTool.d.ts.map +1 -1
- package/editor/tools/paint/TerrainHeightPaintTool.js +11 -9
- package/editor/tools/v2/GizmoNode.js +2 -2
- package/editor/tools/v2/TransformControls.d.ts +3 -3
- package/editor/tools/v2/TransformControls.d.ts.map +1 -1
- package/editor/tools/v2/TransformControls.js +1003 -971
- package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
- package/editor/tools/v2/handle/gizmo_drag_plane.js +6 -1
- package/editor/view/ecs/components/common/AutoCanvasView.js +17 -0
- 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 +201 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +602 -7
- package/editor/view/node-graph/NodeGraphMinimapView.d.ts +120 -0
- package/editor/view/node-graph/NodeGraphMinimapView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphMinimapView.js +859 -0
- package/editor/view/node-graph/NodeGraphPaletteView.d.ts +112 -0
- package/editor/view/node-graph/NodeGraphPaletteView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphPaletteView.js +352 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts +76 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeGraphSearchMenuView.js +247 -0
- package/editor/view/node-graph/NodeGraphView.d.ts +147 -5
- package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphView.js +891 -82
- package/editor/view/node-graph/NodeIconView.d.ts +33 -0
- package/editor/view/node-graph/NodeIconView.d.ts.map +1 -0
- package/editor/view/node-graph/NodeIconView.js +54 -0
- package/editor/view/node-graph/NodeView.d.ts +71 -1
- package/editor/view/node-graph/NodeView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeView.js +318 -17
- package/editor/view/node-graph/PortView.d.ts +41 -1
- package/editor/view/node-graph/PortView.d.ts.map +1 -1
- package/editor/view/node-graph/PortView.js +121 -69
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts +16 -3
- package/editor/view/node-graph/actions/ConnectionDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/ConnectionDeleteAction.js +29 -3
- package/editor/view/node-graph/actions/NodeCreateAction.d.ts +65 -0
- package/editor/view/node-graph/actions/NodeCreateAction.d.ts.map +1 -0
- package/editor/view/node-graph/actions/NodeCreateAction.js +108 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts +6 -0
- package/editor/view/node-graph/actions/NodeDeleteAction.d.ts.map +1 -1
- package/editor/view/node-graph/actions/NodeDeleteAction.js +24 -2
- 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/node-graph/connection_wire_geometry.d.ts +34 -0
- package/editor/view/node-graph/connection_wire_geometry.d.ts.map +1 -1
- package/editor/view/node-graph/connection_wire_geometry.js +79 -3
- package/editor/view/node-graph/node-graph.css +678 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts +37 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleCodeEditorView.js +480 -0
- 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/ParticleEffectEditorView.d.ts +61 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleEffectEditorView.js +223 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts +25 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleEmitterInspectorView.js +632 -0
- 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 +161 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1666 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts +22 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleNodeParametersView.js +553 -0
- package/editor/view/particles/effect/ParticlePreviewView.d.ts +52 -0
- package/editor/view/particles/effect/ParticlePreviewView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticlePreviewView.js +533 -0
- package/editor/view/particles/effect/particle-editor.css +644 -0
- package/editor/view/prepareMeshLibrary.d.ts.map +1 -1
- package/editor/view/prepareMeshLibrary.js +8 -4
- package/package.json +1 -1
- package/samples/engine/first-scene/main.js +152 -152
- package/samples/generation/generators/mir_generator_place_bases.js +3 -3
- package/src/core/assert.d.ts +28 -24
- package/src/core/assert.d.ts.map +1 -1
- package/src/core/assert.js +34 -26
- 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/geom/3d/shape/PosedShape3D.d.ts +17 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +34 -2
- 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/graph/format/graphviz/graphviz_escape_html_label.d.ts +17 -0
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.d.ts.map +1 -0
- package/src/core/graph/format/graphviz/graphviz_escape_html_label.js +25 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts +16 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.d.ts.map +1 -0
- package/src/core/graph/format/graphviz/graphviz_escape_quoted.js +24 -0
- package/src/core/model/node-graph/NodeGraph.d.ts +12 -0
- package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
- package/src/core/model/node-graph/NodeGraph.js +21 -6
- package/src/core/model/node-graph/node/NodeDescription.d.ts +36 -0
- package/src/core/model/node-graph/node/NodeDescription.d.ts.map +1 -1
- package/src/core/model/node-graph/node/NodeDescription.js +41 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts +119 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/ConnectionVisualData.js +317 -0
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts +4 -0
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeDescriptionVisualRegistry.js +125 -22
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +91 -2
- package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
- package/src/core/model/node-graph/visual/NodeGraphVisualData.js +164 -113
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts +162 -0
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/LayoutBoxGraph.js +288 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +133 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/LayoutProblem.js +168 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +175 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +203 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +226 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +159 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.js +436 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +93 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.js +176 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts +48 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +561 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_assign_layers.js +202 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_break_cycles.js +254 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_build_problem.js +191 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +35 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +109 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +59 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.js +173 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +46 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.js +534 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts +21 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/layout_orient_links.js +49 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts +70 -0
- package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_connections.js +716 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +34 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.js +229 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +31 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.js +249 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts +29 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.d.ts.map +1 -0
- package/src/core/model/node-graph/visual/layout/route_to_spline.js +120 -0
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +593 -586
- package/src/engine/EntityCreator.js +116 -116
- package/src/engine/achievements/AchievementManager.js +437 -437
- package/src/engine/animation/AnimatedActions.js +111 -111
- package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
- package/src/engine/animation/AnimationUtils.js +20 -8
- package/src/engine/animation/Animations.d.ts +1 -0
- package/src/engine/animation/Animations.d.ts.map +1 -1
- package/src/engine/animation/Animations.js +74 -66
- package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
- package/src/engine/animation/clip/bind_property_writer.js +12 -5
- package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts +29 -0
- package/src/engine/animation/curve/binding/BoundTransform64Writer.d.ts.map +1 -0
- package/src/engine/animation/curve/binding/BoundTransform64Writer.js +80 -0
- package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +4 -4
- package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +1 -1
- package/src/engine/asset/loaders/gltf_test_fixtures.js +5 -4
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +12 -12
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2045
- package/src/engine/control/first-person/abilities/LedgeGrab.js +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +1 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +5 -9
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +59 -29
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +2 -2
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +7 -7
- package/src/engine/ecs/EventType.js +10 -10
- package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/actions/definition/SendRequestActionDescription.js +12 -4
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts +4 -4
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
- package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +10 -11
- package/src/engine/ecs/grid/pick.js +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.d.ts +1 -1
- package/src/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +13 -13
- package/src/engine/ecs/gui/hud/testHudEdgeStick.js +3 -3
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts +10 -10
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +8 -8
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +120 -97
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +16 -5
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +16 -4
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts +7 -3
- package/src/engine/ecs/ik/ik_probe_terrain_contact.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_probe_terrain_contact.js +20 -16
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +18 -0
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -0
- package/src/engine/ecs/ik/ik_write_local_rotation.js +26 -0
- package/src/engine/ecs/parent/EntityNode.d.ts +24 -6
- package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
- package/src/engine/ecs/parent/EntityNode.js +49 -42
- package/src/engine/ecs/parent/EntityNodeFlags.d.ts +0 -1
- package/src/engine/ecs/parent/EntityNodeFlags.js +7 -8
- package/src/engine/ecs/speaker/VoiceSystem.d.ts +2 -2
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +4 -4
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +2 -0
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts +5 -2
- package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/Terrain.js +7 -4
- package/src/engine/ecs/terrain/ecs/TerrainSystem.js +3 -3
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts +7 -7
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
- package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -316
- 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 +521 -0
- package/src/engine/ecs/transform/Transform64.d.ts +48 -11
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +54 -15
- package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts +37 -0
- package/src/engine/ecs/transform/Transform64SerializationAdapter.d.ts.map +1 -0
- package/src/engine/ecs/transform/Transform64SerializationAdapter.js +75 -0
- package/src/engine/ecs/transform/t64_allocation_probe.d.ts +31 -0
- package/src/engine/ecs/transform/t64_allocation_probe.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_allocation_probe.js +78 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts +36 -0
- package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_announce_change.js +39 -0
- package/src/engine/ecs/transform/t64_equals_components.d.ts +30 -0
- package/src/engine/ecs/transform/t64_equals_components.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_equals_components.js +59 -0
- package/src/engine/ecs/transform/t64_read_rotation.d.ts +13 -0
- package/src/engine/ecs/transform/t64_read_rotation.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_rotation.js +16 -0
- package/src/engine/ecs/transform/t64_read_translation.d.ts +14 -0
- package/src/engine/ecs/transform/t64_read_translation.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_read_translation.js +17 -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/TransformAttachment.d.ts +5 -5
- package/src/engine/ecs/transform-attachment/TransformAttachment.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachment.js +4 -4
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +10 -10
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +63 -20
- package/src/engine/graphics/debug/createDebugLabel.js +3 -3
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +5 -4
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +8 -3
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +6 -6
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +25 -13
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
- package/src/engine/graphics/ecs/mesh/setMesh.js +2 -2
- package/src/engine/graphics/ecs/path/entity/EntityPath.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/entity/EntityPath.js +21 -7
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts +4 -4
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.d.ts.map +1 -1
- package/src/engine/graphics/ecs/path/entity/EntityPathMarkerDefinition.js +4 -4
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +2 -2
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
- package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +141 -135
- package/src/engine/graphics/geometry/MikkT/Build4RuleGroups.js +2 -2
- package/src/engine/graphics/geometry/MikkT/DegenEpilogue.js +1 -1
- package/src/engine/graphics/geometry/MikkT/DegenPrologue.js +1 -1
- package/src/engine/graphics/geometry/MikkT/EvalTspace.js +1 -1
- package/src/engine/graphics/geometry/MikkT/GenerateTSpaces.js +3 -3
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +659 -0
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +21 -5
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts +45 -0
- package/src/engine/graphics/render/frame_graph/FrameGraph.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FrameGraph.js +282 -60
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassBuilder.js +20 -9
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts +12 -0
- package/src/engine/graphics/render/frame_graph/FramePassNode.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassNode.js +13 -0
- package/src/engine/graphics/render/frame_graph/FramePassResources.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/FramePassResources.js +5 -0
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts +19 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/ResourceEntry.js +23 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts +15 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/backend/void/VoidRenderContext.js +33 -16
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.d.ts.map +1 -1
- package/src/engine/graphics/render/frame_graph/resource/RenderResourceManager.js +19 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +6 -6
- package/src/engine/graphics3/CameraSystem.d.ts +6 -6
- package/src/engine/graphics3/CameraSystem.d.ts.map +1 -1
- package/src/engine/graphics3/CameraSystem.js +170 -170
- package/src/engine/graphics3/DecalSystem.d.ts +6 -6
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +449 -449
- package/src/engine/graphics3/LightSystem.d.ts +6 -6
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +230 -221
- package/src/engine/graphics3/MeshSystem.d.ts +6 -6
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +43 -22
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +20 -15
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem.js +198 -184
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts +6 -6
- package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticleEmitterSystem.js +306 -289
- package/src/engine/graphics3/PickingSystem.d.ts +6 -6
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +273 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +6 -6
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +174 -169
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +565 -566
- package/src/engine/graphics3/Trail3DSystem.d.ts +6 -6
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +221 -221
- package/src/engine/graphics3/camera_sync_from_transform.d.ts +2 -2
- package/src/engine/graphics3/camera_sync_from_transform.d.ts.map +1 -1
- package/src/engine/graphics3/camera_sync_from_transform.js +2 -1
- package/src/engine/graphics3/debug/gizmo_view_from_camera.js +4 -4
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +6 -0
- package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/particles/GPUParticularRenderer.js +82 -53
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts +12 -8
- package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
- package/src/engine/graphics3/particles/particle_gpu_records.js +53 -45
- package/src/engine/graphics3/preview/make_model_preview_scene.js +1 -1
- package/src/engine/graphics3/shade_camera_projection_ray.js +4 -4
- package/src/engine/graphics3/shade_node_to_entity_composition.d.ts.map +1 -1
- package/src/engine/graphics3/shade_node_to_entity_composition.js +88 -84
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts +7 -7
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.d.ts.map +1 -1
- package/src/engine/grid/grid2transform/GridPosition2TransformSystem.js +8 -8
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +9 -8
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
- package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +25 -8
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +2 -2
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -204
- package/src/engine/intelligence/behavior/util/RotationBehavior.js +5 -5
- package/src/engine/intelligence/mcts/StateNode.js +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts +7 -7
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +14 -15
- package/src/engine/interpolation/pose_interpoland.d.ts +2 -2
- package/src/engine/interpolation/pose_interpoland.js +4 -4
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts +4 -4
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
- package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +39 -14
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts +7 -7
- package/src/engine/network/adapters/TransformReplicationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformReplicationAdapter.js +19 -20
- package/src/engine/network/replication/Replicator.d.ts +5 -3
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +65 -16
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +3 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +9 -3
- package/src/engine/physics/constraint/solve_constraints.js +10 -10
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts +8 -8
- package/src/engine/physics/ecs/ColliderObserverSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/ColliderObserverSystem.js +6 -6
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +22 -32
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +2334 -2310
- package/src/engine/physics/ecs/find_non_finite_physics_state.js +6 -6
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +7 -7
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +16 -8
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +4 -4
- package/src/engine/physics/fluid/ecs/FluidSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidSystem.js +6 -6
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts +2 -2
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/WorkerFluidSystem.js +4 -4
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +7 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +4 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +7 -7
- package/src/engine/physics/inertia/world_inverse_inertia.js +1 -1
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +13 -12
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -1
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +23 -5
- package/src/engine/physics/narrowphase/compute_penetration.js +18 -14
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +2 -2
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +9 -9
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +95 -68
- package/src/engine/physics/narrowphase/refine_ray_concave.js +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -3
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +19 -7
- package/src/engine/physics/queries/raycast.js +3 -3
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +628 -620
- package/src/engine/physics/solver/solve_contacts.js +10 -10
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts +6 -5
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +10 -5
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts +16 -4
- package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/SoundListenerSystem.js +68 -11
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +7 -7
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +343 -338
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +2 -2
- package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/LiveEmitterSet.js +356 -345
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +23 -2
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
- package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +174 -140
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts +6 -6
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
- package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +185 -184
- package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +1 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts +2 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticRegionIndex.js +4 -3
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts +3 -2
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.d.ts.map +1 -1
- package/src/engine/sound/simulation/core/AcousticVolumeRegion.js +6 -4
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +6 -6
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +25 -6
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts +7 -7
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticVolumeSystem.js +6 -6
- package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
- package/src/engine/sound/sopra/runtime/EventInstance.js +8 -2
- package/src/format/scene/gltf/gltf_component_type.d.ts.map +1 -1
- package/src/format/scene/gltf/gltf_component_type.js +3 -1
- package/src/format/texture/ktx2/ktx2_read.d.ts.map +1 -1
- package/src/format/texture/ktx2/ktx2_read.js +2 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
- package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +8 -1
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts +4 -4
- package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
- package/src/generation/markers/GridCellActionPlaceMarker.js +16 -6
- package/src/generation/markers/MarkerNode.d.ts +3 -3
- package/src/generation/markers/MarkerNode.d.ts.map +1 -1
- package/src/generation/markers/MarkerNode.js +3 -3
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts +4 -4
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +7 -7
- package/src/generation/markers/actions/MarkerNodeActionImaginary.d.ts.map +1 -1
- package/src/generation/markers/actions/MarkerNodeActionImaginary.js +20 -2
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +13 -3
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +11 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +8 -4
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +13 -5
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +8 -2
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +16 -2
- package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/BufferResourceDescriptor.js +193 -184
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +12 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +8 -0
- package/src/shade/playground/avboit/main.js +3 -3
- package/src/shade/playground/basis_textures/main.js +1 -1
- package/src/shade/playground/ground_seam/main.js +1 -1
- package/src/shade/playground/particle_editor/README.md +216 -0
- package/src/shade/playground/particle_editor/index.html +76 -0
- package/src/shade/playground/particle_editor/main.d.ts +2 -0
- package/src/shade/playground/particle_editor/main.d.ts.map +1 -0
- package/src/shade/playground/particle_editor/main.js +139 -0
- package/src/shade/playground/particle_system/README.md +92 -62
- package/src/shade/playground/particle_system/index.html +67 -21
- package/src/shade/playground/particle_system/main.js +247 -102
- package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.d.ts +21 -18
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -0
- package/src/shade/{renderer/particles → playground/particle_system}/particle_prototype.js +196 -181
- package/src/shade/playground/particle_system/particle_scene.d.ts +136 -20
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +487 -670
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +2 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +2 -1
- package/src/shade/playground/sponza_path_trace/main.js +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +917 -917
- package/src/shade/playground/volumetrics_froxel/measure.js +559 -559
- package/src/shade/renderer/Renderer.d.ts +28 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +152 -8
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +4 -2
- package/src/shade/renderer/buffer/graph_read_buffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/graph_read_buffer.js +8 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +30 -0
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +84 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.d.ts +24 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_database_words.js +92 -0
- package/src/shade/renderer/camera/Camera.d.ts +2 -2
- package/src/shade/renderer/camera/Camera.d.ts.map +1 -1
- package/src/shade/renderer/camera/Camera.js +11 -5
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +2 -1
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts +3 -3
- package/src/shade/renderer/camera/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/OrbitalCameraController.js +31 -16
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +2 -2
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +4 -3
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +10 -5
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +8 -4
- package/src/shade/renderer/extension/FrameContext.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameContext.js +5 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts +16 -0
- package/src/shade/renderer/extension/FrameRecord.d.ts.map +1 -1
- package/src/shade/renderer/extension/FrameRecord.js +31 -0
- package/src/shade/renderer/extension/GBufferTextures.d.ts +11 -0
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/GBufferTextures.js +14 -0
- package/src/shade/renderer/geometry/attribute/gpu_vertex_buffer_layout_from_spec.js +1 -1
- package/src/shade/renderer/geometry/util/geometry_stripify.js +6 -6
- package/src/shade/renderer/geometry/virtual/format/prototypeVGEOFormatViewer.js +8 -8
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +14 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +17 -9
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/border/graph_lpv_paint_border_depth.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts +2 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +11 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_lpv_shade.js +4 -2
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +5 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +35 -11
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +361 -117
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +266 -87
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +919 -145
- package/src/shade/renderer/particles/ParticleConstants.d.ts +134 -5
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +148 -6
- 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/coherence/graph_particle_bucket.d.ts +5 -4
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +11 -15
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts +2 -2
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.d.ts.map +1 -1
- package/src/shade/renderer/particles/coherence/shader_particle_bucket.js +20 -15
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +7 -8
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +7 -17
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts +56 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_DATABASE_SPEC.js +68 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +39 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +52 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +83 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -0
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts +21 -5
- package/src/shade/renderer/particles/data/chunk_particle_emitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/chunk_particle_emitter.js +44 -85
- 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/data/particle_header.d.ts +62 -0
- package/src/shade/renderer/particles/data/particle_header.d.ts.map +1 -0
- package/src/shade/renderer/particles/data/particle_header.js +103 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +179 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +138 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -44
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts +283 -0
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleNodeGroup.js +419 -0
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +33 -2
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -185
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts +188 -0
- package/src/shade/renderer/particles/graph/ParticleValueType.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleValueType.js +287 -0
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +16 -9
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +469 -205
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts +11 -0
- package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts +27 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +81 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +83 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts +22 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -0
- 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/particle_groups_utility.d.ts +70 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_utility.js +161 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts +8 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts +88 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/infer_particle_graph_types.js +234 -0
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts +98 -0
- package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/make_particle_group.js +409 -0
- 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_authoring.d.ts +11 -4
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +121 -108
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +58 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts +29 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_distributions.js +170 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts +87 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_json.js +196 -0
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts +86 -0
- package/src/shade/renderer/particles/graph/particle_group_json.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_group_json.js +182 -0
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts +33 -0
- package/src/shade/renderer/particles/graph/particle_group_library.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_group_library.js +75 -0
- package/src/shade/renderer/particles/graph/particle_node_library.d.ts +37 -0
- package/src/shade/renderer/particles/graph/particle_node_library.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_library.js +64 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +186 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts +30 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_node_presentation.js +342 -0
- 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 +72 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.js +495 -0
- package/src/shade/renderer/particles/graph_particles.d.ts +98 -69
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +277 -81
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +107 -0
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph_particles_avboit.js +313 -0
- 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 +83 -21
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +186 -48
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts +13 -10
- package/src/shade/renderer/particles/isa/ParticleAssembler.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleAssembler.js +30 -26
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +74 -21
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +131 -81
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +372 -22
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +694 -66
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +173 -0
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_assembly.js +1214 -0
- 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 +48 -3
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +101 -5
- 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 +199 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -0
- 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 +371 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +128 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +43 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +107 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -0
- 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 +12 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.js +51 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +23 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -0
- 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 +4 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts +4 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -0
- 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 +4 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -0
- package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +151 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
- package/src/shade/renderer/particles/particle_test_fixtures.js +229 -0
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +206 -64
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +404 -83
- 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 +249 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +425 -0
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +77 -18
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
- 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 +9 -6
- 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_avboit_contribution.d.ts +17 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_contribution.js +75 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +20 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +94 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts +1 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_animation.js +1 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts +11 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_curve_disabled.js +13 -0
- 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_emitter_age.d.ts +17 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_age.js +22 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts +14 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +23 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts +18 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_scene_view_depth.js +24 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_setup_context.js +59 -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_avboit_draw.d.ts +14 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +153 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts +3 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +124 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts +19 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +147 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +27 -8
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +43 -68
- 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_emitter_tick.d.ts +5 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +216 -0
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +7 -3
- package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_render.js +132 -197
- 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 +42 -56
- 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/shaders/shader_particle_spawn_commands.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/shader_particle_spawn_commands.js +66 -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/sort/shader_particle_sort.d.ts +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +21 -36
- 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 +6 -3
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +285 -154
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +264 -170
- 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/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +1 -2
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +0 -3
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +3 -2
- package/src/shade/renderer/postprocess/nss/generate_NSS_WEIGHTS_ACTUAL.js +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +87 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +61 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +179 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +27 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +9 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +12 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +58 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +25 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +69 -10
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +10 -4
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +4 -39
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +7 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +16 -2
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +3 -3
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +29 -23
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.js +3 -3
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +4 -4
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts +7 -7
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +79 -71
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.js +3 -1
- 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/shader/chunk/random/chunk_hash_to_float01.d.ts +13 -3
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/chunk_hash_to_float01.js +15 -5
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts +8 -0
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/chunk_random_uint.js +15 -5
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts +7 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg.js +17 -7
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_advance.js +26 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/pcg/chunk_pcg_output.js +26 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +8 -2
- package/src/shade/renderer/shadow/map/PointLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +7 -2
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +3 -15
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +10 -4
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +7 -2
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +2 -2
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +3 -3
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +3 -3
- 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 +115 -15
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +35 -4
- package/src/view/minimap/Minimap.d.ts.map +1 -1
- package/src/view/minimap/Minimap.js +227 -225
- package/src/view/minimap/MinimapCanvasView.js +3 -3
- package/src/view/minimap/MinimapMarker.d.ts +45 -0
- package/src/view/minimap/MinimapMarker.d.ts.map +1 -0
- package/src/view/minimap/MinimapMarker.js +80 -0
- package/src/view/minimap/MinimapMarkerCollection.d.ts +6 -5
- package/src/view/minimap/MinimapMarkerCollection.d.ts.map +1 -1
- package/src/view/minimap/MinimapMarkerCollection.js +6 -6
- package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts +19 -0
- package/src/view/minimap/MinimapMarkerSerializationAdapter.d.ts.map +1 -0
- package/src/view/minimap/MinimapMarkerSerializationAdapter.js +42 -0
- package/src/view/minimap/dom/MinimapCameraView.d.ts +1 -1
- package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
- package/src/view/minimap/dom/MinimapCameraView.js +18 -4
- package/src/view/minimap/dom/MinimapMarkerView.js +3 -3
- package/src/view/minimap/gl/MarkerGL.js +3 -3
- package/src/view/util/DomLayoutFrame.d.ts +53 -0
- package/src/view/util/DomLayoutFrame.d.ts.map +1 -0
- package/src/view/util/DomLayoutFrame.js +122 -0
- 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/BoxLayoutSpec.js +0 -19
- 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/ConnectedBoxLayouter.js +0 -241
- 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/ConnectionEndpointLayoutSpec.js +0 -40
- 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/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
- package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
- package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
- package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
- 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/cull/chunk_particle_cull.js +0 -38
- 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/data/PARTICLE_EMITTER_LAYOUT.js +0 -214
- package/src/shade/renderer/particles/particle_prototype.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -43
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.js +0 -86
- package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -115
- 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/runtime/spawn_request_encoding.js +0 -52
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -22
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { frameThrottle } from "../../../src/core/function/frameThrottle.js";
|
|
1
2
|
import { clamp } from "../../../src/core/math/clamp.js";
|
|
2
3
|
import { max2 } from "../../../src/core/math/max2.js";
|
|
3
4
|
import View from "../../../src/view/View.js";
|
|
@@ -12,11 +13,19 @@ import { NodeInstancePortReference } from "../../../src/core/model/node-graph/no
|
|
|
12
13
|
import { ActionProcessor } from "../../../src/core/process/undo/ActionProcessor.js";
|
|
13
14
|
import { NodeGraphCamera } from "./NodeGraphCamera.js";
|
|
14
15
|
import { NodeGraphSelection } from "./NodeGraphSelection.js";
|
|
15
|
-
import {
|
|
16
|
+
import { connection_bind_actions } from "./actions/connection_bind_actions.js";
|
|
17
|
+
import { ConnectionDeleteAction } from "./actions/ConnectionDeleteAction.js";
|
|
16
18
|
import { NodeParameterSetAction } from "./actions/NodeParameterSetAction.js";
|
|
17
19
|
import { NodesMoveAction } from "./actions/NodesMoveAction.js";
|
|
18
20
|
import { SelectionSetAction } from "./actions/SelectionSetAction.js";
|
|
19
|
-
import
|
|
21
|
+
import Signal from "../../../src/core/events/signal/Signal.js";
|
|
22
|
+
import { wire_build_direct, wire_resolve_path } from "./connection_wire_geometry.js";
|
|
23
|
+
import { ConnectionVisualData } from "../../../src/core/model/node-graph/visual/ConnectionVisualData.js";
|
|
24
|
+
import AABB2 from "../../../src/core/geom/2d/aabb/AABB2.js";
|
|
25
|
+
import { aabb2_contains } from "../../../src/core/geom/2d/aabb/aabb2_contains.js";
|
|
26
|
+
import { aabb2_intersects_aabb2 } from "../../../src/core/geom/2d/aabb/aabb2_intersects_aabb2.js";
|
|
27
|
+
import { min2 } from "../../../src/core/math/min2.js";
|
|
28
|
+
import EmptyView from "../../../src/view/elements/EmptyView.js";
|
|
20
29
|
|
|
21
30
|
export { NodeGraphCamera } from "./NodeGraphCamera.js";
|
|
22
31
|
|
|
@@ -25,9 +34,20 @@ const v2_pointer = new Vector2();
|
|
|
25
34
|
const v2_hit_source = new Vector2();
|
|
26
35
|
const v2_hit_target = new Vector2();
|
|
27
36
|
|
|
28
|
-
const wire_aabb = new
|
|
37
|
+
const wire_aabb = new AABB2();
|
|
29
38
|
const wire_bezier = new Float64Array(8);
|
|
30
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Path of a wire that has no route of its own — one being dragged out of a port, one whose node has
|
|
42
|
+
* been moved since the graph was last laid out, or every wire in a graph that never has been.
|
|
43
|
+
*
|
|
44
|
+
* One instance, refilled per wire: it is used and finished with inside a single draw or hit test.
|
|
45
|
+
*
|
|
46
|
+
* @type {ConnectionVisualData}
|
|
47
|
+
*/
|
|
48
|
+
const direct_wire = new ConnectionVisualData();
|
|
49
|
+
|
|
50
|
+
|
|
31
51
|
const CONNECTION_WIDTH = 3;
|
|
32
52
|
|
|
33
53
|
/**
|
|
@@ -36,6 +56,39 @@ const CONNECTION_WIDTH = 3;
|
|
|
36
56
|
*/
|
|
37
57
|
const CONNECTION_HIT_TOLERANCE_PX = 6;
|
|
38
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Mouse buttons, as {@link MouseEvent#button} numbers them.
|
|
61
|
+
* @enum {number}
|
|
62
|
+
*/
|
|
63
|
+
const MOUSE_BUTTON = {
|
|
64
|
+
LEFT: 0,
|
|
65
|
+
MIDDLE: 1,
|
|
66
|
+
RIGHT: 2
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* How far the pointer may travel between a press and its release for the gesture to still count as
|
|
71
|
+
* a click rather than a drag, in canvas pixels.
|
|
72
|
+
*
|
|
73
|
+
* One number answers it for every button, and that is what keeps the canvas's background gestures
|
|
74
|
+
* out of each other's way: a press that stays put is a click — select, or ask for the menu — and one
|
|
75
|
+
* that moves is a drag — pan, or pull a selection box. Neither happens by accident, because a hand
|
|
76
|
+
* steady enough to have clicked never travels this far.
|
|
77
|
+
*
|
|
78
|
+
* @type {number}
|
|
79
|
+
*/
|
|
80
|
+
const CANVAS_CLICK_TOLERANCE_PX = 5;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* What a drag over the canvas background is doing.
|
|
84
|
+
* @enum {number}
|
|
85
|
+
*/
|
|
86
|
+
const CanvasDrag = {
|
|
87
|
+
None: 0,
|
|
88
|
+
Pan: 1,
|
|
89
|
+
Marquee: 2
|
|
90
|
+
};
|
|
91
|
+
|
|
39
92
|
/**
|
|
40
93
|
*
|
|
41
94
|
* @param {number[]} array
|
|
@@ -54,6 +107,111 @@ function array_toggle(array, value) {
|
|
|
54
107
|
export class NodeGraphView extends View {
|
|
55
108
|
el = document.createElement('div');
|
|
56
109
|
|
|
110
|
+
/**
|
|
111
|
+
* The view of each node currently on the canvas, by node id.
|
|
112
|
+
*
|
|
113
|
+
* A host that wants to decorate a node — mark it as carrying an error, flash it, badge it —
|
|
114
|
+
* needs to find its view, and reaching into the child list to do it depends on how this view
|
|
115
|
+
* happens to be assembled. Kept in step with the node list rather than rebuilt on demand.
|
|
116
|
+
*
|
|
117
|
+
* @readonly
|
|
118
|
+
* @type {Map<number, NodeView>}
|
|
119
|
+
*/
|
|
120
|
+
nodeViews = new Map();
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Nodes whose view has not yet recorded its drawn geometry — see {@link NodeView#measure}.
|
|
124
|
+
*
|
|
125
|
+
* Until this is empty, what the visual data holds for those nodes is the registry's estimate of
|
|
126
|
+
* how big they are, which is no basis for arranging a graph.
|
|
127
|
+
*
|
|
128
|
+
* @type {Set<number>}
|
|
129
|
+
*/
|
|
130
|
+
#unmeasured = new Set();
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Ask for the wires to be drawn again, at most once a frame. Set up in the constructor, where
|
|
134
|
+
* the canvas it repaints is; see the note there.
|
|
135
|
+
* @type {function()}
|
|
136
|
+
*/
|
|
137
|
+
#requestRedraw;
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* The type a port carries on a particular node instance. See the constructor.
|
|
141
|
+
* @type {function(NodeInstancePortReference):DataType}
|
|
142
|
+
*/
|
|
143
|
+
portDataType;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @readonly
|
|
147
|
+
*/
|
|
148
|
+
on = {
|
|
149
|
+
...this.on,
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* A node's view has been built and is in {@link nodeViews}. Carries `(NodeInstance, NodeView)`.
|
|
153
|
+
*
|
|
154
|
+
* A host that decorates node views cannot do it off the graph's own `nodeAdded`: a view's
|
|
155
|
+
* own bindings are linked before its children's, so a host bound to that signal runs before
|
|
156
|
+
* this view's list has built anything. This one fires when the view exists, by construction.
|
|
157
|
+
*
|
|
158
|
+
* @readonly
|
|
159
|
+
* @type {Signal<NodeInstance, NodeView>}
|
|
160
|
+
*/
|
|
161
|
+
nodeViewAdded: new Signal(),
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Every node on the canvas has recorded its drawn geometry, so the visual data describes
|
|
165
|
+
* the graph as it actually looks rather than as the registry guessed it would.
|
|
166
|
+
*
|
|
167
|
+
* What an automatic layout waits for: see {@link NodeGraphEditorView#layout}.
|
|
168
|
+
*
|
|
169
|
+
* @readonly
|
|
170
|
+
* @type {Signal}
|
|
171
|
+
*/
|
|
172
|
+
measured: new Signal(),
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* The canvas itself was right-clicked — not a node, not a port. Carries the point, in this
|
|
176
|
+
* view's own pixels and in graph space, and the release that ended the gesture.
|
|
177
|
+
*
|
|
178
|
+
* Raised when a right press is released without having travelled, rather than off the DOM's
|
|
179
|
+
* own `contextmenu`: browsers disagree about when that one fires — on the press on some
|
|
180
|
+
* platforms, on the release on others — and a canvas that pans with the right button cannot
|
|
181
|
+
* have half of them opening a menu in the middle of the pan. The browser's own menu is
|
|
182
|
+
* suppressed either way, by this element's pointer device.
|
|
183
|
+
*
|
|
184
|
+
* The gesture a host turns into "add a node here": see
|
|
185
|
+
* {@link NodeGraphEditorView}'s search menu. Announced rather than acted on because what a
|
|
186
|
+
* canvas offers is the host's business, and this view has no library to offer.
|
|
187
|
+
*
|
|
188
|
+
* @readonly
|
|
189
|
+
* @type {Signal<{x: number, y: number, graph_x: number, graph_y: number, event: MouseEvent}>}
|
|
190
|
+
*/
|
|
191
|
+
canvasContextMenu: new Signal(),
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* A wire being dragged out of a port was let go over open canvas rather than over another
|
|
195
|
+
* port. Carries the port it came from and where it was dropped.
|
|
196
|
+
*
|
|
197
|
+
* The other half of the same idea: a wire that reaches nothing is an author saying what they
|
|
198
|
+
* want next and where it goes, and a host that can finish the thought — by offering the types
|
|
199
|
+
* that could take the wire and connecting the one that is picked — turns a failed gesture
|
|
200
|
+
* into two steps of authoring at once.
|
|
201
|
+
*
|
|
202
|
+
* @readonly
|
|
203
|
+
* @type {Signal<{endpoint: NodeInstancePortReference, x: number, y: number, graph_x: number, graph_y: number}>}
|
|
204
|
+
*/
|
|
205
|
+
connectionDropped: new Signal()
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Whether the graph can be edited through this view. See the constructor.
|
|
210
|
+
* @readonly
|
|
211
|
+
* @type {boolean}
|
|
212
|
+
*/
|
|
213
|
+
readOnly = false;
|
|
214
|
+
|
|
57
215
|
/**
|
|
58
216
|
*
|
|
59
217
|
* @param {NodeGraph} graph
|
|
@@ -62,6 +220,17 @@ export class NodeGraphView extends View {
|
|
|
62
220
|
* @param {NodeDescriptionVisualRegistry} nodeVisualRegistry
|
|
63
221
|
* @param {ActionProcessor} [actionProcessor] timeline that all graph edits are routed through
|
|
64
222
|
* @param {NodeGraphSelection} [selection]
|
|
223
|
+
* @param {function({node: NodeInstance, commit: function(string, *)}):View|null} [parameterViewFactory]
|
|
224
|
+
* see {@link NodeView}; passed through unchanged, so a host's controls reach every node
|
|
225
|
+
* @param {function(NodeInstancePortReference):DataType} [portDataType]
|
|
226
|
+
* the type a port carries on a particular node instance, which is what its marker is
|
|
227
|
+
* coloured by and what a wire out of it is drawn in. The declared type by default. A
|
|
228
|
+
* host whose ports are typed by what is wired into them — where an `add` is as wide as
|
|
229
|
+
* its inputs — supplies one, and calls {@link #refreshPortTypes} when its answers change.
|
|
230
|
+
* @param {boolean} [readOnly] show the graph without offering to change it: no wiring, no
|
|
231
|
+
* dragging, no parameter edits. What a host drilling into a graph it does not own — a
|
|
232
|
+
* locked node group — shows. Selection and the camera still work, because looking around
|
|
233
|
+
* is not editing.
|
|
65
234
|
*/
|
|
66
235
|
constructor({
|
|
67
236
|
graph,
|
|
@@ -69,7 +238,10 @@ export class NodeGraphView extends View {
|
|
|
69
238
|
camera,
|
|
70
239
|
nodeVisualRegistry,
|
|
71
240
|
actionProcessor = new ActionProcessor({}),
|
|
72
|
-
selection = new NodeGraphSelection()
|
|
241
|
+
selection = new NodeGraphSelection(),
|
|
242
|
+
parameterViewFactory = undefined,
|
|
243
|
+
portDataType = endpoint => endpoint.port.dataType,
|
|
244
|
+
readOnly = false
|
|
73
245
|
}) {
|
|
74
246
|
super();
|
|
75
247
|
|
|
@@ -79,6 +251,10 @@ export class NodeGraphView extends View {
|
|
|
79
251
|
*/
|
|
80
252
|
this.actionProcessor = actionProcessor;
|
|
81
253
|
|
|
254
|
+
this.readOnly = readOnly;
|
|
255
|
+
|
|
256
|
+
this.portDataType = portDataType;
|
|
257
|
+
|
|
82
258
|
/**
|
|
83
259
|
*
|
|
84
260
|
* @type {NodeGraphCamera}
|
|
@@ -105,12 +281,39 @@ export class NodeGraphView extends View {
|
|
|
105
281
|
|
|
106
282
|
this.addClass('ui-node-graph-view');
|
|
107
283
|
|
|
284
|
+
this.setClass('read-only', readOnly);
|
|
285
|
+
|
|
108
286
|
const self = this;
|
|
109
287
|
|
|
110
288
|
const tempConnection = {
|
|
111
289
|
enabled: false,
|
|
112
290
|
anchor: new Vector2(),
|
|
113
|
-
endpoint: null
|
|
291
|
+
endpoint: null,
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Whether some port has already dealt with the drop that is ending this drag.
|
|
295
|
+
*
|
|
296
|
+
* A port's own pointer-up runs while the wire is still live and before the drag's, both
|
|
297
|
+
* being listeners for the same event on the way from the port to the window — so by the
|
|
298
|
+
* time the drag ends, this says whether the wire found a home. Without it there is no
|
|
299
|
+
* telling a wire dropped on open canvas from one dropped onto a port that refused it.
|
|
300
|
+
*
|
|
301
|
+
* @type {boolean}
|
|
302
|
+
*/
|
|
303
|
+
consumed: false,
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* The wire this gesture picked up, when it began on an input that already had one.
|
|
307
|
+
*
|
|
308
|
+
* Dragging out of a bound input is that wire being moved rather than a second one being
|
|
309
|
+
* made, so the gesture continues from the source it came from and this is what is on
|
|
310
|
+
* the end of it. It is not taken off the graph until the drop says where it is going —
|
|
311
|
+
* a gesture that ends on a port that refuses it, or on the port it started from, has to
|
|
312
|
+
* leave the graph as it found it — so while the drag runs it is only hidden.
|
|
313
|
+
*
|
|
314
|
+
* @type {Connection|null}
|
|
315
|
+
*/
|
|
316
|
+
detached: null
|
|
114
317
|
};
|
|
115
318
|
|
|
116
319
|
const vBlockCanvas = new ListView(graph.nodes, {
|
|
@@ -130,27 +333,95 @@ export class NodeGraphView extends View {
|
|
|
130
333
|
// dragging is editor behavior: managed here so moves land on the action timeline
|
|
131
334
|
enableDrag: false,
|
|
132
335
|
parameterSetCallback(n, parameterId, value) {
|
|
336
|
+
if (readOnly) {
|
|
337
|
+
// the controls are drawn — a locked graph is still worth reading — but
|
|
338
|
+
// nothing an author does in one reaches the model
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
|
|
133
342
|
actionProcessor.mark('set parameter');
|
|
134
343
|
actionProcessor.do(new NodeParameterSetAction(n, parameterId, value));
|
|
135
344
|
},
|
|
345
|
+
parameterViewFactory,
|
|
136
346
|
portCreationCallback(portView, port) {
|
|
347
|
+
// what this port carries on this node, where that is not what it declares
|
|
348
|
+
portView.setDataType(self.portDataType(node.getEndpoint(port.id)));
|
|
137
349
|
|
|
138
350
|
const draggableAspect = new DraggableAspect({
|
|
139
351
|
el: portView.el,
|
|
140
|
-
dragStart(p) {
|
|
352
|
+
dragStart(p, event) {
|
|
353
|
+
if (self.readOnly) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// An input holds one wire, so a drag out of a bound one is that
|
|
358
|
+
// wire being taken hold of: what is on the end of the gesture is
|
|
359
|
+
// its source, and where it is let go decides what it feeds — or
|
|
360
|
+
// whether it feeds anything, which is how one is pulled off.
|
|
361
|
+
const held = port.direction === PortDirection.In
|
|
362
|
+
? node.getEndpoint(port.id).inConnections[0] ?? null
|
|
363
|
+
: null;
|
|
141
364
|
|
|
142
365
|
const endpoint = new NodeInstancePortReference();
|
|
143
366
|
|
|
144
|
-
|
|
367
|
+
if (held === null) {
|
|
368
|
+
endpoint.set(node, port);
|
|
369
|
+
} else {
|
|
370
|
+
endpoint.set(held.source.instance, held.source.port);
|
|
371
|
+
}
|
|
145
372
|
|
|
146
373
|
tempConnection.enabled = true;
|
|
374
|
+
tempConnection.consumed = false;
|
|
375
|
+
tempConnection.detached = held;
|
|
147
376
|
tempConnection.endpoint = endpoint;
|
|
148
377
|
|
|
378
|
+
// The wire is drawn from here to the anchor, and a gesture that ends
|
|
379
|
+
// before the first move would otherwise be drawn to — and dropped
|
|
380
|
+
// at — wherever the previous one finished.
|
|
381
|
+
readPositionFromMouseEvent(v2_pointer, event, self.el);
|
|
382
|
+
|
|
383
|
+
self.transformPointCanvas2Graph(v2_pointer, tempConnection.anchor);
|
|
149
384
|
},
|
|
150
385
|
dragEnd() {
|
|
386
|
+
if (!tempConnection.enabled) {
|
|
387
|
+
return;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
const endpoint = tempConnection.endpoint;
|
|
391
|
+
const consumed = tempConnection.consumed;
|
|
392
|
+
const detached = tempConnection.detached;
|
|
393
|
+
|
|
151
394
|
tempConnection.enabled = false;
|
|
395
|
+
tempConnection.detached = null;
|
|
396
|
+
|
|
397
|
+
requestRedraw();
|
|
398
|
+
|
|
399
|
+
if (consumed) {
|
|
400
|
+
// some port took the drop, and has already made or refused the
|
|
401
|
+
// connection; there is nothing left of the gesture to report
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
if (detached !== null) {
|
|
406
|
+
// A wire taken off an input and let go over nothing is a wire
|
|
407
|
+
// removed. Its own step: what the host makes of the drop below
|
|
408
|
+
// — a menu that may be dismissed — is a separate decision, and
|
|
409
|
+
// the removal stands whichever way that goes.
|
|
410
|
+
actionProcessor.mark('disconnect');
|
|
411
|
+
actionProcessor.do(new ConnectionDeleteAction(graph, detached, visual));
|
|
412
|
+
}
|
|
152
413
|
|
|
153
|
-
|
|
414
|
+
const anchor = tempConnection.anchor;
|
|
415
|
+
|
|
416
|
+
self.transformPointGraph2Canvas(anchor, v2_pointer);
|
|
417
|
+
|
|
418
|
+
self.on.connectionDropped.send1({
|
|
419
|
+
endpoint,
|
|
420
|
+
x: v2_pointer.x,
|
|
421
|
+
y: v2_pointer.y,
|
|
422
|
+
graph_x: anchor.x,
|
|
423
|
+
graph_y: anchor.y,
|
|
424
|
+
});
|
|
154
425
|
},
|
|
155
426
|
drag(p, o, delta, event) {
|
|
156
427
|
// the anchor lives in graph space, derive it from the cursor position over this view
|
|
@@ -158,7 +429,7 @@ export class NodeGraphView extends View {
|
|
|
158
429
|
|
|
159
430
|
self.transformPointCanvas2Graph(v2_pointer, tempConnection.anchor);
|
|
160
431
|
|
|
161
|
-
|
|
432
|
+
requestRedraw();
|
|
162
433
|
}
|
|
163
434
|
});
|
|
164
435
|
|
|
@@ -166,6 +437,10 @@ export class NodeGraphView extends View {
|
|
|
166
437
|
//pointer released above the port
|
|
167
438
|
|
|
168
439
|
if (tempConnection.enabled) {
|
|
440
|
+
// whatever happens below, the wire has met a port and its fate is
|
|
441
|
+
// decided here rather than on open canvas
|
|
442
|
+
tempConnection.consumed = true;
|
|
443
|
+
|
|
169
444
|
/**
|
|
170
445
|
*
|
|
171
446
|
* @type {NodeInstancePortReference}
|
|
@@ -206,19 +481,46 @@ export class NodeGraphView extends View {
|
|
|
206
481
|
const source_ref = graph.getConnectionEndpoint(source_node, source_port);
|
|
207
482
|
const target_ref = graph.getConnectionEndpoint(target_node, target_port);
|
|
208
483
|
|
|
484
|
+
const detached = tempConnection.detached;
|
|
485
|
+
|
|
486
|
+
if (
|
|
487
|
+
detached !== null
|
|
488
|
+
&& detached.source === source_ref
|
|
489
|
+
&& detached.target === target_ref
|
|
490
|
+
) {
|
|
491
|
+
// a wire picked up and put back where it came from: the
|
|
492
|
+
// gesture did nothing, and leaving it alone is what makes
|
|
493
|
+
// that true — nothing reaches the timeline
|
|
494
|
+
return;
|
|
495
|
+
}
|
|
496
|
+
|
|
209
497
|
const duplicate = source_ref.connections.some(
|
|
210
498
|
c => c.source === source_ref && c.target === target_ref
|
|
211
499
|
);
|
|
212
500
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
501
|
+
const actions = duplicate
|
|
502
|
+
? []
|
|
503
|
+
: connection_bind_actions(
|
|
216
504
|
graph,
|
|
217
505
|
source_node, source_port,
|
|
218
|
-
target_node, target_port
|
|
219
|
-
|
|
506
|
+
target_node, target_port,
|
|
507
|
+
visual
|
|
508
|
+
);
|
|
509
|
+
|
|
510
|
+
if (detached !== null) {
|
|
511
|
+
// the wire this gesture is holding now feeds somewhere
|
|
512
|
+
// else, so it comes off where it was — one step, because
|
|
513
|
+
// it was one gesture
|
|
514
|
+
actions.unshift(new ConnectionDeleteAction(graph, detached, visual));
|
|
220
515
|
}
|
|
221
516
|
|
|
517
|
+
if (actions.length > 0) {
|
|
518
|
+
actionProcessor.mark(detached === null
|
|
519
|
+
? 'create connection'
|
|
520
|
+
: 'move connection');
|
|
521
|
+
|
|
522
|
+
actionProcessor.doMany(actions);
|
|
523
|
+
}
|
|
222
524
|
}
|
|
223
525
|
}
|
|
224
526
|
});
|
|
@@ -229,7 +531,20 @@ export class NodeGraphView extends View {
|
|
|
229
531
|
}
|
|
230
532
|
});
|
|
231
533
|
|
|
232
|
-
nodeView.bindSignal(nodeView.position.onChanged,
|
|
534
|
+
nodeView.bindSignal(nodeView.position.onChanged, requestRedraw);
|
|
535
|
+
|
|
536
|
+
// A node reports where the browser put its ports, and the wires are drawn to those
|
|
537
|
+
// points — so a node that has just been measured, or re-measured because its
|
|
538
|
+
// content changed, is a node whose wires no longer meet it.
|
|
539
|
+
self.#unmeasured.add(node.id);
|
|
540
|
+
|
|
541
|
+
nodeView.bindSignal(nodeView.on.measured, changed => {
|
|
542
|
+
if (changed) {
|
|
543
|
+
requestRedraw();
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
self.#markMeasured(node.id);
|
|
547
|
+
});
|
|
233
548
|
|
|
234
549
|
// selection state is reflected as a CSS class
|
|
235
550
|
function updateSelectionClass() {
|
|
@@ -253,6 +568,13 @@ export class NodeGraphView extends View {
|
|
|
253
568
|
dragStart() {
|
|
254
569
|
dragEntries = [];
|
|
255
570
|
|
|
571
|
+
if (readOnly) {
|
|
572
|
+
// an empty entry list makes the rest of the gesture a no-op, and the
|
|
573
|
+
// aspect still exists so a node keeps swallowing pointer gestures the
|
|
574
|
+
// canvas underneath would otherwise read as a pan
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
|
|
256
578
|
if (selection.containsNode(node.id)) {
|
|
257
579
|
// dragging a selected node moves the entire selection
|
|
258
580
|
selection.nodes.forEach(id => {
|
|
@@ -307,6 +629,10 @@ export class NodeGraphView extends View {
|
|
|
307
629
|
nodeView.on.linked.add(nodeDrag.start, nodeDrag);
|
|
308
630
|
nodeView.on.unlinked.add(nodeDrag.stop, nodeDrag);
|
|
309
631
|
|
|
632
|
+
self.nodeViews.set(node.id, nodeView);
|
|
633
|
+
|
|
634
|
+
self.on.nodeViewAdded.send2(node, nodeView);
|
|
635
|
+
|
|
310
636
|
return nodeView;
|
|
311
637
|
}
|
|
312
638
|
});
|
|
@@ -322,7 +648,6 @@ export class NodeGraphView extends View {
|
|
|
322
648
|
});
|
|
323
649
|
|
|
324
650
|
const v2_source = new Vector2();
|
|
325
|
-
const v2_target = new Vector2();
|
|
326
651
|
|
|
327
652
|
/**
|
|
328
653
|
*
|
|
@@ -335,17 +660,22 @@ export class NodeGraphView extends View {
|
|
|
335
660
|
|
|
336
661
|
ctx.lineCap = 'round';
|
|
337
662
|
|
|
338
|
-
//draw connections
|
|
663
|
+
//draw connections: a wire carries what comes out of its source
|
|
339
664
|
graph.connections.forEach(connection => {
|
|
340
665
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
666
|
+
if (connection === tempConnection.detached) {
|
|
667
|
+
// in hand rather than on the graph: it is drawn below, running to the cursor.
|
|
668
|
+
// Still on the graph because where it ends up is the drop's to decide, and one
|
|
669
|
+
// that lands back where it started has to leave no trace.
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
347
672
|
|
|
348
|
-
this.drawConnection(
|
|
673
|
+
this.drawConnection(
|
|
674
|
+
ctx,
|
|
675
|
+
this.resolveConnectionPath(connection),
|
|
676
|
+
this.portDataType(connection.source),
|
|
677
|
+
selection.containsConnection(connection.id)
|
|
678
|
+
);
|
|
349
679
|
|
|
350
680
|
});
|
|
351
681
|
|
|
@@ -359,17 +689,38 @@ export class NodeGraphView extends View {
|
|
|
359
689
|
const endpoint = tempConnection.endpoint;
|
|
360
690
|
|
|
361
691
|
this.getEndpointGraphPosition(endpoint, v2_source);
|
|
362
|
-
|
|
692
|
+
|
|
693
|
+
const dataType = this.portDataType(endpoint);
|
|
694
|
+
|
|
695
|
+
const anchor = tempConnection.anchor;
|
|
696
|
+
|
|
363
697
|
if (endpoint.port.direction === PortDirection.Out) {
|
|
364
|
-
|
|
698
|
+
wire_build_direct(direct_wire, v2_source.x, v2_source.y, anchor.x, anchor.y);
|
|
365
699
|
} else {
|
|
366
|
-
|
|
700
|
+
wire_build_direct(direct_wire, anchor.x, anchor.y, v2_source.x, v2_source.y);
|
|
367
701
|
}
|
|
702
|
+
|
|
703
|
+
this.drawConnection(ctx, direct_wire, dataType);
|
|
368
704
|
}
|
|
369
705
|
};
|
|
370
706
|
|
|
371
707
|
this.addChild(vConnectionCanvas);
|
|
372
708
|
|
|
709
|
+
/**
|
|
710
|
+
* Ask for the wires to be drawn again.
|
|
711
|
+
*
|
|
712
|
+
* At most once a frame, because one gesture is many changes. Dragging a selection of forty
|
|
713
|
+
* nodes moves forty positions per pointer event, and each of those is a wire repaint that
|
|
714
|
+
* the thirty-nine after it make obsolete — forty full canvases where the screen can only
|
|
715
|
+
* show one. Everything that repaints the wires goes through here rather than calling the
|
|
716
|
+
* canvas, so there is one answer to how often that happens.
|
|
717
|
+
*
|
|
718
|
+
* @type {function()}
|
|
719
|
+
*/
|
|
720
|
+
const requestRedraw = frameThrottle(vConnectionCanvas.render, vConnectionCanvas);
|
|
721
|
+
|
|
722
|
+
this.#requestRedraw = requestRedraw;
|
|
723
|
+
|
|
373
724
|
this.size.onChanged.add((x, y) => {
|
|
374
725
|
vConnectionCanvas.size.set(x, y);
|
|
375
726
|
});
|
|
@@ -381,66 +732,485 @@ export class NodeGraphView extends View {
|
|
|
381
732
|
vBlockCanvas.scale.setScalar(scale);
|
|
382
733
|
vBlockCanvas.position.set(-p.x * scale, -p.y * scale);
|
|
383
734
|
|
|
384
|
-
|
|
735
|
+
requestRedraw();
|
|
385
736
|
}
|
|
386
737
|
|
|
387
738
|
this.initializeNavigationControls();
|
|
388
739
|
|
|
740
|
+
// A node view cannot measure itself when it is linked: the view framework links a child
|
|
741
|
+
// before putting its element in the document (see View#addChild), so at that moment the
|
|
742
|
+
// node has no layout box to read. By the time this fires every one of them is in place.
|
|
743
|
+
//
|
|
744
|
+
// Nodes added later — from a palette, from an undo — are in that same position and are
|
|
745
|
+
// caught by their own resize observer instead, on the browser's next rendering step.
|
|
746
|
+
this.on.linked.add(this.measureNodes, this);
|
|
747
|
+
|
|
389
748
|
this.on.linked.add(onCameraChange);
|
|
390
749
|
this.bindSignal(camera.position.onChanged, onCameraChange);
|
|
391
750
|
this.bindSignal(camera.scale.onChanged, onCameraChange);
|
|
392
751
|
|
|
752
|
+
// node ids are pooled, so a view left behind by a deleted node would be handed out for an
|
|
753
|
+
// unrelated future one
|
|
754
|
+
this.bindSignal(graph.on.nodeRemoved, node => {
|
|
755
|
+
this.nodeViews.delete(node.id);
|
|
756
|
+
|
|
757
|
+
// a node nobody will ever draw again is not one the canvas is still waiting on
|
|
758
|
+
this.#markMeasured(node.id);
|
|
759
|
+
});
|
|
760
|
+
|
|
393
761
|
// wires are drawn from graph state, repaint when the structure changes
|
|
394
|
-
this.bindSignal(graph.on.connectionAdded,
|
|
395
|
-
this.bindSignal(graph.on.connectionRemoved,
|
|
762
|
+
this.bindSignal(graph.on.connectionAdded, requestRedraw);
|
|
763
|
+
this.bindSignal(graph.on.connectionRemoved, requestRedraw);
|
|
764
|
+
|
|
765
|
+
// connection ids are pooled the way node ids are, so a wire that is gone must not leave its
|
|
766
|
+
// selection behind for an unrelated future one to be handed
|
|
767
|
+
this.bindSignal(graph.on.connectionRemoved, connection => selection.connections.removeOneOf(connection.id));
|
|
396
768
|
|
|
397
769
|
// selected wires are drawn highlighted
|
|
398
|
-
this.bindSignal(selection.connections.on.added,
|
|
399
|
-
this.bindSignal(selection.connections.on.removed,
|
|
770
|
+
this.bindSignal(selection.connections.on.added, requestRedraw);
|
|
771
|
+
this.bindSignal(selection.connections.on.removed, requestRedraw);
|
|
400
772
|
}
|
|
401
773
|
|
|
774
|
+
/**
|
|
775
|
+
* Ask every port what it carries now, and draw the wires again in the answer's colours.
|
|
776
|
+
*
|
|
777
|
+
* For a host that resolves port types per node instance (see `portDataType` in the
|
|
778
|
+
* constructor): a graph whose types follow its wiring changes its mind about ports far from the
|
|
779
|
+
* edit — a literal made narrower retypes everything downstream of it — so the host says when,
|
|
780
|
+
* and every port is asked rather than the ones it can think of.
|
|
781
|
+
*
|
|
782
|
+
* @returns {void}
|
|
783
|
+
*/
|
|
784
|
+
refreshPortTypes() {
|
|
785
|
+
for (const node of this.graph.getNodes()) {
|
|
786
|
+
const nodeView = this.nodeViews.get(node.id);
|
|
787
|
+
|
|
788
|
+
if (nodeView === undefined) {
|
|
789
|
+
continue;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
for (const portView of nodeView.portViews.values()) {
|
|
793
|
+
portView.setDataType(this.portDataType(node.getEndpoint(portView.port.id)));
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
this.#requestRedraw();
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
/**
|
|
801
|
+
* Have every node on the canvas record where the browser has put it.
|
|
802
|
+
*
|
|
803
|
+
* The nodes measure themselves as their content changes, so this is not the usual path — it is
|
|
804
|
+
* how the canvas gets its first measurement, at the one moment it is known that every node is
|
|
805
|
+
* in the document and none of them has been asked yet.
|
|
806
|
+
*
|
|
807
|
+
* @returns {void}
|
|
808
|
+
*/
|
|
809
|
+
measureNodes() {
|
|
810
|
+
for (const nodeView of this.nodeViews.values()) {
|
|
811
|
+
nodeView.measure();
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
/**
|
|
816
|
+
* Whether the visual data describes the graph as drawn, rather than as the visual registry
|
|
817
|
+
* estimated it.
|
|
818
|
+
*
|
|
819
|
+
* False while the canvas is not on screen at all: an unlinked view has drawn nothing, and a
|
|
820
|
+
* node's size is not knowable without drawing it.
|
|
821
|
+
*
|
|
822
|
+
* @returns {boolean}
|
|
823
|
+
*/
|
|
824
|
+
isMeasured() {
|
|
825
|
+
return this.isLinked && this.#unmeasured.size === 0;
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* @param {number} node_id
|
|
830
|
+
*/
|
|
831
|
+
#markMeasured(node_id) {
|
|
832
|
+
if (!this.#unmeasured.delete(node_id)) {
|
|
833
|
+
//already accounted for
|
|
834
|
+
return;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
if (this.#unmeasured.size === 0) {
|
|
838
|
+
this.on.measured.send0();
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
/**
|
|
843
|
+
* Wire up what the canvas background does with the pointer.
|
|
844
|
+
*
|
|
845
|
+
* Three gestures want that background — moving the view, pulling a selection box across it, and
|
|
846
|
+
* asking for the add-node menu — and a canvas that guessed between them would keep getting it
|
|
847
|
+
* wrong. They are told apart by which button began the gesture, the way graph editors of this
|
|
848
|
+
* kind have long settled it (Unreal's Blueprint canvas among them):
|
|
849
|
+
*
|
|
850
|
+
* | gesture | what it does |
|
|
851
|
+
* |--------------------------|-------------------------------------------------------|
|
|
852
|
+
* | drag with the left | pull a selection box; SHIFT adds, CTRL toggles |
|
|
853
|
+
* | drag with right, middle | pan |
|
|
854
|
+
* | click with the left | select what is under the cursor, or clear the selection |
|
|
855
|
+
* | click with the right | ask the host for the add-node menu |
|
|
856
|
+
* | wheel | zoom about the cursor |
|
|
857
|
+
*
|
|
858
|
+
* A click and a drag are the same two events with a different amount of travel in between, so
|
|
859
|
+
* one tolerance decides which a gesture was — see {@link CANVAS_CLICK_TOLERANCE_PX}. That is how
|
|
860
|
+
* the right button both pans and opens a menu without ever doing one when the other was meant.
|
|
861
|
+
*
|
|
862
|
+
* A press over a node or a port never arrives here: those run pointer devices of their own and
|
|
863
|
+
* stop it where it is raised, so everything below is about open canvas.
|
|
864
|
+
*
|
|
865
|
+
* @returns {void}
|
|
866
|
+
*/
|
|
402
867
|
initializeNavigationControls() {
|
|
403
|
-
const cameraPosition = new Vector2();
|
|
404
868
|
const camera = this.camera;
|
|
405
869
|
|
|
870
|
+
const cameraPosition = new Vector2();
|
|
871
|
+
|
|
872
|
+
/**
|
|
873
|
+
* The selection box, while one is being pulled.
|
|
874
|
+
*
|
|
875
|
+
* An element of its own rather than something drawn on the wire canvas: that canvas is under
|
|
876
|
+
* the nodes, and a box whose far edge vanishes behind one is not showing what it is about to
|
|
877
|
+
* select.
|
|
878
|
+
*
|
|
879
|
+
* @type {EmptyView}
|
|
880
|
+
*/
|
|
881
|
+
const vMarquee = new EmptyView({ classList: ['marquee'] });
|
|
882
|
+
|
|
883
|
+
vMarquee.visible = false;
|
|
884
|
+
|
|
885
|
+
this.addChild(vMarquee);
|
|
886
|
+
|
|
887
|
+
/**
|
|
888
|
+
* The canvas gesture in flight.
|
|
889
|
+
*/
|
|
890
|
+
const gesture = {
|
|
891
|
+
/**
|
|
892
|
+
* Which button began it, as {@link MOUSE_BUTTON} numbers them, or -1 between gestures.
|
|
893
|
+
*
|
|
894
|
+
* A press that a node or a port swallowed never sets this, so a gesture that was never
|
|
895
|
+
* the canvas's own is one the canvas stays out of — including the release that ends it,
|
|
896
|
+
* which does reach here on its way up the tree.
|
|
897
|
+
*
|
|
898
|
+
* @type {number}
|
|
899
|
+
*/
|
|
900
|
+
button: -1,
|
|
901
|
+
/** where it began, in canvas pixels */
|
|
902
|
+
origin: new Vector2(),
|
|
903
|
+
/** whether it has travelled beyond {@link CANVAS_CLICK_TOLERANCE_PX} */
|
|
904
|
+
travelled: false,
|
|
905
|
+
/** what its drag is doing, once it has become one */
|
|
906
|
+
drag: CanvasDrag.None
|
|
907
|
+
};
|
|
908
|
+
|
|
909
|
+
/** graph-space corner the box was pulled from */
|
|
910
|
+
const marquee_anchor = new Vector2();
|
|
911
|
+
|
|
912
|
+
/** graph-space corner the cursor is at */
|
|
913
|
+
const marquee_head = new Vector2();
|
|
914
|
+
|
|
915
|
+
const marquee_region = new AABB2();
|
|
916
|
+
|
|
917
|
+
const v2_corner_a = new Vector2();
|
|
918
|
+
const v2_corner_b = new Vector2();
|
|
919
|
+
|
|
920
|
+
const cursor = new Vector2();
|
|
921
|
+
|
|
922
|
+
/**
|
|
923
|
+
* Put the box on screen across its two graph-space corners, and say what letting go of it
|
|
924
|
+
* there would do.
|
|
925
|
+
*
|
|
926
|
+
* @param {MouseEvent} event source of modifier key state
|
|
927
|
+
*/
|
|
928
|
+
const drawMarquee = (event) => {
|
|
929
|
+
this.transformPointGraph2Canvas(marquee_anchor, v2_corner_a);
|
|
930
|
+
this.transformPointGraph2Canvas(marquee_head, v2_corner_b);
|
|
931
|
+
|
|
932
|
+
const x0 = min2(v2_corner_a.x, v2_corner_b.x);
|
|
933
|
+
const y0 = min2(v2_corner_a.y, v2_corner_b.y);
|
|
934
|
+
|
|
935
|
+
vMarquee.position.set(x0, y0);
|
|
936
|
+
vMarquee.size.set(
|
|
937
|
+
max2(v2_corner_a.x, v2_corner_b.x) - x0,
|
|
938
|
+
max2(v2_corner_a.y, v2_corner_b.y) - y0
|
|
939
|
+
);
|
|
940
|
+
|
|
941
|
+
// which of the three this is, before it is let go: the modifier that decides is held
|
|
942
|
+
// where the thing it changes cannot show it
|
|
943
|
+
vMarquee.setClass('additive', event.shiftKey && !event.ctrlKey);
|
|
944
|
+
vMarquee.setClass('toggle', event.ctrlKey);
|
|
945
|
+
};
|
|
946
|
+
|
|
406
947
|
const draggableAspect = new DraggableAspect({
|
|
407
948
|
el: this.el,
|
|
408
|
-
dragStart() {
|
|
409
|
-
|
|
949
|
+
dragStart: (position) => {
|
|
950
|
+
if (gesture.button === MOUSE_BUTTON.LEFT) {
|
|
951
|
+
gesture.drag = CanvasDrag.Marquee;
|
|
952
|
+
|
|
953
|
+
// anchored in graph space, so the box stays over the graph it was drawn across
|
|
954
|
+
this.transformPointCanvas2Graph(position, marquee_anchor);
|
|
955
|
+
|
|
956
|
+
marquee_head.copy(marquee_anchor);
|
|
957
|
+
} else if (
|
|
958
|
+
gesture.button === MOUSE_BUTTON.RIGHT
|
|
959
|
+
|| gesture.button === MOUSE_BUTTON.MIDDLE
|
|
960
|
+
) {
|
|
961
|
+
gesture.drag = CanvasDrag.Pan;
|
|
962
|
+
|
|
963
|
+
cameraPosition.copy(camera.position);
|
|
964
|
+
} else {
|
|
965
|
+
gesture.drag = CanvasDrag.None;
|
|
966
|
+
}
|
|
410
967
|
},
|
|
411
|
-
drag(
|
|
412
|
-
|
|
968
|
+
drag: (position, origin, delta, event) => {
|
|
969
|
+
if (!gesture.travelled && position.distanceTo(origin) > CANVAS_CLICK_TOLERANCE_PX) {
|
|
970
|
+
gesture.travelled = true;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
if (gesture.drag === CanvasDrag.Pan) {
|
|
974
|
+
const d = origin.clone();
|
|
975
|
+
|
|
976
|
+
d.sub(position);
|
|
977
|
+
d.multiplyScalar(1 / camera.scale.getValue());
|
|
978
|
+
|
|
979
|
+
d.add(cameraPosition);
|
|
980
|
+
|
|
981
|
+
camera.position.copy(d);
|
|
982
|
+
} else if (gesture.drag === CanvasDrag.Marquee) {
|
|
983
|
+
this.transformPointCanvas2Graph(position, marquee_head);
|
|
984
|
+
|
|
985
|
+
// nothing is shown until the gesture is a drag, or every click would flash a box
|
|
986
|
+
vMarquee.visible = gesture.travelled;
|
|
413
987
|
|
|
414
|
-
|
|
415
|
-
|
|
988
|
+
drawMarquee(event);
|
|
989
|
+
}
|
|
990
|
+
},
|
|
991
|
+
dragEnd: (position, origin, event) => {
|
|
992
|
+
const drag = gesture.drag;
|
|
993
|
+
|
|
994
|
+
gesture.drag = CanvasDrag.None;
|
|
995
|
+
|
|
996
|
+
if (drag !== CanvasDrag.Marquee) {
|
|
997
|
+
return;
|
|
998
|
+
}
|
|
416
999
|
|
|
417
|
-
|
|
1000
|
+
vMarquee.visible = false;
|
|
418
1001
|
|
|
419
|
-
|
|
1002
|
+
if (!gesture.travelled) {
|
|
1003
|
+
// a click made with an unsteady hand; the release deals with it as one
|
|
1004
|
+
return;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
marquee_region.setBoundsUnordered(
|
|
1008
|
+
marquee_anchor.x, marquee_anchor.y,
|
|
1009
|
+
marquee_head.x, marquee_head.y
|
|
1010
|
+
);
|
|
1011
|
+
|
|
1012
|
+
this.applySelectionRegion(marquee_region, event);
|
|
420
1013
|
}
|
|
421
1014
|
});
|
|
422
1015
|
|
|
423
|
-
draggableAspect.getPointer()
|
|
424
|
-
const oldScale = camera.scale.getValue();
|
|
1016
|
+
const pointer = draggableAspect.getPointer();
|
|
425
1017
|
|
|
426
|
-
|
|
1018
|
+
pointer.on.down.add((position, event) => {
|
|
1019
|
+
if (gesture.button !== -1) {
|
|
1020
|
+
// a second button pressed during a gesture; the one that began it keeps it
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
|
|
1024
|
+
gesture.button = event.button;
|
|
1025
|
+
gesture.origin.copy(position);
|
|
1026
|
+
gesture.travelled = false;
|
|
1027
|
+
|
|
1028
|
+
if (event.button === MOUSE_BUTTON.MIDDLE) {
|
|
1029
|
+
// otherwise the browser answers a middle press with a scroll gesture of its own
|
|
1030
|
+
event.preventDefault();
|
|
1031
|
+
}
|
|
427
1032
|
});
|
|
428
1033
|
|
|
429
|
-
//
|
|
430
|
-
//
|
|
431
|
-
|
|
1034
|
+
// A release, and with it the two gestures that are made of not having moved. Both are the
|
|
1035
|
+
// canvas's only if the press was: a release over the canvas ends node drags and port drags
|
|
1036
|
+
// too, and those are already spoken for.
|
|
1037
|
+
pointer.on.up.add((position, event) => {
|
|
1038
|
+
if (event.button !== gesture.button || gesture.travelled) {
|
|
1039
|
+
return;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
if (event.button === MOUSE_BUTTON.LEFT) {
|
|
1043
|
+
// clicks over the background select wires, or clear the selection
|
|
1044
|
+
this.transformPointCanvas2Graph(position, cursor);
|
|
1045
|
+
|
|
1046
|
+
const connection = this.findConnectionAt(cursor);
|
|
432
1047
|
|
|
433
|
-
|
|
434
|
-
|
|
1048
|
+
this.applySelectionClick(null, connection !== null ? connection.id : null, event);
|
|
1049
|
+
} else if (event.button === MOUSE_BUTTON.RIGHT) {
|
|
1050
|
+
this.transformPointCanvas2Graph(position, cursor);
|
|
435
1051
|
|
|
436
|
-
|
|
1052
|
+
this.on.canvasContextMenu.send1({
|
|
1053
|
+
x: position.x,
|
|
1054
|
+
y: position.y,
|
|
1055
|
+
graph_x: cursor.x,
|
|
1056
|
+
graph_y: cursor.y,
|
|
1057
|
+
event
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
});
|
|
437
1061
|
|
|
438
|
-
|
|
1062
|
+
// the release that closes the gesture, wherever on the page it happens
|
|
1063
|
+
pointer.on.globalUp.add((position, event) => {
|
|
1064
|
+
if (event.button === gesture.button) {
|
|
1065
|
+
gesture.button = -1;
|
|
1066
|
+
}
|
|
1067
|
+
});
|
|
1068
|
+
|
|
1069
|
+
pointer.on.wheel.add((delta, position) => {
|
|
1070
|
+
const oldScale = camera.scale.getValue();
|
|
1071
|
+
|
|
1072
|
+
camera.zoomAt(position, (1 - delta.y / 20) * oldScale);
|
|
439
1073
|
});
|
|
440
1074
|
|
|
1075
|
+
// A canvas taken off screen mid-gesture never sees the release that would have ended it, and
|
|
1076
|
+
// one that came back still believing a button was down would ignore the next press.
|
|
1077
|
+
const abandonGesture = () => {
|
|
1078
|
+
gesture.button = -1;
|
|
1079
|
+
gesture.drag = CanvasDrag.None;
|
|
1080
|
+
gesture.travelled = false;
|
|
1081
|
+
|
|
1082
|
+
vMarquee.visible = false;
|
|
1083
|
+
};
|
|
1084
|
+
|
|
441
1085
|
this.on.linked.add(draggableAspect.start, draggableAspect);
|
|
442
1086
|
this.on.unlinked.add(draggableAspect.stop, draggableAspect);
|
|
1087
|
+
this.on.unlinked.add(abandonGesture);
|
|
1088
|
+
}
|
|
1089
|
+
|
|
1090
|
+
/**
|
|
1091
|
+
* The nodes a graph-space box touches.
|
|
1092
|
+
*
|
|
1093
|
+
* Touches rather than encloses: a box that has to go around whole nodes is a box drawn wider
|
|
1094
|
+
* than the graph, and every editor that offers the gesture takes overlap for that reason.
|
|
1095
|
+
*
|
|
1096
|
+
* @param {AABB2} region graph-space box
|
|
1097
|
+
* @returns {number[]} node ids
|
|
1098
|
+
*/
|
|
1099
|
+
findNodesInRegion(region) {
|
|
1100
|
+
const result = [];
|
|
1101
|
+
|
|
1102
|
+
for (const node of this.graph.getNodes()) {
|
|
1103
|
+
const nodeVisual = this.visual.getNode(node.id);
|
|
443
1104
|
|
|
1105
|
+
if (nodeVisual === undefined) {
|
|
1106
|
+
// nothing has been drawn for it, so there is nothing the box could have gone around
|
|
1107
|
+
continue;
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
const box = nodeVisual.dimensions;
|
|
1111
|
+
|
|
1112
|
+
if (aabb2_intersects_aabb2(
|
|
1113
|
+
region.x0, region.y0, region.x1, region.y1,
|
|
1114
|
+
box.x0, box.y0, box.x1, box.y1
|
|
1115
|
+
)) {
|
|
1116
|
+
result.push(node.id);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
return result;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
/**
|
|
1124
|
+
* The wires a graph-space box holds whole.
|
|
1125
|
+
*
|
|
1126
|
+
* Whole, unlike the nodes, and for the same reason they are not: a box around a few nodes cuts
|
|
1127
|
+
* across every wire leaving them for elsewhere, and taking those would turn a gesture aimed at
|
|
1128
|
+
* four nodes into half the graph highlighted. A wire the box holds is one whose ports are both
|
|
1129
|
+
* inside it — so its nodes are in the selection too, and the box selects what it looks like it
|
|
1130
|
+
* selects.
|
|
1131
|
+
*
|
|
1132
|
+
* @param {AABB2} region graph-space box
|
|
1133
|
+
* @returns {number[]} connection ids
|
|
1134
|
+
*/
|
|
1135
|
+
findConnectionsInRegion(region) {
|
|
1136
|
+
const result = [];
|
|
1137
|
+
|
|
1138
|
+
const connections = this.graph.connections;
|
|
1139
|
+
const n = connections.length;
|
|
1140
|
+
|
|
1141
|
+
for (let i = 0; i < n; i++) {
|
|
1142
|
+
const connection = connections.get(i);
|
|
1143
|
+
|
|
1144
|
+
this.resolveConnectionPath(connection).computeBounds(wire_aabb);
|
|
1145
|
+
|
|
1146
|
+
if (aabb2_contains(
|
|
1147
|
+
region.x0, region.y0, region.x1, region.y1,
|
|
1148
|
+
wire_aabb.x0, wire_aabb.y0, wire_aabb.x1, wire_aabb.y1
|
|
1149
|
+
)) {
|
|
1150
|
+
result.push(connection.id);
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
|
|
1154
|
+
return result;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
/**
|
|
1158
|
+
* Apply a rubber-band gesture: what the box went around, met with the selection already there
|
|
1159
|
+
* the way the modifier keys ask — plain replaces, SHIFT adds, CTRL toggles.
|
|
1160
|
+
*
|
|
1161
|
+
* The same three {@link #applySelectionClick} offers, because they are one question asked of
|
|
1162
|
+
* more than one element at a time.
|
|
1163
|
+
*
|
|
1164
|
+
* @param {AABB2} region graph-space box
|
|
1165
|
+
* @param {MouseEvent|PointerEvent} event source of modifier key state
|
|
1166
|
+
* @returns {void}
|
|
1167
|
+
*/
|
|
1168
|
+
applySelectionRegion(region, event) {
|
|
1169
|
+
const selection = this.selection;
|
|
1170
|
+
|
|
1171
|
+
const boxed_nodes = this.findNodesInRegion(region);
|
|
1172
|
+
const boxed_connections = this.findConnectionsInRegion(region);
|
|
1173
|
+
|
|
1174
|
+
let nodes, connections;
|
|
1175
|
+
|
|
1176
|
+
if (event.ctrlKey || event.shiftKey) {
|
|
1177
|
+
|
|
1178
|
+
nodes = selection.nodes.asArray().slice();
|
|
1179
|
+
connections = selection.connections.asArray().slice();
|
|
1180
|
+
|
|
1181
|
+
if (event.ctrlKey) {
|
|
1182
|
+
|
|
1183
|
+
boxed_nodes.forEach(id => array_toggle(nodes, id));
|
|
1184
|
+
boxed_connections.forEach(id => array_toggle(connections, id));
|
|
1185
|
+
|
|
1186
|
+
} else {
|
|
1187
|
+
|
|
1188
|
+
boxed_nodes.forEach(id => {
|
|
1189
|
+
if (!nodes.includes(id)) {
|
|
1190
|
+
nodes.push(id);
|
|
1191
|
+
}
|
|
1192
|
+
});
|
|
1193
|
+
|
|
1194
|
+
boxed_connections.forEach(id => {
|
|
1195
|
+
if (!connections.includes(id)) {
|
|
1196
|
+
connections.push(id);
|
|
1197
|
+
}
|
|
1198
|
+
});
|
|
1199
|
+
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
} else {
|
|
1203
|
+
nodes = boxed_nodes;
|
|
1204
|
+
connections = boxed_connections;
|
|
1205
|
+
}
|
|
1206
|
+
|
|
1207
|
+
if (selection.matches(nodes, connections)) {
|
|
1208
|
+
// no change, keep the timeline clean
|
|
1209
|
+
return;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
this.actionProcessor.mark('select');
|
|
1213
|
+
this.actionProcessor.do(new SelectionSetAction(selection, nodes, connections));
|
|
444
1214
|
}
|
|
445
1215
|
|
|
446
1216
|
/**
|
|
@@ -458,24 +1228,19 @@ export class NodeGraphView extends View {
|
|
|
458
1228
|
for (let i = 0; i < n; i++) {
|
|
459
1229
|
const connection = connections.get(i);
|
|
460
1230
|
|
|
461
|
-
this.
|
|
462
|
-
this.getEndpointGraphPosition(connection.target, v2_hit_target);
|
|
1231
|
+
const path = this.resolveConnectionPath(connection);
|
|
463
1232
|
|
|
464
|
-
|
|
1233
|
+
path.computeBounds(wire_aabb);
|
|
465
1234
|
|
|
466
1235
|
if (
|
|
467
|
-
point.x < wire_aabb
|
|
468
|
-
|| point.y < wire_aabb
|
|
1236
|
+
point.x < wire_aabb.x0 - best_distance || point.x > wire_aabb.x1 + best_distance
|
|
1237
|
+
|| point.y < wire_aabb.y0 - best_distance || point.y > wire_aabb.y1 + best_distance
|
|
469
1238
|
) {
|
|
470
1239
|
//outside the inflated bounds, can't beat the current best
|
|
471
1240
|
continue;
|
|
472
1241
|
}
|
|
473
1242
|
|
|
474
|
-
const distance =
|
|
475
|
-
point.x, point.y,
|
|
476
|
-
v2_hit_source.x, v2_hit_source.y,
|
|
477
|
-
v2_hit_target.x, v2_hit_target.y
|
|
478
|
-
);
|
|
1243
|
+
const distance = path.distanceToPoint(point.x, point.y);
|
|
479
1244
|
|
|
480
1245
|
if (distance < best_distance) {
|
|
481
1246
|
best_distance = distance;
|
|
@@ -563,24 +1328,51 @@ export class NodeGraphView extends View {
|
|
|
563
1328
|
return _x0 < this.size.x && _x1 > 0 && _y0 < this.size.y && _y1 > 0;
|
|
564
1329
|
}
|
|
565
1330
|
|
|
1331
|
+
/**
|
|
1332
|
+
* The path a connection is drawn along — its route while that route still meets its ports, and
|
|
1333
|
+
* a plain curve between them otherwise. See {@link wire_resolve_path}.
|
|
1334
|
+
*
|
|
1335
|
+
* The fallback is a shared scratch object, so the result is only valid until this is called
|
|
1336
|
+
* again.
|
|
1337
|
+
*
|
|
1338
|
+
* @param {Connection} connection
|
|
1339
|
+
* @returns {ConnectionVisualData}
|
|
1340
|
+
*/
|
|
1341
|
+
resolveConnectionPath(connection) {
|
|
1342
|
+
this.getEndpointGraphPosition(connection.source, v2_hit_source);
|
|
1343
|
+
this.getEndpointGraphPosition(connection.target, v2_hit_target);
|
|
1344
|
+
|
|
1345
|
+
return wire_resolve_path(
|
|
1346
|
+
this.visual.getConnection(connection.id),
|
|
1347
|
+
v2_hit_source.x, v2_hit_source.y,
|
|
1348
|
+
v2_hit_target.x, v2_hit_target.y,
|
|
1349
|
+
direct_wire
|
|
1350
|
+
);
|
|
1351
|
+
}
|
|
1352
|
+
|
|
566
1353
|
/**
|
|
567
1354
|
*
|
|
568
1355
|
* @param {CanvasRenderingContext2D} ctx
|
|
569
|
-
* @param {
|
|
570
|
-
* @param {Vector2} target
|
|
1356
|
+
* @param {ConnectionVisualData} path
|
|
571
1357
|
* @param {DataType} dataType
|
|
572
1358
|
* @param {boolean} [selected] selected wires are drawn with a highlight halo
|
|
573
1359
|
*/
|
|
574
|
-
drawConnection(ctx,
|
|
575
|
-
|
|
1360
|
+
drawConnection(ctx, path, dataType, selected = false) {
|
|
1361
|
+
const segments = path.segment_count;
|
|
1362
|
+
|
|
1363
|
+
if (segments === 0) {
|
|
1364
|
+
return;
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
path.computeBounds(wire_aabb);
|
|
576
1368
|
|
|
577
1369
|
const cw_2 = (CONNECTION_WIDTH / 2);
|
|
578
1370
|
|
|
579
1371
|
if (!this.isGraphAABBVisible(
|
|
580
|
-
wire_aabb
|
|
581
|
-
wire_aabb
|
|
582
|
-
wire_aabb
|
|
583
|
-
wire_aabb
|
|
1372
|
+
wire_aabb.x0 - cw_2,
|
|
1373
|
+
wire_aabb.y0 - cw_2,
|
|
1374
|
+
wire_aabb.x1 + cw_2,
|
|
1375
|
+
wire_aabb.y1 + cw_2
|
|
584
1376
|
)) {
|
|
585
1377
|
//connection is not visible, don't draw
|
|
586
1378
|
return;
|
|
@@ -591,23 +1383,27 @@ export class NodeGraphView extends View {
|
|
|
591
1383
|
|
|
592
1384
|
const alpha = clamp(cameraScale * CONNECTION_WIDTH, 0, 1);
|
|
593
1385
|
|
|
594
|
-
|
|
1386
|
+
ctx.beginPath();
|
|
595
1387
|
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
wire_bezier[i] = (wire_bezier[i] - cameraPosition.x) * cameraScale;
|
|
599
|
-
wire_bezier[i + 1] = (wire_bezier[i + 1] - cameraPosition.y) * cameraScale;
|
|
600
|
-
}
|
|
1388
|
+
for (let segment = 0; segment < segments; segment++) {
|
|
1389
|
+
path.write_segment_bezier(wire_bezier, 0, segment);
|
|
601
1390
|
|
|
602
|
-
|
|
1391
|
+
//the graph->canvas transform is affine, transforming the control polygon transforms the curve
|
|
1392
|
+
for (let i = 0; i < 8; i += 2) {
|
|
1393
|
+
wire_bezier[i] = (wire_bezier[i] - cameraPosition.x) * cameraScale;
|
|
1394
|
+
wire_bezier[i + 1] = (wire_bezier[i + 1] - cameraPosition.y) * cameraScale;
|
|
1395
|
+
}
|
|
603
1396
|
|
|
604
|
-
|
|
1397
|
+
if (segment === 0) {
|
|
1398
|
+
ctx.moveTo(wire_bezier[0], wire_bezier[1]);
|
|
1399
|
+
}
|
|
605
1400
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
1401
|
+
ctx.bezierCurveTo(
|
|
1402
|
+
wire_bezier[2], wire_bezier[3],
|
|
1403
|
+
wire_bezier[4], wire_bezier[5],
|
|
1404
|
+
wire_bezier[6], wire_bezier[7]
|
|
1405
|
+
);
|
|
1406
|
+
}
|
|
611
1407
|
|
|
612
1408
|
if (selected) {
|
|
613
1409
|
ctx.lineWidth = max2(1, (CONNECTION_WIDTH + 4) * cameraScale);
|
|
@@ -646,6 +1442,19 @@ export class NodeGraphView extends View {
|
|
|
646
1442
|
output.set(x, y);
|
|
647
1443
|
}
|
|
648
1444
|
|
|
1445
|
+
unlink() {
|
|
1446
|
+
// The list drops every node view on unlink and rebuilds them on link, so keeping the map
|
|
1447
|
+
// across that would leave entries for views that no longer exist — and for nodes deleted
|
|
1448
|
+
// while unlinked, entries that nothing will ever replace.
|
|
1449
|
+
this.nodeViews.clear();
|
|
1450
|
+
|
|
1451
|
+
// and with them go the measurements they were going to make; the views built on the next
|
|
1452
|
+
// link have to make their own
|
|
1453
|
+
this.#unmeasured.clear();
|
|
1454
|
+
|
|
1455
|
+
super.unlink();
|
|
1456
|
+
}
|
|
1457
|
+
|
|
649
1458
|
/**
|
|
650
1459
|
* Convert point from Graph coordinate space to Canvas coordinate space
|
|
651
1460
|
* @param {Vector2} input
|