@woosh/meep-engine 3.14.6 → 3.16.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 +396 -0
- package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -0
- package/editor/particles/effect/ParticleEffectDocument.js +989 -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/NodeGraphEditorView.d.ts +143 -2
- package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
- package/editor/view/node-graph/NodeGraphEditorView.js +358 -6
- 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 +809 -76
- 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/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 +479 -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 +606 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +156 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -0
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1636 -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 +520 -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 +556 -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/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/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 +109 -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 +141 -0
- package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +149 -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 +175 -0
- package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +137 -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 +242 -0
- package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +114 -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 +300 -0
- package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +86 -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 +168 -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 +555 -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 +184 -0
- package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +29 -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 +95 -0
- package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +56 -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 +131 -0
- package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +36 -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 +415 -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 +41 -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 +309 -0
- package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +33 -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 +237 -0
- package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +25 -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 +220 -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 +246 -234
- 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 +13 -5
- 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 +77 -44
- 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.d.ts +1 -0
- package/src/engine/ecs/EventType.js +35 -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 +30 -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 +54 -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 +84 -36
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +513 -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/__probe.d.ts +4 -0
- package/src/engine/ecs/transform/__probe.d.ts.map +1 -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 +33 -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/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 +71 -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 +145 -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 +234 -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 +53 -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 +310 -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 +180 -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 +29 -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 +35 -21
- 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/orchestrator/ServerAuthoritativeClient.d.ts +48 -0
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +246 -3
- 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 +2337 -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 +70 -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 +10 -6
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
- package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +32 -7
- 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/RENDERER_CONTRACT.md +584 -580
- 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/README.md +117 -0
- package/src/shade/playground/avboit/index.html +215 -0
- package/src/shade/playground/avboit/main.d.ts +2 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -0
- package/src/shade/playground/avboit/main.js +875 -0
- 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 +175 -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 +197 -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 +44 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +169 -36
- package/src/shade/renderer/ShadeTransparencyMode.d.ts +13 -0
- package/src/shade/renderer/ShadeTransparencyMode.d.ts.map +1 -0
- package/src/shade/renderer/ShadeTransparencyMode.js +30 -0
- 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_emulator_image.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +1 -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 +271 -112
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +251 -86
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +822 -146
- package/src/shade/renderer/particles/ParticleConstants.d.ts +96 -3
- package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
- package/src/shade/renderer/particles/ParticleConstants.js +103 -4
- 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 +166 -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_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 +120 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +90 -1
- 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 +44 -2
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +476 -40
- 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 +464 -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 +213 -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 +75 -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 +319 -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 +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 +159 -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 +427 -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 +38 -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 +25 -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 +146 -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 +234 -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 +286 -0
- package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +66 -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 +439 -0
- package/src/shade/renderer/particles/graph_particles.d.ts +143 -68
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +424 -71
- 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 +312 -0
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts +41 -8
- package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/InstructionStream.js +111 -33
- 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 +27 -15
- package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleProgram.js +139 -34
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +117 -9
- package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
- package/src/shade/renderer/particles/isa/ParticleVMISA.js +296 -37
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts +149 -0
- package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -0
- package/src/shade/renderer/particles/isa/particle_assembly.js +999 -0
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +25 -3
- package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
- package/src/shade/renderer/particles/layout/ParticleLayout.js +33 -5
- package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +160 -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 +478 -0
- package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +291 -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 +647 -0
- package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +95 -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 +213 -0
- package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +16 -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 +223 -0
- package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +121 -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 +206 -0
- package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +11 -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 +197 -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 +4 -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 +561 -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 +72 -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 +86 -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 +271 -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 +268 -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 +151 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts +131 -0
- package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -0
- package/src/shade/renderer/particles/particle_test_fixtures.js +203 -0
- package/src/shade/renderer/particles/runtime/Emitter.d.ts +219 -0
- package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +128 -60
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +286 -117
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +264 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +404 -0
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +49 -15
- package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +51 -18
- package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ProgramArena.js +72 -32
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +4 -4
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +4 -4
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +15 -0
- package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +1 -0
- 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_context.d.ts +15 -5
- package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +1 -1
- 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_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/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 +18 -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 +72 -37
- 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.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +78 -24
- 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/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/ParticleVMReference.d.ts +2 -2
- package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/ParticleVMReference.js +100 -90
- package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +270 -138
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts +9 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +26 -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/bucket/prepare_meshlet_draw_commands_by_material.d.ts +7 -2
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +12 -1
- package/src/shade/renderer/rasterize/expand/shader_filter_triangle_by_material_side.js +1 -1
- package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/FORWARD_VERTEX_SHADER_STRUCT.js +4 -4
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/forward/SHADING_SCENE_RESOURCE_GROUP.js +17 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_brick4.js +16 -16
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_forward_shade_standard_fragment_ibl.js +17 -17
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.d.ts +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_material_side_should_draw.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/chunk_material_side_should_draw.js +2 -2
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts +3 -0
- package/src/shade/renderer/rasterize/forward/vertex_shader_chunk.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/{native/oit → forward}/vertex_shader_chunk.js +4 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +27 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +27 -0
- 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_CONSTANTS.d.ts +107 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +120 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +642 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +534 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_WARP_STRUCT.js +33 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts +20 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_build_depth_curve.js +38 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +45 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +139 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts +37 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/avboit_spec_support.js +73 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_counts_to_extinction.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_dilate_word.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_counts.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_extinction_to_transmittance.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_fold_pairs.js +25 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +17 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +35 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_range.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_occupancy_word_mask.js +26 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_overflows.js +22 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_pack_counts.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +32 -0
- 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/chunk_avboit_transmission_tint.d.ts +20 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmission_tint.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_transmittance_to_extinction.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unpack_counts.js +21 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_physical.js +23 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts +13 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js +27 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts +22 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp.js +38 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +141 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +994 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +135 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +101 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +96 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_integrate.js +83 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts +9 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_occupancy.js +119 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts +3 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +87 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +15 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +202 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts +22 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/material_draw_indirect.js +69 -0
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +665 -722
- package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +3 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -4
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -4
- 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/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/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +66 -5
- 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 +23 -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.js +0 -19
- package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.js +0 -241
- package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.js +0 -40
- package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js +0 -28
- package/src/engine/ecs/util/hideEntityGracefully.js +0 -196
- package/src/shade/renderer/particles/cull/chunk_particle_cull.js +0 -38
- 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.js +0 -86
- package/src/shade/renderer/particles/runtime/spawn_request_encoding.js +0 -52
- package/src/shade/renderer/particles/shaders/chunk_particle_context.js +0 -58
- package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/FORWARD_VERTEX_SHADER_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/SHADING_SCENE_RESOURCE_GROUP.js +0 -17
- package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_brick4.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/chunk_forward_shade_standard_fragment_ibl.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/chunk_material_side_should_draw.d.ts.map +0 -1
- package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts +0 -3
- package/src/shade/renderer/rasterize/native/oit/vertex_shader_chunk.d.ts.map +0 -1
|
@@ -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";
|
|
@@ -16,7 +17,14 @@ import { ConnectionCreateAction } from "./actions/ConnectionCreateAction.js";
|
|
|
16
17
|
import { NodeParameterSetAction } from "./actions/NodeParameterSetAction.js";
|
|
17
18
|
import { NodesMoveAction } from "./actions/NodesMoveAction.js";
|
|
18
19
|
import { SelectionSetAction } from "./actions/SelectionSetAction.js";
|
|
19
|
-
import
|
|
20
|
+
import Signal from "../../../src/core/events/signal/Signal.js";
|
|
21
|
+
import { wire_build_direct, wire_resolve_path } from "./connection_wire_geometry.js";
|
|
22
|
+
import { ConnectionVisualData } from "../../../src/core/model/node-graph/visual/ConnectionVisualData.js";
|
|
23
|
+
import AABB2 from "../../../src/core/geom/2d/aabb/AABB2.js";
|
|
24
|
+
import { aabb2_contains } from "../../../src/core/geom/2d/aabb/aabb2_contains.js";
|
|
25
|
+
import { aabb2_intersects_aabb2 } from "../../../src/core/geom/2d/aabb/aabb2_intersects_aabb2.js";
|
|
26
|
+
import { min2 } from "../../../src/core/math/min2.js";
|
|
27
|
+
import EmptyView from "../../../src/view/elements/EmptyView.js";
|
|
20
28
|
|
|
21
29
|
export { NodeGraphCamera } from "./NodeGraphCamera.js";
|
|
22
30
|
|
|
@@ -25,9 +33,20 @@ const v2_pointer = new Vector2();
|
|
|
25
33
|
const v2_hit_source = new Vector2();
|
|
26
34
|
const v2_hit_target = new Vector2();
|
|
27
35
|
|
|
28
|
-
const wire_aabb = new
|
|
36
|
+
const wire_aabb = new AABB2();
|
|
29
37
|
const wire_bezier = new Float64Array(8);
|
|
30
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Path of a wire that has no route of its own — one being dragged out of a port, one whose node has
|
|
41
|
+
* been moved since the graph was last laid out, or every wire in a graph that never has been.
|
|
42
|
+
*
|
|
43
|
+
* One instance, refilled per wire: it is used and finished with inside a single draw or hit test.
|
|
44
|
+
*
|
|
45
|
+
* @type {ConnectionVisualData}
|
|
46
|
+
*/
|
|
47
|
+
const direct_wire = new ConnectionVisualData();
|
|
48
|
+
|
|
49
|
+
|
|
31
50
|
const CONNECTION_WIDTH = 3;
|
|
32
51
|
|
|
33
52
|
/**
|
|
@@ -36,6 +55,39 @@ const CONNECTION_WIDTH = 3;
|
|
|
36
55
|
*/
|
|
37
56
|
const CONNECTION_HIT_TOLERANCE_PX = 6;
|
|
38
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Mouse buttons, as {@link MouseEvent#button} numbers them.
|
|
60
|
+
* @enum {number}
|
|
61
|
+
*/
|
|
62
|
+
const MOUSE_BUTTON = {
|
|
63
|
+
LEFT: 0,
|
|
64
|
+
MIDDLE: 1,
|
|
65
|
+
RIGHT: 2
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* How far the pointer may travel between a press and its release for the gesture to still count as
|
|
70
|
+
* a click rather than a drag, in canvas pixels.
|
|
71
|
+
*
|
|
72
|
+
* One number answers it for every button, and that is what keeps the canvas's background gestures
|
|
73
|
+
* out of each other's way: a press that stays put is a click — select, or ask for the menu — and one
|
|
74
|
+
* that moves is a drag — pan, or pull a selection box. Neither happens by accident, because a hand
|
|
75
|
+
* steady enough to have clicked never travels this far.
|
|
76
|
+
*
|
|
77
|
+
* @type {number}
|
|
78
|
+
*/
|
|
79
|
+
const CANVAS_CLICK_TOLERANCE_PX = 5;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* What a drag over the canvas background is doing.
|
|
83
|
+
* @enum {number}
|
|
84
|
+
*/
|
|
85
|
+
const CanvasDrag = {
|
|
86
|
+
None: 0,
|
|
87
|
+
Pan: 1,
|
|
88
|
+
Marquee: 2
|
|
89
|
+
};
|
|
90
|
+
|
|
39
91
|
/**
|
|
40
92
|
*
|
|
41
93
|
* @param {number[]} array
|
|
@@ -54,6 +106,111 @@ function array_toggle(array, value) {
|
|
|
54
106
|
export class NodeGraphView extends View {
|
|
55
107
|
el = document.createElement('div');
|
|
56
108
|
|
|
109
|
+
/**
|
|
110
|
+
* The view of each node currently on the canvas, by node id.
|
|
111
|
+
*
|
|
112
|
+
* A host that wants to decorate a node — mark it as carrying an error, flash it, badge it —
|
|
113
|
+
* needs to find its view, and reaching into the child list to do it depends on how this view
|
|
114
|
+
* happens to be assembled. Kept in step with the node list rather than rebuilt on demand.
|
|
115
|
+
*
|
|
116
|
+
* @readonly
|
|
117
|
+
* @type {Map<number, NodeView>}
|
|
118
|
+
*/
|
|
119
|
+
nodeViews = new Map();
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Nodes whose view has not yet recorded its drawn geometry — see {@link NodeView#measure}.
|
|
123
|
+
*
|
|
124
|
+
* Until this is empty, what the visual data holds for those nodes is the registry's estimate of
|
|
125
|
+
* how big they are, which is no basis for arranging a graph.
|
|
126
|
+
*
|
|
127
|
+
* @type {Set<number>}
|
|
128
|
+
*/
|
|
129
|
+
#unmeasured = new Set();
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Ask for the wires to be drawn again, at most once a frame. Set up in the constructor, where
|
|
133
|
+
* the canvas it repaints is; see the note there.
|
|
134
|
+
* @type {function()}
|
|
135
|
+
*/
|
|
136
|
+
#requestRedraw;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The type a port carries on a particular node instance. See the constructor.
|
|
140
|
+
* @type {function(NodeInstancePortReference):DataType}
|
|
141
|
+
*/
|
|
142
|
+
portDataType;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* @readonly
|
|
146
|
+
*/
|
|
147
|
+
on = {
|
|
148
|
+
...this.on,
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* A node's view has been built and is in {@link nodeViews}. Carries `(NodeInstance, NodeView)`.
|
|
152
|
+
*
|
|
153
|
+
* A host that decorates node views cannot do it off the graph's own `nodeAdded`: a view's
|
|
154
|
+
* own bindings are linked before its children's, so a host bound to that signal runs before
|
|
155
|
+
* this view's list has built anything. This one fires when the view exists, by construction.
|
|
156
|
+
*
|
|
157
|
+
* @readonly
|
|
158
|
+
* @type {Signal<NodeInstance, NodeView>}
|
|
159
|
+
*/
|
|
160
|
+
nodeViewAdded: new Signal(),
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Every node on the canvas has recorded its drawn geometry, so the visual data describes
|
|
164
|
+
* the graph as it actually looks rather than as the registry guessed it would.
|
|
165
|
+
*
|
|
166
|
+
* What an automatic layout waits for: see {@link NodeGraphEditorView#layout}.
|
|
167
|
+
*
|
|
168
|
+
* @readonly
|
|
169
|
+
* @type {Signal}
|
|
170
|
+
*/
|
|
171
|
+
measured: new Signal(),
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* The canvas itself was right-clicked — not a node, not a port. Carries the point, in this
|
|
175
|
+
* view's own pixels and in graph space, and the release that ended the gesture.
|
|
176
|
+
*
|
|
177
|
+
* Raised when a right press is released without having travelled, rather than off the DOM's
|
|
178
|
+
* own `contextmenu`: browsers disagree about when that one fires — on the press on some
|
|
179
|
+
* platforms, on the release on others — and a canvas that pans with the right button cannot
|
|
180
|
+
* have half of them opening a menu in the middle of the pan. The browser's own menu is
|
|
181
|
+
* suppressed either way, by this element's pointer device.
|
|
182
|
+
*
|
|
183
|
+
* The gesture a host turns into "add a node here": see
|
|
184
|
+
* {@link NodeGraphEditorView}'s search menu. Announced rather than acted on because what a
|
|
185
|
+
* canvas offers is the host's business, and this view has no library to offer.
|
|
186
|
+
*
|
|
187
|
+
* @readonly
|
|
188
|
+
* @type {Signal<{x: number, y: number, graph_x: number, graph_y: number, event: MouseEvent}>}
|
|
189
|
+
*/
|
|
190
|
+
canvasContextMenu: new Signal(),
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* A wire being dragged out of a port was let go over open canvas rather than over another
|
|
194
|
+
* port. Carries the port it came from and where it was dropped.
|
|
195
|
+
*
|
|
196
|
+
* The other half of the same idea: a wire that reaches nothing is an author saying what they
|
|
197
|
+
* want next and where it goes, and a host that can finish the thought — by offering the types
|
|
198
|
+
* that could take the wire and connecting the one that is picked — turns a failed gesture
|
|
199
|
+
* into two steps of authoring at once.
|
|
200
|
+
*
|
|
201
|
+
* @readonly
|
|
202
|
+
* @type {Signal<{endpoint: NodeInstancePortReference, x: number, y: number, graph_x: number, graph_y: number}>}
|
|
203
|
+
*/
|
|
204
|
+
connectionDropped: new Signal()
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Whether the graph can be edited through this view. See the constructor.
|
|
209
|
+
* @readonly
|
|
210
|
+
* @type {boolean}
|
|
211
|
+
*/
|
|
212
|
+
readOnly = false;
|
|
213
|
+
|
|
57
214
|
/**
|
|
58
215
|
*
|
|
59
216
|
* @param {NodeGraph} graph
|
|
@@ -62,6 +219,17 @@ export class NodeGraphView extends View {
|
|
|
62
219
|
* @param {NodeDescriptionVisualRegistry} nodeVisualRegistry
|
|
63
220
|
* @param {ActionProcessor} [actionProcessor] timeline that all graph edits are routed through
|
|
64
221
|
* @param {NodeGraphSelection} [selection]
|
|
222
|
+
* @param {function({node: NodeInstance, commit: function(string, *)}):View|null} [parameterViewFactory]
|
|
223
|
+
* see {@link NodeView}; passed through unchanged, so a host's controls reach every node
|
|
224
|
+
* @param {function(NodeInstancePortReference):DataType} [portDataType]
|
|
225
|
+
* the type a port carries on a particular node instance, which is what its marker is
|
|
226
|
+
* coloured by and what a wire out of it is drawn in. The declared type by default. A
|
|
227
|
+
* host whose ports are typed by what is wired into them — where an `add` is as wide as
|
|
228
|
+
* its inputs — supplies one, and calls {@link #refreshPortTypes} when its answers change.
|
|
229
|
+
* @param {boolean} [readOnly] show the graph without offering to change it: no wiring, no
|
|
230
|
+
* dragging, no parameter edits. What a host drilling into a graph it does not own — a
|
|
231
|
+
* locked node group — shows. Selection and the camera still work, because looking around
|
|
232
|
+
* is not editing.
|
|
65
233
|
*/
|
|
66
234
|
constructor({
|
|
67
235
|
graph,
|
|
@@ -69,7 +237,10 @@ export class NodeGraphView extends View {
|
|
|
69
237
|
camera,
|
|
70
238
|
nodeVisualRegistry,
|
|
71
239
|
actionProcessor = new ActionProcessor({}),
|
|
72
|
-
selection = new NodeGraphSelection()
|
|
240
|
+
selection = new NodeGraphSelection(),
|
|
241
|
+
parameterViewFactory = undefined,
|
|
242
|
+
portDataType = endpoint => endpoint.port.dataType,
|
|
243
|
+
readOnly = false
|
|
73
244
|
}) {
|
|
74
245
|
super();
|
|
75
246
|
|
|
@@ -79,6 +250,10 @@ export class NodeGraphView extends View {
|
|
|
79
250
|
*/
|
|
80
251
|
this.actionProcessor = actionProcessor;
|
|
81
252
|
|
|
253
|
+
this.readOnly = readOnly;
|
|
254
|
+
|
|
255
|
+
this.portDataType = portDataType;
|
|
256
|
+
|
|
82
257
|
/**
|
|
83
258
|
*
|
|
84
259
|
* @type {NodeGraphCamera}
|
|
@@ -105,12 +280,26 @@ export class NodeGraphView extends View {
|
|
|
105
280
|
|
|
106
281
|
this.addClass('ui-node-graph-view');
|
|
107
282
|
|
|
283
|
+
this.setClass('read-only', readOnly);
|
|
284
|
+
|
|
108
285
|
const self = this;
|
|
109
286
|
|
|
110
287
|
const tempConnection = {
|
|
111
288
|
enabled: false,
|
|
112
289
|
anchor: new Vector2(),
|
|
113
|
-
endpoint: null
|
|
290
|
+
endpoint: null,
|
|
291
|
+
|
|
292
|
+
/**
|
|
293
|
+
* Whether some port has already dealt with the drop that is ending this drag.
|
|
294
|
+
*
|
|
295
|
+
* A port's own pointer-up runs while the wire is still live and before the drag's, both
|
|
296
|
+
* being listeners for the same event on the way from the port to the window — so by the
|
|
297
|
+
* time the drag ends, this says whether the wire found a home. Without it there is no
|
|
298
|
+
* telling a wire dropped on open canvas from one dropped onto a port that refused it.
|
|
299
|
+
*
|
|
300
|
+
* @type {boolean}
|
|
301
|
+
*/
|
|
302
|
+
consumed: false
|
|
114
303
|
};
|
|
115
304
|
|
|
116
305
|
const vBlockCanvas = new ListView(graph.nodes, {
|
|
@@ -130,27 +319,71 @@ export class NodeGraphView extends View {
|
|
|
130
319
|
// dragging is editor behavior: managed here so moves land on the action timeline
|
|
131
320
|
enableDrag: false,
|
|
132
321
|
parameterSetCallback(n, parameterId, value) {
|
|
322
|
+
if (readOnly) {
|
|
323
|
+
// the controls are drawn — a locked graph is still worth reading — but
|
|
324
|
+
// nothing an author does in one reaches the model
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
|
|
133
328
|
actionProcessor.mark('set parameter');
|
|
134
329
|
actionProcessor.do(new NodeParameterSetAction(n, parameterId, value));
|
|
135
330
|
},
|
|
331
|
+
parameterViewFactory,
|
|
136
332
|
portCreationCallback(portView, port) {
|
|
333
|
+
// what this port carries on this node, where that is not what it declares
|
|
334
|
+
portView.setDataType(self.portDataType(node.getEndpoint(port.id)));
|
|
137
335
|
|
|
138
336
|
const draggableAspect = new DraggableAspect({
|
|
139
337
|
el: portView.el,
|
|
140
|
-
dragStart(p) {
|
|
338
|
+
dragStart(p, event) {
|
|
339
|
+
if (self.readOnly) {
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
141
342
|
|
|
142
343
|
const endpoint = new NodeInstancePortReference();
|
|
143
344
|
|
|
144
345
|
endpoint.set(node, port);
|
|
145
346
|
|
|
146
347
|
tempConnection.enabled = true;
|
|
348
|
+
tempConnection.consumed = false;
|
|
147
349
|
tempConnection.endpoint = endpoint;
|
|
148
350
|
|
|
351
|
+
// The wire is drawn from here to the anchor, and a gesture that ends
|
|
352
|
+
// before the first move would otherwise be drawn to — and dropped
|
|
353
|
+
// at — wherever the previous one finished.
|
|
354
|
+
readPositionFromMouseEvent(v2_pointer, event, self.el);
|
|
355
|
+
|
|
356
|
+
self.transformPointCanvas2Graph(v2_pointer, tempConnection.anchor);
|
|
149
357
|
},
|
|
150
358
|
dragEnd() {
|
|
359
|
+
if (!tempConnection.enabled) {
|
|
360
|
+
return;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const endpoint = tempConnection.endpoint;
|
|
364
|
+
const consumed = tempConnection.consumed;
|
|
365
|
+
|
|
151
366
|
tempConnection.enabled = false;
|
|
152
367
|
|
|
153
|
-
|
|
368
|
+
requestRedraw();
|
|
369
|
+
|
|
370
|
+
if (consumed) {
|
|
371
|
+
// some port took the drop, and has already made or refused the
|
|
372
|
+
// connection; there is nothing left of the gesture to report
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
const anchor = tempConnection.anchor;
|
|
377
|
+
|
|
378
|
+
self.transformPointGraph2Canvas(anchor, v2_pointer);
|
|
379
|
+
|
|
380
|
+
self.on.connectionDropped.send1({
|
|
381
|
+
endpoint,
|
|
382
|
+
x: v2_pointer.x,
|
|
383
|
+
y: v2_pointer.y,
|
|
384
|
+
graph_x: anchor.x,
|
|
385
|
+
graph_y: anchor.y,
|
|
386
|
+
});
|
|
154
387
|
},
|
|
155
388
|
drag(p, o, delta, event) {
|
|
156
389
|
// the anchor lives in graph space, derive it from the cursor position over this view
|
|
@@ -158,7 +391,7 @@ export class NodeGraphView extends View {
|
|
|
158
391
|
|
|
159
392
|
self.transformPointCanvas2Graph(v2_pointer, tempConnection.anchor);
|
|
160
393
|
|
|
161
|
-
|
|
394
|
+
requestRedraw();
|
|
162
395
|
}
|
|
163
396
|
});
|
|
164
397
|
|
|
@@ -166,6 +399,10 @@ export class NodeGraphView extends View {
|
|
|
166
399
|
//pointer released above the port
|
|
167
400
|
|
|
168
401
|
if (tempConnection.enabled) {
|
|
402
|
+
// whatever happens below, the wire has met a port and its fate is
|
|
403
|
+
// decided here rather than on open canvas
|
|
404
|
+
tempConnection.consumed = true;
|
|
405
|
+
|
|
169
406
|
/**
|
|
170
407
|
*
|
|
171
408
|
* @type {NodeInstancePortReference}
|
|
@@ -229,7 +466,20 @@ export class NodeGraphView extends View {
|
|
|
229
466
|
}
|
|
230
467
|
});
|
|
231
468
|
|
|
232
|
-
nodeView.bindSignal(nodeView.position.onChanged,
|
|
469
|
+
nodeView.bindSignal(nodeView.position.onChanged, requestRedraw);
|
|
470
|
+
|
|
471
|
+
// A node reports where the browser put its ports, and the wires are drawn to those
|
|
472
|
+
// points — so a node that has just been measured, or re-measured because its
|
|
473
|
+
// content changed, is a node whose wires no longer meet it.
|
|
474
|
+
self.#unmeasured.add(node.id);
|
|
475
|
+
|
|
476
|
+
nodeView.bindSignal(nodeView.on.measured, changed => {
|
|
477
|
+
if (changed) {
|
|
478
|
+
requestRedraw();
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
self.#markMeasured(node.id);
|
|
482
|
+
});
|
|
233
483
|
|
|
234
484
|
// selection state is reflected as a CSS class
|
|
235
485
|
function updateSelectionClass() {
|
|
@@ -253,6 +503,13 @@ export class NodeGraphView extends View {
|
|
|
253
503
|
dragStart() {
|
|
254
504
|
dragEntries = [];
|
|
255
505
|
|
|
506
|
+
if (readOnly) {
|
|
507
|
+
// an empty entry list makes the rest of the gesture a no-op, and the
|
|
508
|
+
// aspect still exists so a node keeps swallowing pointer gestures the
|
|
509
|
+
// canvas underneath would otherwise read as a pan
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
|
|
256
513
|
if (selection.containsNode(node.id)) {
|
|
257
514
|
// dragging a selected node moves the entire selection
|
|
258
515
|
selection.nodes.forEach(id => {
|
|
@@ -307,6 +564,10 @@ export class NodeGraphView extends View {
|
|
|
307
564
|
nodeView.on.linked.add(nodeDrag.start, nodeDrag);
|
|
308
565
|
nodeView.on.unlinked.add(nodeDrag.stop, nodeDrag);
|
|
309
566
|
|
|
567
|
+
self.nodeViews.set(node.id, nodeView);
|
|
568
|
+
|
|
569
|
+
self.on.nodeViewAdded.send2(node, nodeView);
|
|
570
|
+
|
|
310
571
|
return nodeView;
|
|
311
572
|
}
|
|
312
573
|
});
|
|
@@ -322,7 +583,6 @@ export class NodeGraphView extends View {
|
|
|
322
583
|
});
|
|
323
584
|
|
|
324
585
|
const v2_source = new Vector2();
|
|
325
|
-
const v2_target = new Vector2();
|
|
326
586
|
|
|
327
587
|
/**
|
|
328
588
|
*
|
|
@@ -335,17 +595,15 @@ export class NodeGraphView extends View {
|
|
|
335
595
|
|
|
336
596
|
ctx.lineCap = 'round';
|
|
337
597
|
|
|
338
|
-
//draw connections
|
|
598
|
+
//draw connections: a wire carries what comes out of its source
|
|
339
599
|
graph.connections.forEach(connection => {
|
|
340
600
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
this.drawConnection(ctx, v2_source, v2_target, source.port.dataType, selection.containsConnection(connection.id));
|
|
601
|
+
this.drawConnection(
|
|
602
|
+
ctx,
|
|
603
|
+
this.resolveConnectionPath(connection),
|
|
604
|
+
this.portDataType(connection.source),
|
|
605
|
+
selection.containsConnection(connection.id)
|
|
606
|
+
);
|
|
349
607
|
|
|
350
608
|
});
|
|
351
609
|
|
|
@@ -359,17 +617,38 @@ export class NodeGraphView extends View {
|
|
|
359
617
|
const endpoint = tempConnection.endpoint;
|
|
360
618
|
|
|
361
619
|
this.getEndpointGraphPosition(endpoint, v2_source);
|
|
362
|
-
|
|
620
|
+
|
|
621
|
+
const dataType = this.portDataType(endpoint);
|
|
622
|
+
|
|
623
|
+
const anchor = tempConnection.anchor;
|
|
624
|
+
|
|
363
625
|
if (endpoint.port.direction === PortDirection.Out) {
|
|
364
|
-
|
|
626
|
+
wire_build_direct(direct_wire, v2_source.x, v2_source.y, anchor.x, anchor.y);
|
|
365
627
|
} else {
|
|
366
|
-
|
|
628
|
+
wire_build_direct(direct_wire, anchor.x, anchor.y, v2_source.x, v2_source.y);
|
|
367
629
|
}
|
|
630
|
+
|
|
631
|
+
this.drawConnection(ctx, direct_wire, dataType);
|
|
368
632
|
}
|
|
369
633
|
};
|
|
370
634
|
|
|
371
635
|
this.addChild(vConnectionCanvas);
|
|
372
636
|
|
|
637
|
+
/**
|
|
638
|
+
* Ask for the wires to be drawn again.
|
|
639
|
+
*
|
|
640
|
+
* At most once a frame, because one gesture is many changes. Dragging a selection of forty
|
|
641
|
+
* nodes moves forty positions per pointer event, and each of those is a wire repaint that
|
|
642
|
+
* the thirty-nine after it make obsolete — forty full canvases where the screen can only
|
|
643
|
+
* show one. Everything that repaints the wires goes through here rather than calling the
|
|
644
|
+
* canvas, so there is one answer to how often that happens.
|
|
645
|
+
*
|
|
646
|
+
* @type {function()}
|
|
647
|
+
*/
|
|
648
|
+
const requestRedraw = frameThrottle(vConnectionCanvas.render, vConnectionCanvas);
|
|
649
|
+
|
|
650
|
+
this.#requestRedraw = requestRedraw;
|
|
651
|
+
|
|
373
652
|
this.size.onChanged.add((x, y) => {
|
|
374
653
|
vConnectionCanvas.size.set(x, y);
|
|
375
654
|
});
|
|
@@ -381,66 +660,481 @@ export class NodeGraphView extends View {
|
|
|
381
660
|
vBlockCanvas.scale.setScalar(scale);
|
|
382
661
|
vBlockCanvas.position.set(-p.x * scale, -p.y * scale);
|
|
383
662
|
|
|
384
|
-
|
|
663
|
+
requestRedraw();
|
|
385
664
|
}
|
|
386
665
|
|
|
387
666
|
this.initializeNavigationControls();
|
|
388
667
|
|
|
668
|
+
// A node view cannot measure itself when it is linked: the view framework links a child
|
|
669
|
+
// before putting its element in the document (see View#addChild), so at that moment the
|
|
670
|
+
// node has no layout box to read. By the time this fires every one of them is in place.
|
|
671
|
+
//
|
|
672
|
+
// Nodes added later — from a palette, from an undo — are in that same position and are
|
|
673
|
+
// caught by their own resize observer instead, on the browser's next rendering step.
|
|
674
|
+
this.on.linked.add(this.measureNodes, this);
|
|
675
|
+
|
|
389
676
|
this.on.linked.add(onCameraChange);
|
|
390
677
|
this.bindSignal(camera.position.onChanged, onCameraChange);
|
|
391
678
|
this.bindSignal(camera.scale.onChanged, onCameraChange);
|
|
392
679
|
|
|
680
|
+
// node ids are pooled, so a view left behind by a deleted node would be handed out for an
|
|
681
|
+
// unrelated future one
|
|
682
|
+
this.bindSignal(graph.on.nodeRemoved, node => {
|
|
683
|
+
this.nodeViews.delete(node.id);
|
|
684
|
+
|
|
685
|
+
// a node nobody will ever draw again is not one the canvas is still waiting on
|
|
686
|
+
this.#markMeasured(node.id);
|
|
687
|
+
});
|
|
688
|
+
|
|
393
689
|
// wires are drawn from graph state, repaint when the structure changes
|
|
394
|
-
this.bindSignal(graph.on.connectionAdded,
|
|
395
|
-
this.bindSignal(graph.on.connectionRemoved,
|
|
690
|
+
this.bindSignal(graph.on.connectionAdded, requestRedraw);
|
|
691
|
+
this.bindSignal(graph.on.connectionRemoved, requestRedraw);
|
|
396
692
|
|
|
397
693
|
// selected wires are drawn highlighted
|
|
398
|
-
this.bindSignal(selection.connections.on.added,
|
|
399
|
-
this.bindSignal(selection.connections.on.removed,
|
|
694
|
+
this.bindSignal(selection.connections.on.added, requestRedraw);
|
|
695
|
+
this.bindSignal(selection.connections.on.removed, requestRedraw);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Ask every port what it carries now, and draw the wires again in the answer's colours.
|
|
700
|
+
*
|
|
701
|
+
* For a host that resolves port types per node instance (see `portDataType` in the
|
|
702
|
+
* constructor): a graph whose types follow its wiring changes its mind about ports far from the
|
|
703
|
+
* edit — a literal made narrower retypes everything downstream of it — so the host says when,
|
|
704
|
+
* and every port is asked rather than the ones it can think of.
|
|
705
|
+
*
|
|
706
|
+
* @returns {void}
|
|
707
|
+
*/
|
|
708
|
+
refreshPortTypes() {
|
|
709
|
+
for (const node of this.graph.getNodes()) {
|
|
710
|
+
const nodeView = this.nodeViews.get(node.id);
|
|
711
|
+
|
|
712
|
+
if (nodeView === undefined) {
|
|
713
|
+
continue;
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
for (const portView of nodeView.portViews.values()) {
|
|
717
|
+
portView.setDataType(this.portDataType(node.getEndpoint(portView.port.id)));
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
this.#requestRedraw();
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
/**
|
|
725
|
+
* Have every node on the canvas record where the browser has put it.
|
|
726
|
+
*
|
|
727
|
+
* The nodes measure themselves as their content changes, so this is not the usual path — it is
|
|
728
|
+
* how the canvas gets its first measurement, at the one moment it is known that every node is
|
|
729
|
+
* in the document and none of them has been asked yet.
|
|
730
|
+
*
|
|
731
|
+
* @returns {void}
|
|
732
|
+
*/
|
|
733
|
+
measureNodes() {
|
|
734
|
+
for (const nodeView of this.nodeViews.values()) {
|
|
735
|
+
nodeView.measure();
|
|
736
|
+
}
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* Whether the visual data describes the graph as drawn, rather than as the visual registry
|
|
741
|
+
* estimated it.
|
|
742
|
+
*
|
|
743
|
+
* False while the canvas is not on screen at all: an unlinked view has drawn nothing, and a
|
|
744
|
+
* node's size is not knowable without drawing it.
|
|
745
|
+
*
|
|
746
|
+
* @returns {boolean}
|
|
747
|
+
*/
|
|
748
|
+
isMeasured() {
|
|
749
|
+
return this.isLinked && this.#unmeasured.size === 0;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* @param {number} node_id
|
|
754
|
+
*/
|
|
755
|
+
#markMeasured(node_id) {
|
|
756
|
+
if (!this.#unmeasured.delete(node_id)) {
|
|
757
|
+
//already accounted for
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
if (this.#unmeasured.size === 0) {
|
|
762
|
+
this.on.measured.send0();
|
|
763
|
+
}
|
|
400
764
|
}
|
|
401
765
|
|
|
766
|
+
/**
|
|
767
|
+
* Wire up what the canvas background does with the pointer.
|
|
768
|
+
*
|
|
769
|
+
* Three gestures want that background — moving the view, pulling a selection box across it, and
|
|
770
|
+
* asking for the add-node menu — and a canvas that guessed between them would keep getting it
|
|
771
|
+
* wrong. They are told apart by which button began the gesture, the way graph editors of this
|
|
772
|
+
* kind have long settled it (Unreal's Blueprint canvas among them):
|
|
773
|
+
*
|
|
774
|
+
* | gesture | what it does |
|
|
775
|
+
* |--------------------------|-------------------------------------------------------|
|
|
776
|
+
* | drag with the left | pull a selection box; SHIFT adds, CTRL toggles |
|
|
777
|
+
* | drag with right, middle | pan |
|
|
778
|
+
* | click with the left | select what is under the cursor, or clear the selection |
|
|
779
|
+
* | click with the right | ask the host for the add-node menu |
|
|
780
|
+
* | wheel | zoom about the cursor |
|
|
781
|
+
*
|
|
782
|
+
* A click and a drag are the same two events with a different amount of travel in between, so
|
|
783
|
+
* one tolerance decides which a gesture was — see {@link CANVAS_CLICK_TOLERANCE_PX}. That is how
|
|
784
|
+
* the right button both pans and opens a menu without ever doing one when the other was meant.
|
|
785
|
+
*
|
|
786
|
+
* A press over a node or a port never arrives here: those run pointer devices of their own and
|
|
787
|
+
* stop it where it is raised, so everything below is about open canvas.
|
|
788
|
+
*
|
|
789
|
+
* @returns {void}
|
|
790
|
+
*/
|
|
402
791
|
initializeNavigationControls() {
|
|
403
|
-
const cameraPosition = new Vector2();
|
|
404
792
|
const camera = this.camera;
|
|
405
793
|
|
|
794
|
+
const cameraPosition = new Vector2();
|
|
795
|
+
|
|
796
|
+
/**
|
|
797
|
+
* The selection box, while one is being pulled.
|
|
798
|
+
*
|
|
799
|
+
* An element of its own rather than something drawn on the wire canvas: that canvas is under
|
|
800
|
+
* the nodes, and a box whose far edge vanishes behind one is not showing what it is about to
|
|
801
|
+
* select.
|
|
802
|
+
*
|
|
803
|
+
* @type {EmptyView}
|
|
804
|
+
*/
|
|
805
|
+
const vMarquee = new EmptyView({ classList: ['marquee'] });
|
|
806
|
+
|
|
807
|
+
vMarquee.visible = false;
|
|
808
|
+
|
|
809
|
+
this.addChild(vMarquee);
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* The canvas gesture in flight.
|
|
813
|
+
*/
|
|
814
|
+
const gesture = {
|
|
815
|
+
/**
|
|
816
|
+
* Which button began it, as {@link MOUSE_BUTTON} numbers them, or -1 between gestures.
|
|
817
|
+
*
|
|
818
|
+
* A press that a node or a port swallowed never sets this, so a gesture that was never
|
|
819
|
+
* the canvas's own is one the canvas stays out of — including the release that ends it,
|
|
820
|
+
* which does reach here on its way up the tree.
|
|
821
|
+
*
|
|
822
|
+
* @type {number}
|
|
823
|
+
*/
|
|
824
|
+
button: -1,
|
|
825
|
+
/** where it began, in canvas pixels */
|
|
826
|
+
origin: new Vector2(),
|
|
827
|
+
/** whether it has travelled beyond {@link CANVAS_CLICK_TOLERANCE_PX} */
|
|
828
|
+
travelled: false,
|
|
829
|
+
/** what its drag is doing, once it has become one */
|
|
830
|
+
drag: CanvasDrag.None
|
|
831
|
+
};
|
|
832
|
+
|
|
833
|
+
/** graph-space corner the box was pulled from */
|
|
834
|
+
const marquee_anchor = new Vector2();
|
|
835
|
+
|
|
836
|
+
/** graph-space corner the cursor is at */
|
|
837
|
+
const marquee_head = new Vector2();
|
|
838
|
+
|
|
839
|
+
const marquee_region = new AABB2();
|
|
840
|
+
|
|
841
|
+
const v2_corner_a = new Vector2();
|
|
842
|
+
const v2_corner_b = new Vector2();
|
|
843
|
+
|
|
844
|
+
const cursor = new Vector2();
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* Put the box on screen across its two graph-space corners, and say what letting go of it
|
|
848
|
+
* there would do.
|
|
849
|
+
*
|
|
850
|
+
* @param {MouseEvent} event source of modifier key state
|
|
851
|
+
*/
|
|
852
|
+
const drawMarquee = (event) => {
|
|
853
|
+
this.transformPointGraph2Canvas(marquee_anchor, v2_corner_a);
|
|
854
|
+
this.transformPointGraph2Canvas(marquee_head, v2_corner_b);
|
|
855
|
+
|
|
856
|
+
const x0 = min2(v2_corner_a.x, v2_corner_b.x);
|
|
857
|
+
const y0 = min2(v2_corner_a.y, v2_corner_b.y);
|
|
858
|
+
|
|
859
|
+
vMarquee.position.set(x0, y0);
|
|
860
|
+
vMarquee.size.set(
|
|
861
|
+
max2(v2_corner_a.x, v2_corner_b.x) - x0,
|
|
862
|
+
max2(v2_corner_a.y, v2_corner_b.y) - y0
|
|
863
|
+
);
|
|
864
|
+
|
|
865
|
+
// which of the three this is, before it is let go: the modifier that decides is held
|
|
866
|
+
// where the thing it changes cannot show it
|
|
867
|
+
vMarquee.setClass('additive', event.shiftKey && !event.ctrlKey);
|
|
868
|
+
vMarquee.setClass('toggle', event.ctrlKey);
|
|
869
|
+
};
|
|
870
|
+
|
|
406
871
|
const draggableAspect = new DraggableAspect({
|
|
407
872
|
el: this.el,
|
|
408
|
-
dragStart() {
|
|
409
|
-
|
|
873
|
+
dragStart: (position) => {
|
|
874
|
+
if (gesture.button === MOUSE_BUTTON.LEFT) {
|
|
875
|
+
gesture.drag = CanvasDrag.Marquee;
|
|
876
|
+
|
|
877
|
+
// anchored in graph space, so the box stays over the graph it was drawn across
|
|
878
|
+
this.transformPointCanvas2Graph(position, marquee_anchor);
|
|
879
|
+
|
|
880
|
+
marquee_head.copy(marquee_anchor);
|
|
881
|
+
} else if (
|
|
882
|
+
gesture.button === MOUSE_BUTTON.RIGHT
|
|
883
|
+
|| gesture.button === MOUSE_BUTTON.MIDDLE
|
|
884
|
+
) {
|
|
885
|
+
gesture.drag = CanvasDrag.Pan;
|
|
886
|
+
|
|
887
|
+
cameraPosition.copy(camera.position);
|
|
888
|
+
} else {
|
|
889
|
+
gesture.drag = CanvasDrag.None;
|
|
890
|
+
}
|
|
891
|
+
},
|
|
892
|
+
drag: (position, origin, delta, event) => {
|
|
893
|
+
if (!gesture.travelled && position.distanceTo(origin) > CANVAS_CLICK_TOLERANCE_PX) {
|
|
894
|
+
gesture.travelled = true;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
if (gesture.drag === CanvasDrag.Pan) {
|
|
898
|
+
const d = origin.clone();
|
|
899
|
+
|
|
900
|
+
d.sub(position);
|
|
901
|
+
d.multiplyScalar(1 / camera.scale.getValue());
|
|
902
|
+
|
|
903
|
+
d.add(cameraPosition);
|
|
904
|
+
|
|
905
|
+
camera.position.copy(d);
|
|
906
|
+
} else if (gesture.drag === CanvasDrag.Marquee) {
|
|
907
|
+
this.transformPointCanvas2Graph(position, marquee_head);
|
|
908
|
+
|
|
909
|
+
// nothing is shown until the gesture is a drag, or every click would flash a box
|
|
910
|
+
vMarquee.visible = gesture.travelled;
|
|
911
|
+
|
|
912
|
+
drawMarquee(event);
|
|
913
|
+
}
|
|
410
914
|
},
|
|
411
|
-
|
|
412
|
-
const
|
|
915
|
+
dragEnd: (position, origin, event) => {
|
|
916
|
+
const drag = gesture.drag;
|
|
917
|
+
|
|
918
|
+
gesture.drag = CanvasDrag.None;
|
|
413
919
|
|
|
414
|
-
|
|
415
|
-
|
|
920
|
+
if (drag !== CanvasDrag.Marquee) {
|
|
921
|
+
return;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
vMarquee.visible = false;
|
|
416
925
|
|
|
417
|
-
|
|
926
|
+
if (!gesture.travelled) {
|
|
927
|
+
// a click made with an unsteady hand; the release deals with it as one
|
|
928
|
+
return;
|
|
929
|
+
}
|
|
418
930
|
|
|
419
|
-
|
|
931
|
+
marquee_region.setBoundsUnordered(
|
|
932
|
+
marquee_anchor.x, marquee_anchor.y,
|
|
933
|
+
marquee_head.x, marquee_head.y
|
|
934
|
+
);
|
|
935
|
+
|
|
936
|
+
this.applySelectionRegion(marquee_region, event);
|
|
420
937
|
}
|
|
421
938
|
});
|
|
422
939
|
|
|
423
|
-
draggableAspect.getPointer()
|
|
424
|
-
const oldScale = camera.scale.getValue();
|
|
940
|
+
const pointer = draggableAspect.getPointer();
|
|
425
941
|
|
|
426
|
-
|
|
942
|
+
pointer.on.down.add((position, event) => {
|
|
943
|
+
if (gesture.button !== -1) {
|
|
944
|
+
// a second button pressed during a gesture; the one that began it keeps it
|
|
945
|
+
return;
|
|
946
|
+
}
|
|
947
|
+
|
|
948
|
+
gesture.button = event.button;
|
|
949
|
+
gesture.origin.copy(position);
|
|
950
|
+
gesture.travelled = false;
|
|
951
|
+
|
|
952
|
+
if (event.button === MOUSE_BUTTON.MIDDLE) {
|
|
953
|
+
// otherwise the browser answers a middle press with a scroll gesture of its own
|
|
954
|
+
event.preventDefault();
|
|
955
|
+
}
|
|
427
956
|
});
|
|
428
957
|
|
|
429
|
-
//
|
|
430
|
-
//
|
|
431
|
-
|
|
958
|
+
// A release, and with it the two gestures that are made of not having moved. Both are the
|
|
959
|
+
// canvas's only if the press was: a release over the canvas ends node drags and port drags
|
|
960
|
+
// too, and those are already spoken for.
|
|
961
|
+
pointer.on.up.add((position, event) => {
|
|
962
|
+
if (event.button !== gesture.button || gesture.travelled) {
|
|
963
|
+
return;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
if (event.button === MOUSE_BUTTON.LEFT) {
|
|
967
|
+
// clicks over the background select wires, or clear the selection
|
|
968
|
+
this.transformPointCanvas2Graph(position, cursor);
|
|
969
|
+
|
|
970
|
+
const connection = this.findConnectionAt(cursor);
|
|
971
|
+
|
|
972
|
+
this.applySelectionClick(null, connection !== null ? connection.id : null, event);
|
|
973
|
+
} else if (event.button === MOUSE_BUTTON.RIGHT) {
|
|
974
|
+
this.transformPointCanvas2Graph(position, cursor);
|
|
975
|
+
|
|
976
|
+
this.on.canvasContextMenu.send1({
|
|
977
|
+
x: position.x,
|
|
978
|
+
y: position.y,
|
|
979
|
+
graph_x: cursor.x,
|
|
980
|
+
graph_y: cursor.y,
|
|
981
|
+
event
|
|
982
|
+
});
|
|
983
|
+
}
|
|
984
|
+
});
|
|
432
985
|
|
|
433
|
-
|
|
434
|
-
|
|
986
|
+
// the release that closes the gesture, wherever on the page it happens
|
|
987
|
+
pointer.on.globalUp.add((position, event) => {
|
|
988
|
+
if (event.button === gesture.button) {
|
|
989
|
+
gesture.button = -1;
|
|
990
|
+
}
|
|
991
|
+
});
|
|
435
992
|
|
|
436
|
-
|
|
993
|
+
pointer.on.wheel.add((delta, position) => {
|
|
994
|
+
const oldScale = camera.scale.getValue();
|
|
437
995
|
|
|
438
|
-
|
|
996
|
+
camera.zoomAt(position, (1 - delta.y / 20) * oldScale);
|
|
439
997
|
});
|
|
440
998
|
|
|
999
|
+
// A canvas taken off screen mid-gesture never sees the release that would have ended it, and
|
|
1000
|
+
// one that came back still believing a button was down would ignore the next press.
|
|
1001
|
+
const abandonGesture = () => {
|
|
1002
|
+
gesture.button = -1;
|
|
1003
|
+
gesture.drag = CanvasDrag.None;
|
|
1004
|
+
gesture.travelled = false;
|
|
1005
|
+
|
|
1006
|
+
vMarquee.visible = false;
|
|
1007
|
+
};
|
|
1008
|
+
|
|
441
1009
|
this.on.linked.add(draggableAspect.start, draggableAspect);
|
|
442
1010
|
this.on.unlinked.add(draggableAspect.stop, draggableAspect);
|
|
1011
|
+
this.on.unlinked.add(abandonGesture);
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
/**
|
|
1015
|
+
* The nodes a graph-space box touches.
|
|
1016
|
+
*
|
|
1017
|
+
* Touches rather than encloses: a box that has to go around whole nodes is a box drawn wider
|
|
1018
|
+
* than the graph, and every editor that offers the gesture takes overlap for that reason.
|
|
1019
|
+
*
|
|
1020
|
+
* @param {AABB2} region graph-space box
|
|
1021
|
+
* @returns {number[]} node ids
|
|
1022
|
+
*/
|
|
1023
|
+
findNodesInRegion(region) {
|
|
1024
|
+
const result = [];
|
|
1025
|
+
|
|
1026
|
+
for (const node of this.graph.getNodes()) {
|
|
1027
|
+
const nodeVisual = this.visual.getNode(node.id);
|
|
1028
|
+
|
|
1029
|
+
if (nodeVisual === undefined) {
|
|
1030
|
+
// nothing has been drawn for it, so there is nothing the box could have gone around
|
|
1031
|
+
continue;
|
|
1032
|
+
}
|
|
443
1033
|
|
|
1034
|
+
const box = nodeVisual.dimensions;
|
|
1035
|
+
|
|
1036
|
+
if (aabb2_intersects_aabb2(
|
|
1037
|
+
region.x0, region.y0, region.x1, region.y1,
|
|
1038
|
+
box.x0, box.y0, box.x1, box.y1
|
|
1039
|
+
)) {
|
|
1040
|
+
result.push(node.id);
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
return result;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
/**
|
|
1048
|
+
* The wires a graph-space box holds whole.
|
|
1049
|
+
*
|
|
1050
|
+
* Whole, unlike the nodes, and for the same reason they are not: a box around a few nodes cuts
|
|
1051
|
+
* across every wire leaving them for elsewhere, and taking those would turn a gesture aimed at
|
|
1052
|
+
* four nodes into half the graph highlighted. A wire the box holds is one whose ports are both
|
|
1053
|
+
* inside it — so its nodes are in the selection too, and the box selects what it looks like it
|
|
1054
|
+
* selects.
|
|
1055
|
+
*
|
|
1056
|
+
* @param {AABB2} region graph-space box
|
|
1057
|
+
* @returns {number[]} connection ids
|
|
1058
|
+
*/
|
|
1059
|
+
findConnectionsInRegion(region) {
|
|
1060
|
+
const result = [];
|
|
1061
|
+
|
|
1062
|
+
const connections = this.graph.connections;
|
|
1063
|
+
const n = connections.length;
|
|
1064
|
+
|
|
1065
|
+
for (let i = 0; i < n; i++) {
|
|
1066
|
+
const connection = connections.get(i);
|
|
1067
|
+
|
|
1068
|
+
this.resolveConnectionPath(connection).computeBounds(wire_aabb);
|
|
1069
|
+
|
|
1070
|
+
if (aabb2_contains(
|
|
1071
|
+
region.x0, region.y0, region.x1, region.y1,
|
|
1072
|
+
wire_aabb.x0, wire_aabb.y0, wire_aabb.x1, wire_aabb.y1
|
|
1073
|
+
)) {
|
|
1074
|
+
result.push(connection.id);
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
return result;
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
/**
|
|
1082
|
+
* Apply a rubber-band gesture: what the box went around, met with the selection already there
|
|
1083
|
+
* the way the modifier keys ask — plain replaces, SHIFT adds, CTRL toggles.
|
|
1084
|
+
*
|
|
1085
|
+
* The same three {@link #applySelectionClick} offers, because they are one question asked of
|
|
1086
|
+
* more than one element at a time.
|
|
1087
|
+
*
|
|
1088
|
+
* @param {AABB2} region graph-space box
|
|
1089
|
+
* @param {MouseEvent|PointerEvent} event source of modifier key state
|
|
1090
|
+
* @returns {void}
|
|
1091
|
+
*/
|
|
1092
|
+
applySelectionRegion(region, event) {
|
|
1093
|
+
const selection = this.selection;
|
|
1094
|
+
|
|
1095
|
+
const boxed_nodes = this.findNodesInRegion(region);
|
|
1096
|
+
const boxed_connections = this.findConnectionsInRegion(region);
|
|
1097
|
+
|
|
1098
|
+
let nodes, connections;
|
|
1099
|
+
|
|
1100
|
+
if (event.ctrlKey || event.shiftKey) {
|
|
1101
|
+
|
|
1102
|
+
nodes = selection.nodes.asArray().slice();
|
|
1103
|
+
connections = selection.connections.asArray().slice();
|
|
1104
|
+
|
|
1105
|
+
if (event.ctrlKey) {
|
|
1106
|
+
|
|
1107
|
+
boxed_nodes.forEach(id => array_toggle(nodes, id));
|
|
1108
|
+
boxed_connections.forEach(id => array_toggle(connections, id));
|
|
1109
|
+
|
|
1110
|
+
} else {
|
|
1111
|
+
|
|
1112
|
+
boxed_nodes.forEach(id => {
|
|
1113
|
+
if (!nodes.includes(id)) {
|
|
1114
|
+
nodes.push(id);
|
|
1115
|
+
}
|
|
1116
|
+
});
|
|
1117
|
+
|
|
1118
|
+
boxed_connections.forEach(id => {
|
|
1119
|
+
if (!connections.includes(id)) {
|
|
1120
|
+
connections.push(id);
|
|
1121
|
+
}
|
|
1122
|
+
});
|
|
1123
|
+
|
|
1124
|
+
}
|
|
1125
|
+
|
|
1126
|
+
} else {
|
|
1127
|
+
nodes = boxed_nodes;
|
|
1128
|
+
connections = boxed_connections;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
if (selection.matches(nodes, connections)) {
|
|
1132
|
+
// no change, keep the timeline clean
|
|
1133
|
+
return;
|
|
1134
|
+
}
|
|
1135
|
+
|
|
1136
|
+
this.actionProcessor.mark('select');
|
|
1137
|
+
this.actionProcessor.do(new SelectionSetAction(selection, nodes, connections));
|
|
444
1138
|
}
|
|
445
1139
|
|
|
446
1140
|
/**
|
|
@@ -458,24 +1152,19 @@ export class NodeGraphView extends View {
|
|
|
458
1152
|
for (let i = 0; i < n; i++) {
|
|
459
1153
|
const connection = connections.get(i);
|
|
460
1154
|
|
|
461
|
-
this.
|
|
462
|
-
this.getEndpointGraphPosition(connection.target, v2_hit_target);
|
|
1155
|
+
const path = this.resolveConnectionPath(connection);
|
|
463
1156
|
|
|
464
|
-
|
|
1157
|
+
path.computeBounds(wire_aabb);
|
|
465
1158
|
|
|
466
1159
|
if (
|
|
467
|
-
point.x < wire_aabb
|
|
468
|
-
|| point.y < wire_aabb
|
|
1160
|
+
point.x < wire_aabb.x0 - best_distance || point.x > wire_aabb.x1 + best_distance
|
|
1161
|
+
|| point.y < wire_aabb.y0 - best_distance || point.y > wire_aabb.y1 + best_distance
|
|
469
1162
|
) {
|
|
470
1163
|
//outside the inflated bounds, can't beat the current best
|
|
471
1164
|
continue;
|
|
472
1165
|
}
|
|
473
1166
|
|
|
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
|
-
);
|
|
1167
|
+
const distance = path.distanceToPoint(point.x, point.y);
|
|
479
1168
|
|
|
480
1169
|
if (distance < best_distance) {
|
|
481
1170
|
best_distance = distance;
|
|
@@ -563,24 +1252,51 @@ export class NodeGraphView extends View {
|
|
|
563
1252
|
return _x0 < this.size.x && _x1 > 0 && _y0 < this.size.y && _y1 > 0;
|
|
564
1253
|
}
|
|
565
1254
|
|
|
1255
|
+
/**
|
|
1256
|
+
* The path a connection is drawn along — its route while that route still meets its ports, and
|
|
1257
|
+
* a plain curve between them otherwise. See {@link wire_resolve_path}.
|
|
1258
|
+
*
|
|
1259
|
+
* The fallback is a shared scratch object, so the result is only valid until this is called
|
|
1260
|
+
* again.
|
|
1261
|
+
*
|
|
1262
|
+
* @param {Connection} connection
|
|
1263
|
+
* @returns {ConnectionVisualData}
|
|
1264
|
+
*/
|
|
1265
|
+
resolveConnectionPath(connection) {
|
|
1266
|
+
this.getEndpointGraphPosition(connection.source, v2_hit_source);
|
|
1267
|
+
this.getEndpointGraphPosition(connection.target, v2_hit_target);
|
|
1268
|
+
|
|
1269
|
+
return wire_resolve_path(
|
|
1270
|
+
this.visual.getConnection(connection.id),
|
|
1271
|
+
v2_hit_source.x, v2_hit_source.y,
|
|
1272
|
+
v2_hit_target.x, v2_hit_target.y,
|
|
1273
|
+
direct_wire
|
|
1274
|
+
);
|
|
1275
|
+
}
|
|
1276
|
+
|
|
566
1277
|
/**
|
|
567
1278
|
*
|
|
568
1279
|
* @param {CanvasRenderingContext2D} ctx
|
|
569
|
-
* @param {
|
|
570
|
-
* @param {Vector2} target
|
|
1280
|
+
* @param {ConnectionVisualData} path
|
|
571
1281
|
* @param {DataType} dataType
|
|
572
1282
|
* @param {boolean} [selected] selected wires are drawn with a highlight halo
|
|
573
1283
|
*/
|
|
574
|
-
drawConnection(ctx,
|
|
575
|
-
|
|
1284
|
+
drawConnection(ctx, path, dataType, selected = false) {
|
|
1285
|
+
const segments = path.segment_count;
|
|
1286
|
+
|
|
1287
|
+
if (segments === 0) {
|
|
1288
|
+
return;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1291
|
+
path.computeBounds(wire_aabb);
|
|
576
1292
|
|
|
577
1293
|
const cw_2 = (CONNECTION_WIDTH / 2);
|
|
578
1294
|
|
|
579
1295
|
if (!this.isGraphAABBVisible(
|
|
580
|
-
wire_aabb
|
|
581
|
-
wire_aabb
|
|
582
|
-
wire_aabb
|
|
583
|
-
wire_aabb
|
|
1296
|
+
wire_aabb.x0 - cw_2,
|
|
1297
|
+
wire_aabb.y0 - cw_2,
|
|
1298
|
+
wire_aabb.x1 + cw_2,
|
|
1299
|
+
wire_aabb.y1 + cw_2
|
|
584
1300
|
)) {
|
|
585
1301
|
//connection is not visible, don't draw
|
|
586
1302
|
return;
|
|
@@ -591,23 +1307,27 @@ export class NodeGraphView extends View {
|
|
|
591
1307
|
|
|
592
1308
|
const alpha = clamp(cameraScale * CONNECTION_WIDTH, 0, 1);
|
|
593
1309
|
|
|
594
|
-
|
|
1310
|
+
ctx.beginPath();
|
|
595
1311
|
|
|
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
|
-
}
|
|
1312
|
+
for (let segment = 0; segment < segments; segment++) {
|
|
1313
|
+
path.write_segment_bezier(wire_bezier, 0, segment);
|
|
601
1314
|
|
|
602
|
-
|
|
1315
|
+
//the graph->canvas transform is affine, transforming the control polygon transforms the curve
|
|
1316
|
+
for (let i = 0; i < 8; i += 2) {
|
|
1317
|
+
wire_bezier[i] = (wire_bezier[i] - cameraPosition.x) * cameraScale;
|
|
1318
|
+
wire_bezier[i + 1] = (wire_bezier[i + 1] - cameraPosition.y) * cameraScale;
|
|
1319
|
+
}
|
|
603
1320
|
|
|
604
|
-
|
|
1321
|
+
if (segment === 0) {
|
|
1322
|
+
ctx.moveTo(wire_bezier[0], wire_bezier[1]);
|
|
1323
|
+
}
|
|
605
1324
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
1325
|
+
ctx.bezierCurveTo(
|
|
1326
|
+
wire_bezier[2], wire_bezier[3],
|
|
1327
|
+
wire_bezier[4], wire_bezier[5],
|
|
1328
|
+
wire_bezier[6], wire_bezier[7]
|
|
1329
|
+
);
|
|
1330
|
+
}
|
|
611
1331
|
|
|
612
1332
|
if (selected) {
|
|
613
1333
|
ctx.lineWidth = max2(1, (CONNECTION_WIDTH + 4) * cameraScale);
|
|
@@ -646,6 +1366,19 @@ export class NodeGraphView extends View {
|
|
|
646
1366
|
output.set(x, y);
|
|
647
1367
|
}
|
|
648
1368
|
|
|
1369
|
+
unlink() {
|
|
1370
|
+
// The list drops every node view on unlink and rebuilds them on link, so keeping the map
|
|
1371
|
+
// across that would leave entries for views that no longer exist — and for nodes deleted
|
|
1372
|
+
// while unlinked, entries that nothing will ever replace.
|
|
1373
|
+
this.nodeViews.clear();
|
|
1374
|
+
|
|
1375
|
+
// and with them go the measurements they were going to make; the views built on the next
|
|
1376
|
+
// link have to make their own
|
|
1377
|
+
this.#unmeasured.clear();
|
|
1378
|
+
|
|
1379
|
+
super.unlink();
|
|
1380
|
+
}
|
|
1381
|
+
|
|
649
1382
|
/**
|
|
650
1383
|
* Convert point from Graph coordinate space to Canvas coordinate space
|
|
651
1384
|
* @param {Vector2} input
|