@woosh/meep-engine 3.15.0 → 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/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/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/BufferResourceDescriptor.js +193 -184
- package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
- package/src/shade/device/graph/TextureResourceDescriptor.js +12 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +8 -0
- package/src/shade/playground/avboit/main.js +3 -3
- package/src/shade/playground/basis_textures/main.js +1 -1
- package/src/shade/playground/ground_seam/main.js +1 -1
- package/src/shade/playground/particle_editor/README.md +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 +28 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +140 -8
- package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
- package/src/shade/renderer/atmosphere/GPUSky.js +4 -2
- package/src/shade/renderer/buffer/graph_read_buffer.d.ts.map +1 -1
- package/src/shade/renderer/buffer/graph_read_buffer.js +8 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +30 -0
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +84 -0
- package/src/shade/renderer/buffer/table/gpu_database_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/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +1 -2
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +0 -3
- package/src/shade/renderer/postprocess/dof/gather/DepthOfFieldU.js +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/DepthOfField.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.js +3 -2
- package/src/shade/renderer/postprocess/nss/generate_NSS_WEIGHTS_ACTUAL.js +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +87 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +61 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +179 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +27 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts +9 -2
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +12 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +58 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +25 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +69 -10
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +10 -4
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +4 -39
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +7 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +16 -2
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts +3 -3
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/geometry_deduplicate.js +29 -23
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/anchor_grow_topological.js +3 -3
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts +4 -4
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/cover_greedy.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_refit_validate.js +2 -2
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts +7 -7
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/geometry/internal/match_solve_transform.js +79 -71
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/math/chunk_lower_bound_branchless.js +3 -1
- package/src/shade/renderer/shader/chunk/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
|
@@ -0,0 +1,859 @@
|
|
|
1
|
+
import { frameThrottle } from "../../../src/core/function/frameThrottle.js";
|
|
2
|
+
import AABB2 from "../../../src/core/geom/2d/aabb/AABB2.js";
|
|
3
|
+
import Vector2 from "../../../src/core/geom/Vector2.js";
|
|
4
|
+
import { clamp } from "../../../src/core/math/clamp.js";
|
|
5
|
+
import { min2 } from "../../../src/core/math/min2.js";
|
|
6
|
+
import ObservedBoolean from "../../../src/core/model/ObservedBoolean.js";
|
|
7
|
+
import { DraggableAspect } from "../../../src/engine/ui/DraggableAspect.js";
|
|
8
|
+
import { readPositionFromMouseEvent } from "../../../src/engine/input/devices/PointerDevice.js";
|
|
9
|
+
import ButtonView from "../../../src/view/elements/button/ButtonView.js";
|
|
10
|
+
import View from "../../../src/view/View.js";
|
|
11
|
+
import { AutoCanvasView } from "../ecs/components/common/AutoCanvasView.js";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The whole graph at a glance, with a box around the part being looked at.
|
|
15
|
+
*
|
|
16
|
+
* A node graph outgrows its viewport almost immediately, and from inside one there is no way to
|
|
17
|
+
* tell whether the nodes off the left edge are three or three hundred, or which direction the rest
|
|
18
|
+
* of the graph is in. This answers both, and moves the camera when it is clicked.
|
|
19
|
+
*
|
|
20
|
+
* ## Why it is not part of the graph view
|
|
21
|
+
*
|
|
22
|
+
* Because it is a second, cheaper drawing of the same model — nodes as filled boxes, none of the
|
|
23
|
+
* DOM the real one is made of — and because a host that does not want one should not have to carry
|
|
24
|
+
* it. It reads a {@link NodeGraphView} and writes one thing back, the camera position; that is the
|
|
25
|
+
* whole contract.
|
|
26
|
+
*
|
|
27
|
+
* ## What it draws from
|
|
28
|
+
*
|
|
29
|
+
* The visual data, which is where a node's drawn box and a wire's route both end up, so what is on
|
|
30
|
+
* the map is what is on the canvas rather than a sketch of it. The wires in particular are the
|
|
31
|
+
* routes the layout found, resolved through the graph view's own
|
|
32
|
+
* {@link NodeGraphView#resolveConnectionPath} — the same call the real canvas draws from, so a wire
|
|
33
|
+
* that goes the long way around a node goes the long way around it here too. A map that drew a
|
|
34
|
+
* straight line from every source to every target would show a tangle the graph does not have, and
|
|
35
|
+
* the one question a map has to answer is what the graph looks like.
|
|
36
|
+
*
|
|
37
|
+
* Nothing is read out of the DOM, and where every wire goes is worked out once and kept — see
|
|
38
|
+
* {@link #buildWires} — so moving the camera costs a repaint and no arithmetic.
|
|
39
|
+
*
|
|
40
|
+
* ## Collapsing
|
|
41
|
+
*
|
|
42
|
+
* A map is worth its corner of the canvas most of the time and not all of the time, so it folds
|
|
43
|
+
* away to its own button. {@link #collapsed} is the state and is public: a host that wants to
|
|
44
|
+
* remember it across sessions, or keep two maps of the same graph in step, drives it from there.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* How much space is left around the graph inside the map, as a fraction of the smaller side. A
|
|
49
|
+
* graph drawn out to the frame reads as a graph that continues past it.
|
|
50
|
+
*
|
|
51
|
+
* @type {number}
|
|
52
|
+
*/
|
|
53
|
+
const MAP_PADDING = 0.06;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Smallest a node is drawn, px. Below a pixel or so a node stops being visible at all, and a map
|
|
57
|
+
* that goes blank when the graph gets big is a map that quits exactly when it becomes useful.
|
|
58
|
+
*
|
|
59
|
+
* @type {number}
|
|
60
|
+
*/
|
|
61
|
+
const NODE_MIN_SIZE = 2;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Side of the button the map folds away to, px. Matches the controls in the action bar below it,
|
|
65
|
+
* which is what it sits in a column with once the map is gone.
|
|
66
|
+
*
|
|
67
|
+
* @type {number}
|
|
68
|
+
*/
|
|
69
|
+
const COLLAPSED_SIZE = 26;
|
|
70
|
+
|
|
71
|
+
const v2_pointer = new Vector2();
|
|
72
|
+
const v2_graph = new Vector2();
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* One segment's cubic bezier control polygon: `[x0,y0, cx1,cy1, cx2,cy2, x1,y1]`. Refilled per
|
|
76
|
+
* segment while the wire cache is being built, and read out again before the next segment fills it.
|
|
77
|
+
*
|
|
78
|
+
* @type {Float64Array}
|
|
79
|
+
*/
|
|
80
|
+
const wire_bezier = new Float64Array(8);
|
|
81
|
+
|
|
82
|
+
export class NodeGraphMinimapView extends View {
|
|
83
|
+
/**
|
|
84
|
+
* The graph-space rectangle currently mapped onto the whole of this view — everything the map
|
|
85
|
+
* shows, and what {@link #updateTransform} derives the transform from.
|
|
86
|
+
*
|
|
87
|
+
* @readonly
|
|
88
|
+
* @type {AABB2}
|
|
89
|
+
*/
|
|
90
|
+
bounds = new AABB2();
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Whether the map is folded away to its button.
|
|
94
|
+
*
|
|
95
|
+
* Public and observable rather than a method, because it is state a host has opinions about —
|
|
96
|
+
* two maps of one graph that disagree about being open are two maps too many.
|
|
97
|
+
*
|
|
98
|
+
* @readonly
|
|
99
|
+
* @type {ObservedBoolean}
|
|
100
|
+
*/
|
|
101
|
+
collapsed = new ObservedBoolean(false);
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* The graph-to-map transform, as map pixels per graph unit and the map-space point graph zero
|
|
105
|
+
* lands on: `map = graph * scale + translate`, the same in both axes.
|
|
106
|
+
*
|
|
107
|
+
* Stated this way rather than as bounds plus a letterboxing offset because these three numbers
|
|
108
|
+
* *are* the transform, and the cached wires are graph-space geometry waiting to have it applied.
|
|
109
|
+
* Set by {@link #updateTransform}.
|
|
110
|
+
*
|
|
111
|
+
* @type {number}
|
|
112
|
+
*/
|
|
113
|
+
#scale = 1;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @type {number}
|
|
117
|
+
*/
|
|
118
|
+
#translate_x = 0;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* @type {number}
|
|
122
|
+
*/
|
|
123
|
+
#translate_y = 0;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* The size the map is drawn at when it is open, kept while it is folded away so that opening it
|
|
127
|
+
* again gives back the map that was there rather than a default one.
|
|
128
|
+
*
|
|
129
|
+
* @type {Vector2}
|
|
130
|
+
*/
|
|
131
|
+
#open_size = new Vector2();
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @type {AutoCanvasView}
|
|
135
|
+
*/
|
|
136
|
+
#canvas;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* The colours to draw with, read from the stylesheet once rather than on every repaint.
|
|
140
|
+
*
|
|
141
|
+
* `getComputedStyle` is the only way to reach a custom property, and it resolves style to
|
|
142
|
+
* answer. A repaint happens on every frame of a camera drag — during which the graph's own
|
|
143
|
+
* canvas is being transformed, so style *is* dirty — and asking four times a frame would make
|
|
144
|
+
* a map that costs a style recalculation to move the camera past.
|
|
145
|
+
*
|
|
146
|
+
* Only filled once linked: before that the element is not in a document, `getComputedStyle`
|
|
147
|
+
* answers with nothing, and a cache filled then would pin the map to the fallbacks for good and
|
|
148
|
+
* ignore whatever the host's theme says.
|
|
149
|
+
*
|
|
150
|
+
* @type {{wire: string, node: string, selected: string, viewport: string}|null}
|
|
151
|
+
*/
|
|
152
|
+
#palette = null;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* The wires, in graph space, as cubic segments: two control points and an end point each, six
|
|
156
|
+
* numbers, laid end to end across every wire. A segment's start is the previous one's end, or —
|
|
157
|
+
* for the first of a wire — that wire's entry in {@link #wire_starts}.
|
|
158
|
+
*
|
|
159
|
+
* Graph space rather than map space, so that nothing about where the camera is or how far it is
|
|
160
|
+
* zoomed can spoil this. See {@link #buildWires}.
|
|
161
|
+
*
|
|
162
|
+
* @type {Float64Array}
|
|
163
|
+
*/
|
|
164
|
+
#wire_segments = new Float64Array(0);
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Where each wire's run of segments begins, x then y, in graph space.
|
|
168
|
+
* @type {Float64Array}
|
|
169
|
+
*/
|
|
170
|
+
#wire_starts = new Float64Array(0);
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* How many segments each wire contributes, in the order of {@link #wire_starts}.
|
|
174
|
+
* @type {Int32Array}
|
|
175
|
+
*/
|
|
176
|
+
#wire_runs = new Int32Array(0);
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* How many wires the three buffers above describe, or -1 when they describe nothing — which is
|
|
180
|
+
* what says the cache has to be rebuilt.
|
|
181
|
+
* @type {number}
|
|
182
|
+
*/
|
|
183
|
+
#wire_count = -1;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* {@link #render}, at most once a frame. See {@link #requestRender}.
|
|
187
|
+
* @type {function()}
|
|
188
|
+
*/
|
|
189
|
+
#request_render;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Signals of individual nodes' geometry, re-subscribed whenever the node set changes. A node
|
|
193
|
+
* being dragged or re-measured changes nothing the graph itself announces, and a map that did
|
|
194
|
+
* not follow it would be wrong for as long as nobody added a node.
|
|
195
|
+
*
|
|
196
|
+
* @type {Array<{signal: Signal, handler: function}>}
|
|
197
|
+
*/
|
|
198
|
+
#node_bindings = [];
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* @param {object} options
|
|
202
|
+
* @param {NodeGraphView} options.graphView the view this is a map of; its camera is what a click
|
|
203
|
+
* here moves, and its size is what the frame on the map is the size of
|
|
204
|
+
* @param {number} [options.width] px, while open
|
|
205
|
+
* @param {number} [options.height] px, while open
|
|
206
|
+
* @param {boolean} [options.collapsed] start folded away
|
|
207
|
+
*/
|
|
208
|
+
constructor({ graphView, width = 176, height = 116, collapsed = false }) {
|
|
209
|
+
super();
|
|
210
|
+
|
|
211
|
+
this.el = document.createElement('div');
|
|
212
|
+
|
|
213
|
+
this.addClass('ui-node-graph-minimap-view');
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @type {NodeGraphView}
|
|
217
|
+
*/
|
|
218
|
+
this.graphView = graphView;
|
|
219
|
+
|
|
220
|
+
this.#open_size.set(width, height);
|
|
221
|
+
|
|
222
|
+
this.#request_render = frameThrottle(this.render, this);
|
|
223
|
+
|
|
224
|
+
const canvas = new AutoCanvasView({ classList: ['map'] });
|
|
225
|
+
|
|
226
|
+
canvas.draw = (ctx, w, h) => this.#draw(ctx, w, h);
|
|
227
|
+
|
|
228
|
+
this.#canvas = canvas;
|
|
229
|
+
|
|
230
|
+
this.addChild(canvas);
|
|
231
|
+
|
|
232
|
+
// The canvas is sized from the model rather than from a resize observer: this view's size is
|
|
233
|
+
// a decision, not a measurement, and waiting for an observer to report it back would leave
|
|
234
|
+
// the map blank for a frame every time it is shown.
|
|
235
|
+
this.size.onChanged.add((x, y) => canvas.size.set(x, y));
|
|
236
|
+
|
|
237
|
+
const vToggle = new ButtonView({
|
|
238
|
+
action: () => this.collapsed.invert(),
|
|
239
|
+
classList: ['toggle']
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
// the control is a glyph drawn by the stylesheet, so this is the only thing that says what
|
|
243
|
+
// it does — to a screen reader, and to a pointer that rests on it
|
|
244
|
+
vToggle.el.setAttribute('title', "Minimap");
|
|
245
|
+
vToggle.el.setAttribute('aria-label', "Toggle minimap");
|
|
246
|
+
|
|
247
|
+
this.addChild(vToggle);
|
|
248
|
+
|
|
249
|
+
// the starting state is taken before anything is listening, so what follows is the one
|
|
250
|
+
// application of it rather than a second one after the signal's
|
|
251
|
+
this.collapsed.set(collapsed);
|
|
252
|
+
this.collapsed.onChanged.add(this.#applyCollapsed, this);
|
|
253
|
+
|
|
254
|
+
this.#applyCollapsed();
|
|
255
|
+
|
|
256
|
+
const camera = graphView.camera;
|
|
257
|
+
|
|
258
|
+
this.bindSignal(camera.position.onChanged, this.requestRender, this);
|
|
259
|
+
this.bindSignal(camera.scale.onChanged, this.requestRender, this);
|
|
260
|
+
|
|
261
|
+
// the frame drawn on the map is the size of the viewport, in graph units
|
|
262
|
+
this.bindSignal(graphView.size.onChanged, this.requestRender, this);
|
|
263
|
+
|
|
264
|
+
// a selected node is drawn in the accent colour here as well as on the canvas, and a
|
|
265
|
+
// highlight that only catches up when something else happens to repaint is worse than none
|
|
266
|
+
this.bindSignal(graphView.selection.nodes.on.added, this.requestRender, this);
|
|
267
|
+
this.bindSignal(graphView.selection.nodes.on.removed, this.requestRender, this);
|
|
268
|
+
|
|
269
|
+
const graph = graphView.graph;
|
|
270
|
+
|
|
271
|
+
// a node's visual data exists by the time its view does, not by the time the graph announces
|
|
272
|
+
// it — which is why this watches the view rather than the graph for additions
|
|
273
|
+
this.bindSignal(graphView.on.nodeViewAdded, this.#watchNodes, this);
|
|
274
|
+
this.bindSignal(graph.on.nodeRemoved, this.#watchNodes, this);
|
|
275
|
+
|
|
276
|
+
// a wire arriving or leaving changes the picture rather than just where it is looked at
|
|
277
|
+
this.bindSignal(graph.on.connectionAdded, this.invalidate, this);
|
|
278
|
+
this.bindSignal(graph.on.connectionRemoved, this.invalidate, this);
|
|
279
|
+
|
|
280
|
+
this.on.linked.add(this.#watchNodes, this);
|
|
281
|
+
this.on.unlinked.add(this.#unwatchNodes, this);
|
|
282
|
+
|
|
283
|
+
// forgotten rather than re-read: there is no cascade to read from once the element is out
|
|
284
|
+
// of the document, and a host that re-themes between takedown and next link should get the
|
|
285
|
+
// new colours rather than the old ones
|
|
286
|
+
this.on.unlinked.add(() => { this.#palette = null; });
|
|
287
|
+
|
|
288
|
+
this.#initializeNavigation();
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Ask to be redrawn, at most once a frame.
|
|
293
|
+
*
|
|
294
|
+
* What every signal this view listens to goes through, because one gesture is many changes:
|
|
295
|
+
* dragging a selection of forty nodes moves forty positions per pointer event, and each of the
|
|
296
|
+
* first thirty-nine would otherwise throw away the wire cache and rebuild it for a picture the
|
|
297
|
+
* fortieth replaces before anybody sees it.
|
|
298
|
+
*
|
|
299
|
+
* {@link #render} is still there for the caller that needs the map correct *now* rather than
|
|
300
|
+
* before the next frame — unfolding it, and any test that wants to look at what was drawn.
|
|
301
|
+
*
|
|
302
|
+
* @returns {void}
|
|
303
|
+
*/
|
|
304
|
+
requestRender() {
|
|
305
|
+
this.#request_render();
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Redraw, now. Cheap by construction — off data already in memory, onto a bitmap a couple of
|
|
310
|
+
* hundred pixels across.
|
|
311
|
+
*/
|
|
312
|
+
render() {
|
|
313
|
+
if (this.collapsed.getValue()) {
|
|
314
|
+
// nothing on screen to redraw. #draw declines as well, for the repaints that come from
|
|
315
|
+
// the canvas being resized rather than through here
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
// at the size this view decided on, not the one an observer last reported: the map of a
|
|
320
|
+
// phase that is not on screen still has to be right the moment it is
|
|
321
|
+
this.#canvas.renderAt(this.size.x, this.size.y);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Fold the map away, or bring it back.
|
|
326
|
+
*
|
|
327
|
+
* @param {boolean} [collapsed] toggles when left out
|
|
328
|
+
*/
|
|
329
|
+
setCollapsed(collapsed = !this.collapsed.getValue()) {
|
|
330
|
+
this.collapsed.set(collapsed);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Where a graph-space point falls on the map.
|
|
335
|
+
*
|
|
336
|
+
* The transform is worked out per call — see {@link #updateTransform} for why it is not cached
|
|
337
|
+
* — so a caller mapping many points in a row is asking for it many times over.
|
|
338
|
+
*
|
|
339
|
+
* @param {Vector2} input graph space
|
|
340
|
+
* @param {Vector2} output view space, px from this view's top-left corner
|
|
341
|
+
*/
|
|
342
|
+
graphToMinimap(input, output) {
|
|
343
|
+
this.updateTransform();
|
|
344
|
+
|
|
345
|
+
output.set(
|
|
346
|
+
input.x * this.#scale + this.#translate_x,
|
|
347
|
+
input.y * this.#scale + this.#translate_y
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/**
|
|
352
|
+
* Which graph-space point a place on the map stands for. The inverse of
|
|
353
|
+
* {@link #graphToMinimap}, and what a click on the map means.
|
|
354
|
+
*
|
|
355
|
+
* @param {Vector2} input view space, px from this view's top-left corner
|
|
356
|
+
* @param {Vector2} output graph space
|
|
357
|
+
*/
|
|
358
|
+
minimapToGraph(input, output) {
|
|
359
|
+
this.updateTransform();
|
|
360
|
+
|
|
361
|
+
output.set(
|
|
362
|
+
(input.x - this.#translate_x) / this.#scale,
|
|
363
|
+
(input.y - this.#translate_y) / this.#scale
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Point the camera at a graph-space position, putting it in the middle of the viewport.
|
|
369
|
+
*
|
|
370
|
+
* The camera holds the top-left corner of what it can see, and what a person clicking a map
|
|
371
|
+
* means is "put this in front of me" — so the conversion is here rather than in every caller.
|
|
372
|
+
*
|
|
373
|
+
* @param {Vector2} position graph space
|
|
374
|
+
*/
|
|
375
|
+
centreCameraOn(position) {
|
|
376
|
+
const graphView = this.graphView;
|
|
377
|
+
const camera = graphView.camera;
|
|
378
|
+
|
|
379
|
+
const scale = camera.scale.getValue();
|
|
380
|
+
|
|
381
|
+
camera.position.set(
|
|
382
|
+
position.x - (graphView.size.x / 2) / scale,
|
|
383
|
+
position.y - (graphView.size.y / 2) / scale
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Work out what part of the graph the map is currently showing, and where that lands in it.
|
|
389
|
+
*
|
|
390
|
+
* Recomputed rather than cached: everything it depends on — where the nodes are, how big they
|
|
391
|
+
* are, where the camera is — changes under an author's hands, and a stale frame would put the
|
|
392
|
+
* viewport box somewhere the viewport is not.
|
|
393
|
+
*/
|
|
394
|
+
updateTransform() {
|
|
395
|
+
const bounds = this.bounds;
|
|
396
|
+
|
|
397
|
+
bounds.setNegativelyInfiniteBounds();
|
|
398
|
+
|
|
399
|
+
this.graphView.visual.computeBoundingBox(bounds);
|
|
400
|
+
|
|
401
|
+
if (bounds.x0 > bounds.x1 || bounds.y0 > bounds.y1) {
|
|
402
|
+
// an empty graph has no extent to show; the viewport below gives the map something to be
|
|
403
|
+
bounds.set(0, 0, 0, 0);
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
// The viewport is part of what is mapped, so that panning away from an empty region still
|
|
407
|
+
// shows where the camera has got to rather than pinning its box to an edge.
|
|
408
|
+
const camera = this.graphView.camera;
|
|
409
|
+
const camera_scale = camera.scale.getValue();
|
|
410
|
+
|
|
411
|
+
bounds._expandToFit(
|
|
412
|
+
camera.position.x,
|
|
413
|
+
camera.position.y,
|
|
414
|
+
camera.position.x + this.graphView.size.x / camera_scale,
|
|
415
|
+
camera.position.y + this.graphView.size.y / camera_scale
|
|
416
|
+
);
|
|
417
|
+
|
|
418
|
+
// the map is drawn at the size it is open at, whether or not it is open: a host asking where
|
|
419
|
+
// a node is on the map while it is folded away gets the answer it will have when it opens
|
|
420
|
+
const width = this.#open_size.x;
|
|
421
|
+
const height = this.#open_size.y;
|
|
422
|
+
|
|
423
|
+
const padding = min2(width, height) * MAP_PADDING;
|
|
424
|
+
|
|
425
|
+
const usable_width = Math.max(1, width - padding * 2);
|
|
426
|
+
const usable_height = Math.max(1, height - padding * 2);
|
|
427
|
+
|
|
428
|
+
// a graph one node wide has no extent in one axis; dividing by it would take the scale to
|
|
429
|
+
// infinity and put every node in the same place
|
|
430
|
+
const bounds_width = Math.max(1e-3, bounds.width);
|
|
431
|
+
const bounds_height = Math.max(1e-3, bounds.height);
|
|
432
|
+
|
|
433
|
+
const scale = min2(usable_width / bounds_width, usable_height / bounds_height);
|
|
434
|
+
|
|
435
|
+
this.#scale = scale;
|
|
436
|
+
|
|
437
|
+
// the letterboxing that keeps a wide graph from being stretched into a tall map, folded into
|
|
438
|
+
// the translation along with the bounds' own origin
|
|
439
|
+
this.#translate_x = (width - bounds_width * scale) / 2 - bounds.x0 * scale;
|
|
440
|
+
this.#translate_y = (height - bounds_height * scale) / 2 - bounds.y0 * scale;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* @param {CanvasRenderingContext2D} ctx
|
|
445
|
+
* @param {number} width
|
|
446
|
+
* @param {number} height
|
|
447
|
+
*/
|
|
448
|
+
#draw(ctx, width, height) {
|
|
449
|
+
ctx.clearRect(0, 0, width, height);
|
|
450
|
+
|
|
451
|
+
if (this.collapsed.getValue()) {
|
|
452
|
+
// folding the map is a resize of its canvas, and a resize is a repaint — one that does
|
|
453
|
+
// not come through #render and so is not stopped by its guard. There is nothing on
|
|
454
|
+
// screen to draw on.
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
this.updateTransform();
|
|
459
|
+
|
|
460
|
+
const scale = this.#scale;
|
|
461
|
+
const translate_x = this.#translate_x;
|
|
462
|
+
const translate_y = this.#translate_y;
|
|
463
|
+
|
|
464
|
+
const graphView = this.graphView;
|
|
465
|
+
const visual = graphView.visual;
|
|
466
|
+
const selection = graphView.selection;
|
|
467
|
+
|
|
468
|
+
const palette = this.#readPalette();
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* @param {number} x graph space
|
|
472
|
+
* @returns {number}
|
|
473
|
+
*/
|
|
474
|
+
const map_x = x => x * scale + translate_x;
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* @param {number} y graph space
|
|
478
|
+
* @returns {number}
|
|
479
|
+
*/
|
|
480
|
+
const map_y = y => y * scale + translate_y;
|
|
481
|
+
|
|
482
|
+
// Wires first, from the cache: see #buildWires for what is in it and when it is rebuilt.
|
|
483
|
+
ctx.strokeStyle = palette.wire;
|
|
484
|
+
ctx.lineWidth = 1;
|
|
485
|
+
|
|
486
|
+
ctx.beginPath();
|
|
487
|
+
|
|
488
|
+
this.#replayWires(ctx, scale, translate_x, translate_y);
|
|
489
|
+
|
|
490
|
+
ctx.stroke();
|
|
491
|
+
|
|
492
|
+
for (const [id, node] of visual.nodes) {
|
|
493
|
+
const dimensions = node.dimensions;
|
|
494
|
+
|
|
495
|
+
ctx.fillStyle = selection.containsNode(id) ? palette.selected : palette.node;
|
|
496
|
+
|
|
497
|
+
ctx.fillRect(
|
|
498
|
+
map_x(dimensions.position.x),
|
|
499
|
+
map_y(dimensions.position.y),
|
|
500
|
+
Math.max(NODE_MIN_SIZE, dimensions.size.x * scale),
|
|
501
|
+
Math.max(NODE_MIN_SIZE, dimensions.size.y * scale)
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
// and the frame, last, so it is never drawn under a node
|
|
506
|
+
const camera = graphView.camera;
|
|
507
|
+
const camera_scale = camera.scale.getValue();
|
|
508
|
+
|
|
509
|
+
const view_x = map_x(camera.position.x);
|
|
510
|
+
const view_y = map_y(camera.position.y);
|
|
511
|
+
const view_width = (graphView.size.x / camera_scale) * scale;
|
|
512
|
+
const view_height = (graphView.size.y / camera_scale) * scale;
|
|
513
|
+
|
|
514
|
+
ctx.strokeStyle = palette.viewport;
|
|
515
|
+
ctx.lineWidth = 1;
|
|
516
|
+
|
|
517
|
+
// half-pixel offsets: a one-pixel stroke on an integer boundary straddles two pixels and
|
|
518
|
+
// comes out grey and two wide
|
|
519
|
+
ctx.strokeRect(
|
|
520
|
+
Math.round(view_x) + 0.5,
|
|
521
|
+
Math.round(view_y) + 0.5,
|
|
522
|
+
Math.max(1, Math.round(view_width) - 1),
|
|
523
|
+
Math.max(1, Math.round(view_height) - 1)
|
|
524
|
+
);
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Put the wires into the path the caller has open, rebuilding the cache first if it no longer
|
|
529
|
+
* describes this graph.
|
|
530
|
+
*
|
|
531
|
+
* @param {CanvasRenderingContext2D} ctx
|
|
532
|
+
* @param {number} scale map pixels per graph unit
|
|
533
|
+
* @param {number} translate_x where graph zero lands, map space
|
|
534
|
+
* @param {number} translate_y
|
|
535
|
+
*/
|
|
536
|
+
#replayWires(ctx, scale, translate_x, translate_y) {
|
|
537
|
+
this.#buildWires();
|
|
538
|
+
|
|
539
|
+
const segments = this.#wire_segments;
|
|
540
|
+
const starts = this.#wire_starts;
|
|
541
|
+
const runs = this.#wire_runs;
|
|
542
|
+
|
|
543
|
+
let at = 0;
|
|
544
|
+
|
|
545
|
+
for (let wire = 0; wire < this.#wire_count; wire++) {
|
|
546
|
+
ctx.moveTo(
|
|
547
|
+
starts[wire * 2] * scale + translate_x,
|
|
548
|
+
starts[wire * 2 + 1] * scale + translate_y
|
|
549
|
+
);
|
|
550
|
+
|
|
551
|
+
const run = runs[wire];
|
|
552
|
+
|
|
553
|
+
for (let segment = 0; segment < run; segment++) {
|
|
554
|
+
// The transform is affine, so a curve is transformed by transforming its control
|
|
555
|
+
// polygon — the same trick the real canvas uses to draw these under the camera. Six
|
|
556
|
+
// multiply-adds a segment, which is what makes it worth doing here instead of
|
|
557
|
+
// baking it into what is kept.
|
|
558
|
+
ctx.bezierCurveTo(
|
|
559
|
+
segments[at] * scale + translate_x, segments[at + 1] * scale + translate_y,
|
|
560
|
+
segments[at + 2] * scale + translate_x, segments[at + 3] * scale + translate_y,
|
|
561
|
+
segments[at + 4] * scale + translate_x, segments[at + 5] * scale + translate_y
|
|
562
|
+
);
|
|
563
|
+
|
|
564
|
+
at += 6;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Work out where every wire goes on the map, and keep it.
|
|
571
|
+
*
|
|
572
|
+
* This is the expensive half of a repaint and none of it changes when the camera moves. Finding
|
|
573
|
+
* a wire's path means resolving its route against where its ports are now (see
|
|
574
|
+
* {@link NodeGraphView#resolveConnectionPath}), then converting each Hermite segment to a
|
|
575
|
+
* Bézier one — per segment, per wire, and a graph worth having a map of has hundreds of both.
|
|
576
|
+
* The map is a picture of the whole graph, and moving the camera does not move the graph.
|
|
577
|
+
*
|
|
578
|
+
* So the result is kept **in graph space**, and {@link #replayWires} applies the transform on
|
|
579
|
+
* the way out. That is six multiply-adds a segment, next to nothing beside what it saves — and
|
|
580
|
+
* it is what makes this immune to the camera. Keeping map-space geometry instead would have to
|
|
581
|
+
* be thrown away whenever the transform changed, which is every pan once the viewport is wider
|
|
582
|
+
* than the graph, since the mapped bounds include the viewport.
|
|
583
|
+
*
|
|
584
|
+
* What does throw it away:
|
|
585
|
+
*
|
|
586
|
+
* - a wire added or removed, a node added, removed, moved, resized or re-measured, through the
|
|
587
|
+
* signals this view already listens to,
|
|
588
|
+
* - and anything else that rewrites the routes without touching a node — re-routing a graph in
|
|
589
|
+
* place — which is the caller's to declare, through {@link #invalidate}.
|
|
590
|
+
*
|
|
591
|
+
* Node boxes are not cached: a box is a `fillRect` with no arithmetic behind it, and its colour
|
|
592
|
+
* depends on the selection, which changes under an author's hands.
|
|
593
|
+
*/
|
|
594
|
+
#buildWires() {
|
|
595
|
+
if (this.#wire_count >= 0) {
|
|
596
|
+
return;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
const graphView = this.graphView;
|
|
600
|
+
const visual = graphView.visual;
|
|
601
|
+
|
|
602
|
+
let wires = 0;
|
|
603
|
+
let at = 0;
|
|
604
|
+
|
|
605
|
+
graphView.graph.connections.forEach(connection => {
|
|
606
|
+
if (
|
|
607
|
+
visual.getNode(connection.source.instance.id) === undefined
|
|
608
|
+
|| visual.getNode(connection.target.instance.id) === undefined
|
|
609
|
+
) {
|
|
610
|
+
// a connection whose nodes have not been given visual data yet — nothing to draw it
|
|
611
|
+
// between, and the graph view is about to build both
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
const path = graphView.resolveConnectionPath(connection);
|
|
616
|
+
|
|
617
|
+
const count = path.segment_count;
|
|
618
|
+
|
|
619
|
+
if (count === 0) {
|
|
620
|
+
return;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
this.#wire_segments = grow_f64(this.#wire_segments, at + count * 6);
|
|
624
|
+
this.#wire_starts = grow_f64(this.#wire_starts, wires * 2 + 2);
|
|
625
|
+
this.#wire_runs = grow_i32(this.#wire_runs, wires + 1);
|
|
626
|
+
|
|
627
|
+
const segments = this.#wire_segments;
|
|
628
|
+
|
|
629
|
+
for (let segment = 0; segment < count; segment++) {
|
|
630
|
+
path.write_segment_bezier(wire_bezier, 0, segment);
|
|
631
|
+
|
|
632
|
+
if (segment === 0) {
|
|
633
|
+
this.#wire_starts[wires * 2] = wire_bezier[0];
|
|
634
|
+
this.#wire_starts[wires * 2 + 1] = wire_bezier[1];
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
// the segment's own start is dropped: it is where the last one ended
|
|
638
|
+
segments[at] = wire_bezier[2];
|
|
639
|
+
segments[at + 1] = wire_bezier[3];
|
|
640
|
+
segments[at + 2] = wire_bezier[4];
|
|
641
|
+
segments[at + 3] = wire_bezier[5];
|
|
642
|
+
segments[at + 4] = wire_bezier[6];
|
|
643
|
+
segments[at + 5] = wire_bezier[7];
|
|
644
|
+
|
|
645
|
+
at += 6;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
this.#wire_runs[wires] = count;
|
|
649
|
+
|
|
650
|
+
wires++;
|
|
651
|
+
});
|
|
652
|
+
|
|
653
|
+
this.#wire_count = wires;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
/**
|
|
657
|
+
* Forget where the wires go, and ask to be drawn again knowing better.
|
|
658
|
+
*
|
|
659
|
+
* Called for itself by everything this view can see happening. What it cannot see is a graph
|
|
660
|
+
* whose wires were re-routed without any node moving — {@link NodeGraphVisualData#route} over an
|
|
661
|
+
* arrangement somebody is happy with — so a caller that does that says so here.
|
|
662
|
+
*
|
|
663
|
+
* The repaint comes with it rather than being a second call, because there is no reason to say
|
|
664
|
+
* a map is wrong and not want it put right, and a map left marked wrong is a map showing the old
|
|
665
|
+
* wires until something unrelated happens to repaint it. It is a request, so forty of these in
|
|
666
|
+
* one gesture are forty field writes and one repaint.
|
|
667
|
+
*
|
|
668
|
+
* @returns {void}
|
|
669
|
+
*/
|
|
670
|
+
invalidate() {
|
|
671
|
+
this.#wire_count = -1;
|
|
672
|
+
|
|
673
|
+
this.requestRender();
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* The colours to draw with. Read from the cascade the first time they are wanted from a linked
|
|
678
|
+
* view, and kept from then on: see {@link #palette}. A host that re-themes the editor while it
|
|
679
|
+
* is on screen gets the new colours on the next relink, which is what a theme switch is.
|
|
680
|
+
*
|
|
681
|
+
* @returns {{wire: string, node: string, selected: string, viewport: string}}
|
|
682
|
+
*/
|
|
683
|
+
#readPalette() {
|
|
684
|
+
if (this.#palette !== null) {
|
|
685
|
+
return this.#palette;
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
const style = getComputedStyle(this.el);
|
|
689
|
+
|
|
690
|
+
const palette = {
|
|
691
|
+
wire: read_style(style, '--meep-minimap-wire', 'rgba(120, 132, 150, 0.55)'),
|
|
692
|
+
node: read_style(style, '--meep-minimap-node', 'rgba(198, 206, 218, 0.75)'),
|
|
693
|
+
selected: read_style(style, '--meep-accent', '#2d7dd2'),
|
|
694
|
+
viewport: read_style(style, '--meep-minimap-viewport', 'rgba(255, 255, 255, 0.85)'),
|
|
695
|
+
};
|
|
696
|
+
|
|
697
|
+
if (this.isLinked) {
|
|
698
|
+
this.#palette = palette;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
return palette;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* Reflect {@link #collapsed} onto the view: the map's own box, and what is drawn in it.
|
|
706
|
+
*/
|
|
707
|
+
#applyCollapsed() {
|
|
708
|
+
const collapsed = this.collapsed.getValue();
|
|
709
|
+
|
|
710
|
+
this.setClass('collapsed', collapsed);
|
|
711
|
+
|
|
712
|
+
this.#canvas.visible = !collapsed;
|
|
713
|
+
|
|
714
|
+
if (collapsed) {
|
|
715
|
+
this.size.set(COLLAPSED_SIZE, COLLAPSED_SIZE);
|
|
716
|
+
} else {
|
|
717
|
+
this.size.copy(this.#open_size);
|
|
718
|
+
|
|
719
|
+
// the map has been out of date for as long as it was folded away — every signal it
|
|
720
|
+
// listens to has been returning early
|
|
721
|
+
this.render();
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* Click or drag anywhere on the map to bring that part of the graph into view.
|
|
727
|
+
*/
|
|
728
|
+
#initializeNavigation() {
|
|
729
|
+
// The gesture is on the canvas rather than on this view, so that the collapse button — which
|
|
730
|
+
// is a sibling of it, not a child — is a button and not a corner of the map.
|
|
731
|
+
const surface = this.#canvas.el;
|
|
732
|
+
|
|
733
|
+
const jump = event => {
|
|
734
|
+
readPositionFromMouseEvent(v2_pointer, event, surface);
|
|
735
|
+
|
|
736
|
+
// a press that left the map mid-drag is not a request to look at the void beyond the graph
|
|
737
|
+
v2_pointer.set(
|
|
738
|
+
clamp(v2_pointer.x, 0, this.size.x),
|
|
739
|
+
clamp(v2_pointer.y, 0, this.size.y)
|
|
740
|
+
);
|
|
741
|
+
|
|
742
|
+
this.minimapToGraph(v2_pointer, v2_graph);
|
|
743
|
+
|
|
744
|
+
this.centreCameraOn(v2_graph);
|
|
745
|
+
};
|
|
746
|
+
|
|
747
|
+
const draggable = new DraggableAspect({
|
|
748
|
+
el: surface,
|
|
749
|
+
drag: (position, origin, delta, event) => jump(event),
|
|
750
|
+
});
|
|
751
|
+
|
|
752
|
+
// a single click is a jump too, and the drag aspect only reports movement
|
|
753
|
+
draggable.getPointer().on.down.add((position, event) => jump(event));
|
|
754
|
+
|
|
755
|
+
this.on.linked.add(draggable.start, draggable);
|
|
756
|
+
this.on.unlinked.add(draggable.stop, draggable);
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/**
|
|
760
|
+
* Follow the geometry of exactly the nodes that exist now.
|
|
761
|
+
*/
|
|
762
|
+
#watchNodes() {
|
|
763
|
+
this.#unwatchNodes();
|
|
764
|
+
|
|
765
|
+
for (const node of this.graphView.visual.nodes.values()) {
|
|
766
|
+
for (const signal of [node.dimensions.position.onChanged, node.dimensions.size.onChanged]) {
|
|
767
|
+
// a node that moves takes its ports with it, and a wire meets a port
|
|
768
|
+
this.#watchGeometry(signal, () => this.invalidate());
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
// A node can be re-measured into the same box with a port somewhere else in it — a control
|
|
773
|
+
// that reflowed without changing what it occupies. The box says nothing about that, and
|
|
774
|
+
// the wire ends where the port is, so this is the other half of the same fact.
|
|
775
|
+
for (const nodeView of this.graphView.nodeViews.values()) {
|
|
776
|
+
this.#watchGeometry(nodeView.on.measured, changed => {
|
|
777
|
+
if (changed) {
|
|
778
|
+
this.invalidate();
|
|
779
|
+
}
|
|
780
|
+
});
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
this.invalidate();
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* Listen to one signal for as long as the node set it belongs to stands.
|
|
788
|
+
*
|
|
789
|
+
* @param {Signal} signal
|
|
790
|
+
* @param {function} handler
|
|
791
|
+
*/
|
|
792
|
+
#watchGeometry(signal, handler) {
|
|
793
|
+
this.bindSignal(signal, handler);
|
|
794
|
+
|
|
795
|
+
this.#node_bindings.push({ signal, handler });
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
#unwatchNodes() {
|
|
799
|
+
for (const binding of this.#node_bindings) {
|
|
800
|
+
this.unbindSignal(binding.signal, binding.handler);
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
this.#node_bindings.length = 0;
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
/**
|
|
808
|
+
* `array`, or a bigger one holding what it held, with room for at least `needed` values.
|
|
809
|
+
*
|
|
810
|
+
* Doubling rather than fitting exactly: a graph gains wires one at a time, and a buffer that grew by
|
|
811
|
+
* one each time would copy itself once per wire.
|
|
812
|
+
*
|
|
813
|
+
* @param {Float64Array} array
|
|
814
|
+
* @param {number} needed
|
|
815
|
+
* @returns {Float64Array}
|
|
816
|
+
*/
|
|
817
|
+
function grow_f64(array, needed) {
|
|
818
|
+
if (array.length >= needed) {
|
|
819
|
+
return array;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
const grown = new Float64Array(Math.max(needed, array.length * 2, 64));
|
|
823
|
+
|
|
824
|
+
grown.set(array);
|
|
825
|
+
|
|
826
|
+
return grown;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
/**
|
|
830
|
+
* @param {Int32Array} array
|
|
831
|
+
* @param {number} needed
|
|
832
|
+
* @returns {Int32Array}
|
|
833
|
+
*/
|
|
834
|
+
function grow_i32(array, needed) {
|
|
835
|
+
if (array.length >= needed) {
|
|
836
|
+
return array;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
const grown = new Int32Array(Math.max(needed, array.length * 2, 32));
|
|
840
|
+
|
|
841
|
+
grown.set(array);
|
|
842
|
+
|
|
843
|
+
return grown;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* A theme token's value, or the fallback where the host has not defined one. `getComputedStyle` is
|
|
848
|
+
* the only way to read a custom property, and jsdom returns nothing for one it has no cascade for.
|
|
849
|
+
*
|
|
850
|
+
* @param {CSSStyleDeclaration} style
|
|
851
|
+
* @param {string} property
|
|
852
|
+
* @param {string} fallback
|
|
853
|
+
* @returns {string}
|
|
854
|
+
*/
|
|
855
|
+
function read_style(style, property, fallback) {
|
|
856
|
+
const value = style.getPropertyValue(property).trim();
|
|
857
|
+
|
|
858
|
+
return value !== "" ? value : fallback;
|
|
859
|
+
}
|