@woosh/meep-engine 3.60.4 → 3.60.5
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/CHANGELOG.md +2602 -0
- package/CONTRIBUTING.md +7 -0
- package/MIGRATION_2_TO_3.md +136 -0
- package/SECURITY.md +4 -0
- package/editor/EditorCameraNavigation.d.ts +2 -1
- package/editor/EditorCameraNavigation.d.ts.map +1 -1
- package/editor/EditorCameraNavigation.js +51 -57
- package/package.json +6 -2
- package/src/engine/EngineHarness.d.ts +3 -9
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +6 -8
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
- package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
- package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
- package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
- package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +8 -0
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +731 -734
- package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
- package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
- package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
- package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
- package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
- package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
- package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
- package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/water_refraction/README.md +5 -6
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +7 -5
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +2 -2
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +18 -1
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +10 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
- package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
- package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
- package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
- package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +7 -0
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +11 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +22 -13
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +7 -7
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
- package/editor/REWORK_PLAN_2026_08.md +0 -692
- package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
- package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
- package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
- package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
- package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
- package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
- package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
- package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
- package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
- package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
- package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
- package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
- package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
- package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
- package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
- package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
- package/src/REVIEW_2026_08_06/adv-core.md +0 -511
- package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
- package/src/REVIEW_2026_08_06/adv-view.md +0 -446
- package/src/REVIEW_2026_08_06/api-core.md +0 -296
- package/src/REVIEW_2026_08_06/api-engine.md +0 -195
- package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
- package/src/REVIEW_2026_08_06/core-binary.md +0 -348
- package/src/REVIEW_2026_08_06/core-collection.md +0 -376
- package/src/REVIEW_2026_08_06/core-math.md +0 -221
- package/src/REVIEW_2026_08_06/core-process.md +0 -266
- package/src/REVIEW_2026_08_06/core-science.md +0 -223
- package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
- package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
- package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
- package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
- package/src/REVIEW_2026_08_06/engine-input.md +0 -197
- package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
- package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
- package/src/REVIEW_2026_08_06/generation.md +0 -176
- package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
- package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
- package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
- package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
- package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
- package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
- package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
- package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
- package/src/REVIEW_2026_08_06/view.md +0 -667
- package/src/REVIEW_2026_08_06.md +0 -610
- package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
- package/src/core/bvh2/bvh3/NOTES.md +0 -2
- package/src/core/bvh8/NOTES.md +0 -63
- package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
- package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
- package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
- package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
- package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
- package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
- package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
- package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
- package/src/core/geom/3d/gjk/NOTES.md +0 -8
- package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
- package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
- package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
- package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
- package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
- package/src/engine/REVIEW_2026_07_03.md +0 -211
- package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
- package/src/engine/control/first-person/DESIGN.md +0 -658
- package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
- package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
- package/src/engine/control/first-person/TODO.md +0 -160
- package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
- package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
- package/src/engine/ecs/ik/PLAN.md +0 -179
- package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
- package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
- package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
- package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
- package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
- package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
- package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
- package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
- package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
- package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
- package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
- package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
- package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
- package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
- package/src/engine/network/CONGESTION_CONTROL.md +0 -87
- package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
- package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
- package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
- package/src/engine/physics/cloth/PLAN.md +0 -3056
- package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
- package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
- package/src/engine/physics/fluid/solver/NOTES.md +0 -46
- package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
- package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
- package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
- package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
- package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
- package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
- package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
- package/src/format/image/avif/DECISIONS.md +0 -545
- package/src/format/image/jpeg/NOTES.md +0 -3
- package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
- package/src/generation/COORDINATES.md +0 -54
- package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
- package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
- package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
- package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
- package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
- package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
- package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
- package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
- package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
- package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
- package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
- package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
- package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
- package/src/shade/RENDERER_CONTRACT.md +0 -697
- package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
- package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
- package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
- package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
- package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
- package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
- package/src/shade/renderer/NOTES.md +0 -78
- package/src/shade/renderer/PLAN.md +0 -8
- package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
- package/src/shade/renderer/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
- package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
- package/src/shade/renderer/camera/orbital/README.md +0 -81
- package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
- package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
- package/src/shade/renderer/camera/orbital/index.js +0 -9
- package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
- package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
- package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
- package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
- package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
- package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
- package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
- package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
- package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
- package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
- package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
- package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
- package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
- package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
- package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
- package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
- package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
- package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
- package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
- package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
- package/src/shade/renderer/hiz/NOTES.md +0 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
- package/src/shade/renderer/light/cluster/NOTES.md +0 -11
- package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
- package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
- package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
- package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
- package/src/shade/renderer/particles/DESIGN.md +0 -1011
- package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
- package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
- package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
- package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
- package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
- package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
- package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
- package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
- package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
- package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
- package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
- package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
- package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
- package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
- package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
- package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
- package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
- package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
- package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
- package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
- package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
- package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
- package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
- package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
- package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
- package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
- package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
- package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
- package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
- package/src/shade/wgsl/NOTES.md +0 -4
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
`meep` is a proprietary, source-available engine — the full source ships in the npm package, but it is not open source. That being said - if you really would like to contribute to the engine's development - please reach out to me personally.
|
|
2
|
+
|
|
3
|
+
Contributing to the engine will always assume full right transfer, as it is a proprietary project. See [LICENSE](LICENSE) for the terms the engine itself is distributed under. If you like what we do and want to work with us - it's best if you reach out to us.
|
|
4
|
+
|
|
5
|
+
- Alex Goldring
|
|
6
|
+
|
|
7
|
+
[Company Named](https://company-named.com)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Migrating 2.170.0 → 3.1.0
|
|
2
|
+
|
|
3
|
+
There is no compatibility layer and no dual-boot. three.js is gone from the tree and from the
|
|
4
|
+
dependency list; the renderer is Shade, on WebGPU.
|
|
5
|
+
|
|
6
|
+
Read [RENDERER_CONTRACT.md](src/shade/RENDERER_CONTRACT.md) first if you touch rendering at all —
|
|
7
|
+
it is the replacement for most of what is listed below.
|
|
8
|
+
|
|
9
|
+
> **The names below carry a `3` that the current release does not.** These tables give the 3.1.0
|
|
10
|
+
> spellings. In 4.0.0 the transition-era suffix was dropped: `GraphicsEngine3` is `GraphicsEngine`,
|
|
11
|
+
> `MeshSystem3` is `MeshSystem`, and so on for every `*System3` in §2 and §4. The suffixed names
|
|
12
|
+
> are still exported from their original modules as deprecated aliases, so everything written here
|
|
13
|
+
> keeps working — but write the unsuffixed name in new code.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Before you start
|
|
18
|
+
|
|
19
|
+
- **Your target needs WebGPU** with `indirect-first-instance`, `float32-blendable`, ≥10 storage
|
|
20
|
+
buffers per shader stage and ≥32 colour-attachment bytes per sample. There is no fallback: below
|
|
21
|
+
the floor, `Renderer.initialize()` rejects with a `ShadeDeviceFailure` carrying a message written
|
|
22
|
+
to be shown.
|
|
23
|
+
- **Drop `three` from your own dependencies** if you had it only for meep. meep no longer declares
|
|
24
|
+
it, even optionally.
|
|
25
|
+
- **Any code of yours that imports three must be ported.** meep exports no three types, and no
|
|
26
|
+
adapter is provided.
|
|
27
|
+
|
|
28
|
+
## 2. Engine and renderer
|
|
29
|
+
|
|
30
|
+
| 2.170.0 | 3.1.0 |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `GraphicsEngine` | `GraphicsEngine3` |
|
|
33
|
+
| `graphics.scene` (a three `Scene`) | **There is no scene getter, deliberately.** `GraphicsEngine3.set_scene(scene)` says which scene to draw; entities reach it through `MeshSystem3`, which owns the placement |
|
|
34
|
+
| `graphics.layers`, `RenderLayer` | **No replacement.** Draw order is the renderer's; use a render extension's phase to place your own work |
|
|
35
|
+
| `graphics.getMaterialManager()` | **No replacement.** Materials are `ShadeMaterial` / `StandardShadeMaterial`, held on the mesh |
|
|
36
|
+
| `graphics.camera` (a three camera) | The `Camera` component. `Camera.object` is gone; frustum planes come from `camera_active_frustum` |
|
|
37
|
+
| `renderer.add_pass` / `remove_pass`, `FramePhase`, `FramePassContext` | `RenderExtension` + `Renderer.add_extension`. See the contract, §6 |
|
|
38
|
+
| `WebGLRendererPool`, `renderObjectToSampler2D` | `Renderer.render_to_target`, or `GraphicsEngine3.render_to_sampler` |
|
|
39
|
+
| `WebGLContextMonitor` and the WebGL context-loss shims | `Renderer.onDeviceFailure` / `on.contextLost`. **Device loss is not recovered** — surface it and reload |
|
|
40
|
+
| `?renderer=` switch | **Gone.** There is one renderer |
|
|
41
|
+
|
|
42
|
+
## 3. Components
|
|
43
|
+
|
|
44
|
+
| 2.170.0 | 3.1.0 |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `Renderable` (v0), `Mesh` (v1) | `SGMesh` |
|
|
47
|
+
| `Mesh.opacity` | **No replacement.** Per-instance opacity is not implemented |
|
|
48
|
+
| A model as a tree inside one component | A model **expands into entities**; the nodes that draw carry `ShadedGeometry` |
|
|
49
|
+
| `AnimationGraph` | **No replacement as a component.** Author state machines in your own layer; playback is `ClipListPlayer` / `AnimationGraphController` |
|
|
50
|
+
| `Trail2D` | The component still exists but **nothing draws it**, and it was never serializable (`Trail2D.serializable = false`, no adapter), so no saved data references it. Use `Trail3D` |
|
|
51
|
+
| `MeshFlags.InView` | **No replacement.** `SGMeshFlags` has no `InView`; nothing computes per-entity visibility on the CPU |
|
|
52
|
+
|
|
53
|
+
**Level and save data.** `Mesh` components in shipped `level.bin` files were converted to `SGMesh`
|
|
54
|
+
in-place. If you have your own level binaries written by 2.x, convert them the same way — through
|
|
55
|
+
the engine's serializer, not by hand. There is no runtime upgrader: the component was replaced, not
|
|
56
|
+
versioned.
|
|
57
|
+
|
|
58
|
+
## 4. Systems
|
|
59
|
+
|
|
60
|
+
| 2.170.0 | 3.1.0 |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `RenderSystem`, `MeshSystem` | `MeshSystem3` (+ `ShadedGeometrySystem3`) |
|
|
63
|
+
| `AnimationSystem`, `AnimationGraphSystem` | `AnimationGraphSystem3`, `GPUAnimationManager` |
|
|
64
|
+
| `LightSystem` | **No replacement needed.** Lights live on the Shade scene; the "Shadow Quality" option this system fed is gone |
|
|
65
|
+
| `CameraSystem` | `CameraSystem3` |
|
|
66
|
+
| `ParticleEmitterSystem` (legacy) | `ParticleEmitterSystem3` |
|
|
67
|
+
| `Trail2DSystem` | `Trail3DSystem3` |
|
|
68
|
+
|
|
69
|
+
## 5. Geometry, materials, textures
|
|
70
|
+
|
|
71
|
+
| 2.170.0 | 3.1.0 |
|
|
72
|
+
|---|---|
|
|
73
|
+
| three `BufferGeometry` | `Geometry` (authoring) → `meshlet_geometry_build_from_geometry` → `MeshletGeometry` (what a `Mesh` carries) |
|
|
74
|
+
| three `Material`, `MeshStandardMaterial` | `ShadeMaterial`, `StandardShadeMaterial` |
|
|
75
|
+
| three `Texture`, `DataTexture` | `ShadeTexture` over a `ShadeImage`. `Sampler2D` is still the CPU-side pixel type |
|
|
76
|
+
| three `Plane` | `Vector4` — `x, y, z` normal, `w` constant |
|
|
77
|
+
| `computeTextureEquality`, `computeTextureHash`, `TextureCoalescer`, `StaticMaterialCache` | **No replacement.** `ShadeTexture` and `ShadeImage` carry their own `equals`/`hash` and the renderer de-duplicates uploads |
|
|
78
|
+
| three `DoubleSide`, `BackSide` | `ShadeMaterial.draw_side` — `ShadeDrawSide.Double` / `.Back`, against a `.Front` default. Back faces are shaded with a flipped normal. glTF `doubleSided` maps across on load |
|
|
79
|
+
| DDS, DRACO | **No replacement.** Use the glTF PNG base sources. Compressed textures return later as their own feature |
|
|
80
|
+
| `TopoMesh` | The `bt_*` binary-topology functions. Migration map: `src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md` |
|
|
81
|
+
|
|
82
|
+
**Content that rewrites its vertices every frame** — trails, ribbons, CPU particles, debug lines —
|
|
83
|
+
goes down the dynamic-mesh path (`DynamicMesh` + `GPUDynamicMeshRenderer`), not through
|
|
84
|
+
`MeshletGeometry`. Contract §8.
|
|
85
|
+
|
|
86
|
+
## 6. Loading
|
|
87
|
+
|
|
88
|
+
| 2.170.0 | 3.1.0 |
|
|
89
|
+
|---|---|
|
|
90
|
+
| three's `GLTFLoader` | `load_gltf(url, { assetManager, scope })` → `SceneBundle` |
|
|
91
|
+
| A loaded model used directly in several places | `instantiate_scene_bundle(bundle)` per placement — a bundle is the model as loaded, not a placement of it |
|
|
92
|
+
| The deferred texture loader | **No replacement.** It had no consumer |
|
|
93
|
+
|
|
94
|
+
`load_gltf` requires an `AssetManager` — a glTF is several files, and they go back through the
|
|
95
|
+
manager so they are cached, counted and cancellable. Two loaders are enough: `ArrayBuffer` and
|
|
96
|
+
`ImageBitmap`.
|
|
97
|
+
|
|
98
|
+
## 7. Baking and GI
|
|
99
|
+
|
|
100
|
+
| 2.170.0 | 3.1.0 |
|
|
101
|
+
|---|---|
|
|
102
|
+
| meep's lightmap baker, LPG, LPV | Shade's **brick4** volumetric GI, and Shade's own LPV. meep's copies were backports and are deleted |
|
|
103
|
+
| The terrain AO bake | **No replacement.** It is removed and generation no longer needs a GPU |
|
|
104
|
+
| `renderObjectToSampler2D` previews | `GraphicsEngine3.render_to_sampler` |
|
|
105
|
+
|
|
106
|
+
## 8. Smaller things
|
|
107
|
+
|
|
108
|
+
- **Bone and socket positions**: `query_entity_node_world_pose(result, entity_manager, entity, node_name)`.
|
|
109
|
+
Reading a matrix off a skeleton is gone; a bone is a `Transform` + `TransformAttachment` pair.
|
|
110
|
+
- **Attachment sockets are gone entirely** — `Attachment`, `AttachmentSystem`, `AttachmentSockets`
|
|
111
|
+
and the rest of `ecs/attachment` and `ecs/sockets`, along with `AttachmentSocketsAssetLoader` and
|
|
112
|
+
`GameAssetType.AttachmentSockets`. The API predated `TransformAttachment` and composed
|
|
113
|
+
`parent x socket x attachment` where `TransformAttachment` composes `parent x local`.
|
|
114
|
+
- A **transform socket** becomes a `TransformAttachment` whose `transform` is the socket's offset
|
|
115
|
+
composed with the attachment's own. The system handles parent destruction, keeps a
|
|
116
|
+
parent-to-children index, and recomposes on write instead of once a frame.
|
|
117
|
+
- A **bone socket** has no declarative replacement. Bones of a skinned or animated model are not
|
|
118
|
+
entities — a model expands into entities only when it has no skin and no clips — so ask
|
|
119
|
+
`query_entity_node_world_pose` for the bone and write the result yourself.
|
|
120
|
+
- `attachment-sockets.json` files are no longer an engine format. If you want to keep the named
|
|
121
|
+
anchor tables, load them as plain JSON in your own code and resolve the names at spawn time.
|
|
122
|
+
- **`Animations.fade`**: the mesh half is dropped — a faded-out entity pops. No replacement;
|
|
123
|
+
per-instance opacity does not exist.
|
|
124
|
+
- **Picking** is async and batched (`Pickable`, `PickingQuery`). There is no synchronous entry point,
|
|
125
|
+
by design.
|
|
126
|
+
- **`stats.js`** is a peer dependency by its own name; it was three's bundled copy before.
|
|
127
|
+
- **`gl-matrix`** is no longer a dependency; meep's own `m4_*` / `v3_*` functions replace it.
|
|
128
|
+
- **`.d.ts` files** are not in the source tree. Run `npm run generate-types`; they land in
|
|
129
|
+
`publish/src`.
|
|
130
|
+
|
|
131
|
+
## 9. If you are stuck
|
|
132
|
+
|
|
133
|
+
The renderer contract is the reference for everything in §2 and §5–§7, including a worked example of
|
|
134
|
+
putting a model on the screen and of adding your own work to a frame. Design documents for the parts
|
|
135
|
+
with real depth sit next to the code: `renderer/extension/RENDER_EXTENSION_DESIGN.md`,
|
|
136
|
+
`renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md`, `renderer/geometry/meshlet/README.md`.
|
package/SECURITY.md
ADDED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Always-on viewport camera navigation for the editor: right-drag orbits, middle-drag pans,
|
|
3
|
-
* wheel zooms. Editing tools keep the primary button to
|
|
3
|
+
* wheel zooms, through an {@link OrbitalCameraRig}. Editing tools keep the primary button to
|
|
4
|
+
* themselves.
|
|
4
5
|
*
|
|
5
6
|
* The editor camera is driven here, per engine tick, straight from its controller state —
|
|
6
7
|
* the TopDownCameraControllerSystem stays disabled while editing so controller-bearing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditorCameraNavigation.d.ts","sourceRoot":"","sources":["../../editor/EditorCameraNavigation.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EditorCameraNavigation.d.ts","sourceRoot":"","sources":["../../editor/EditorCameraNavigation.js"],"names":[],"mappings":"AA0BA;;;;;;;;GAQG;AACH;IAqDI;;;;;;OAMG;IACH,mCAJW,uBAAuB,qDA+CjC;IAED,eAsBC;;CAoCJ;oCAjMM,sEAAsE"}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import { assert } from "../src/core/assert.js";
|
|
2
|
-
import Vector2 from "../src/core/geom/Vector2.js";
|
|
3
2
|
import Vector3 from "../src/core/geom/Vector3.js";
|
|
4
|
-
import {
|
|
5
|
-
import TopDownCameraController
|
|
6
|
-
import {
|
|
3
|
+
import { OrbitalCameraRig } from "../src/engine/graphics/camera/orbital/OrbitalCameraRig.js";
|
|
4
|
+
import TopDownCameraController, {
|
|
7
5
|
computeTopDownTransform
|
|
8
|
-
} from "../src/engine/graphics/ecs/camera/topdown/
|
|
9
|
-
import {
|
|
6
|
+
} from "../src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js";
|
|
7
|
+
import { MouseEventButtons } from "../src/engine/input/devices/mouse/MouseEventButtons.js";
|
|
10
8
|
import { PointerDevice } from "../src/engine/input/devices/PointerDevice.js";
|
|
11
9
|
|
|
12
|
-
const ORBIT_SENSITIVITY = 0.008;
|
|
13
|
-
|
|
14
10
|
/**
|
|
15
11
|
* Pitch 0 looks along the horizon, PI/2 looks straight down. Below 0 the camera swings
|
|
16
12
|
* under the ground plane, where the terrain is backfacing and the scene is invisible;
|
|
@@ -21,13 +17,6 @@ const PITCH_MIN = 0.05;
|
|
|
21
17
|
|
|
22
18
|
const PITCH_MAX = Math.PI / 2;
|
|
23
19
|
|
|
24
|
-
/**
|
|
25
|
-
* Wheel deltas reach us normalized to -1/0/+1 by {@link PointerDevice}, so a notch is a
|
|
26
|
-
* multiplicative step on the orbit distance rather than a function of the raw pixel delta.
|
|
27
|
-
* @type {number}
|
|
28
|
-
*/
|
|
29
|
-
const ZOOM_STEP = 1.1;
|
|
30
|
-
|
|
31
20
|
/**
|
|
32
21
|
* The orbit pivot belongs on the ground plane — lifting it makes every subsequent orbit
|
|
33
22
|
* swing about a point floating in the air. Panning therefore moves it in XZ only.
|
|
@@ -35,11 +24,10 @@ const ZOOM_STEP = 1.1;
|
|
|
35
24
|
*/
|
|
36
25
|
const v3_pan_axis = new Vector3(1, 0, 1);
|
|
37
26
|
|
|
38
|
-
const v2_pan_delta = new Vector2();
|
|
39
|
-
|
|
40
27
|
/**
|
|
41
28
|
* Always-on viewport camera navigation for the editor: right-drag orbits, middle-drag pans,
|
|
42
|
-
* wheel zooms. Editing tools keep the primary button to
|
|
29
|
+
* wheel zooms, through an {@link OrbitalCameraRig}. Editing tools keep the primary button to
|
|
30
|
+
* themselves.
|
|
43
31
|
*
|
|
44
32
|
* The editor camera is driven here, per engine tick, straight from its controller state —
|
|
45
33
|
* the TopDownCameraControllerSystem stays disabled while editing so controller-bearing
|
|
@@ -61,6 +49,11 @@ export class EditorCameraNavigation {
|
|
|
61
49
|
*/
|
|
62
50
|
#controller = null;
|
|
63
51
|
|
|
52
|
+
/**
|
|
53
|
+
* @type {OrbitalCameraRig|null}
|
|
54
|
+
*/
|
|
55
|
+
#rig = null;
|
|
56
|
+
|
|
64
57
|
/**
|
|
65
58
|
* the editor camera's transform, written every tick
|
|
66
59
|
* @type {Transform|null}
|
|
@@ -84,7 +77,12 @@ export class EditorCameraNavigation {
|
|
|
84
77
|
*/
|
|
85
78
|
#context_menu_suppressor = null;
|
|
86
79
|
|
|
87
|
-
|
|
80
|
+
/**
|
|
81
|
+
* @param {number} time_delta seconds
|
|
82
|
+
*/
|
|
83
|
+
#handleTick = (time_delta) => {
|
|
84
|
+
this.#rig.update(time_delta);
|
|
85
|
+
|
|
88
86
|
computeTopDownTransform(this.#controller, this.#camera_transform);
|
|
89
87
|
};
|
|
90
88
|
|
|
@@ -103,10 +101,18 @@ export class EditorCameraNavigation {
|
|
|
103
101
|
this.#camera_transform = camera_transform;
|
|
104
102
|
this.#camera = camera;
|
|
105
103
|
|
|
104
|
+
this.#rig = new OrbitalCameraRig(controller, {
|
|
105
|
+
orbit_buttons: MouseEventButtons.secondary,
|
|
106
|
+
pan_buttons: MouseEventButtons.auxiliary,
|
|
107
|
+
pitch_min: PITCH_MIN,
|
|
108
|
+
pitch_max: PITCH_MAX,
|
|
109
|
+
pan_axes: v3_pan_axis
|
|
110
|
+
});
|
|
111
|
+
|
|
106
112
|
engine.ticker.onTick.add(this.#handleTick);
|
|
107
113
|
|
|
108
114
|
// apply the current controller state immediately, ticks may be a frame away
|
|
109
|
-
|
|
115
|
+
computeTopDownTransform(controller, camera_transform);
|
|
110
116
|
|
|
111
117
|
const graphics = engine.graphics;
|
|
112
118
|
|
|
@@ -122,7 +128,9 @@ export class EditorCameraNavigation {
|
|
|
122
128
|
|
|
123
129
|
const pointer = new PointerDevice(dom);
|
|
124
130
|
|
|
131
|
+
pointer.on.dragStart.add(this.#handleDragStart, this);
|
|
125
132
|
pointer.on.drag.add(this.#handleDrag, this);
|
|
133
|
+
pointer.on.dragEnd.add(this.#handleDragEnd, this);
|
|
126
134
|
pointer.on.wheel.add(this.#handleWheel, this);
|
|
127
135
|
|
|
128
136
|
pointer.start();
|
|
@@ -134,7 +142,9 @@ export class EditorCameraNavigation {
|
|
|
134
142
|
this.#engine.ticker.onTick.remove(this.#handleTick);
|
|
135
143
|
|
|
136
144
|
if (this.#pointer !== null) {
|
|
145
|
+
this.#pointer.on.dragStart.remove(this.#handleDragStart, this);
|
|
137
146
|
this.#pointer.on.drag.remove(this.#handleDrag, this);
|
|
147
|
+
this.#pointer.on.dragEnd.remove(this.#handleDragEnd, this);
|
|
138
148
|
this.#pointer.on.wheel.remove(this.#handleWheel, this);
|
|
139
149
|
this.#pointer.stop();
|
|
140
150
|
this.#pointer = null;
|
|
@@ -147,44 +157,36 @@ export class EditorCameraNavigation {
|
|
|
147
157
|
|
|
148
158
|
this.#engine = null;
|
|
149
159
|
this.#controller = null;
|
|
160
|
+
this.#rig = null;
|
|
150
161
|
this.#camera_transform = null;
|
|
151
162
|
this.#camera = null;
|
|
152
163
|
}
|
|
153
164
|
|
|
165
|
+
/**
|
|
166
|
+
* @param {Vector2} origin
|
|
167
|
+
* @param {MouseEvent} event
|
|
168
|
+
*/
|
|
169
|
+
#handleDragStart(origin, event) {
|
|
170
|
+
this.#rig.begin(event.buttons);
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
/**
|
|
155
174
|
*
|
|
156
175
|
* @param {Vector2} position
|
|
157
176
|
* @param {Vector2} origin
|
|
158
177
|
* @param {Vector2} previousPosition
|
|
159
|
-
* @param {MouseEvent} event
|
|
160
178
|
*/
|
|
161
|
-
#handleDrag(position, origin, previousPosition
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
controller.pitch = clamp(controller.pitch + dy * ORBIT_SENSITIVITY, PITCH_MIN, PITCH_MAX);
|
|
173
|
-
} else if (buttons[2]) {
|
|
174
|
-
// auxiliary (middle) button: pan
|
|
175
|
-
const graphics = this.#engine.graphics;
|
|
176
|
-
|
|
177
|
-
v2_pan_delta.copy(previousPosition);
|
|
178
|
-
v2_pan_delta.sub(position);
|
|
179
|
-
|
|
180
|
-
TopDownCameraController.pan(
|
|
181
|
-
v2_pan_delta,
|
|
182
|
-
controller,
|
|
183
|
-
graphics.viewport.size.y,
|
|
184
|
-
this.#camera.fov.getValue(),
|
|
185
|
-
v3_pan_axis
|
|
186
|
-
);
|
|
187
|
-
}
|
|
179
|
+
#handleDrag(position, origin, previousPosition) {
|
|
180
|
+
this.#rig.move(
|
|
181
|
+
position.x - previousPosition.x,
|
|
182
|
+
position.y - previousPosition.y,
|
|
183
|
+
this.#engine.graphics.viewport.size.y,
|
|
184
|
+
this.#camera.fov.getValue()
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
#handleDragEnd() {
|
|
189
|
+
this.#rig.end();
|
|
188
190
|
}
|
|
189
191
|
|
|
190
192
|
/**
|
|
@@ -192,14 +194,6 @@ export class EditorCameraNavigation {
|
|
|
192
194
|
* @param {Vector3} delta
|
|
193
195
|
*/
|
|
194
196
|
#handleWheel(delta) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
const factor = Math.pow(ZOOM_STEP, delta.y);
|
|
198
|
-
|
|
199
|
-
controller.distance = clamp(
|
|
200
|
-
controller.distance * factor,
|
|
201
|
-
controller.distanceMin,
|
|
202
|
-
controller.distanceMax
|
|
203
|
-
);
|
|
197
|
+
this.#rig.dolly(delta.y);
|
|
204
198
|
}
|
|
205
199
|
}
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"description": "Advanced 3D game engine",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"author": "Alexander Goldring",
|
|
9
|
-
"version": "3.60.
|
|
9
|
+
"version": "3.60.5",
|
|
10
10
|
"exports": {
|
|
11
11
|
"./build/*": "./build/*",
|
|
12
12
|
"./src/*": "./src/*",
|
|
@@ -41,7 +41,11 @@
|
|
|
41
41
|
"editor",
|
|
42
42
|
"samples",
|
|
43
43
|
"package.json",
|
|
44
|
-
"README.md"
|
|
44
|
+
"README.md",
|
|
45
|
+
"CHANGELOG.md",
|
|
46
|
+
"MIGRATION_2_TO_3.md",
|
|
47
|
+
"SECURITY.md",
|
|
48
|
+
"CONTRIBUTING.md"
|
|
45
49
|
],
|
|
46
50
|
"dependencies": {
|
|
47
51
|
"opentype.js": "1.3.4",
|
|
@@ -75,10 +75,9 @@ export class EngineHarness {
|
|
|
75
75
|
* @param {number} [params.cameraFarDistance]
|
|
76
76
|
* @param {boolean} [params.cameraController=true]
|
|
77
77
|
* @param {boolean} [params.cameraAutoClip]
|
|
78
|
-
* @param {number} [params.shadowmapResolution]
|
|
79
78
|
* @param {boolean} [params.showFps]
|
|
80
79
|
*/
|
|
81
|
-
static buildBasics({ engine, focus, heightMap, heightRange, pitch, yaw, distance, terrainSize, terrainResolution, enableWater, enableTerrain, enableLights, enableShadows, cameraFieldOfView, cameraFarDistance, cameraController, cameraAutoClip,
|
|
80
|
+
static buildBasics({ engine, focus, heightMap, heightRange, pitch, yaw, distance, terrainSize, terrainResolution, enableWater, enableTerrain, enableLights, enableShadows, cameraFieldOfView, cameraFarDistance, cameraController, cameraAutoClip, showFps }: {
|
|
82
81
|
engine: Engine;
|
|
83
82
|
focus?: {
|
|
84
83
|
x: number;
|
|
@@ -103,14 +102,12 @@ export class EngineHarness {
|
|
|
103
102
|
cameraFarDistance?: number;
|
|
104
103
|
cameraController?: boolean;
|
|
105
104
|
cameraAutoClip?: boolean;
|
|
106
|
-
shadowmapResolution?: number;
|
|
107
105
|
showFps?: boolean;
|
|
108
106
|
}): Promise<void>;
|
|
109
107
|
/**
|
|
110
108
|
* @param {Object} param
|
|
111
109
|
* @param {Engine} param.engine
|
|
112
110
|
* @param {EntityComponentDataset} [param.ecd]
|
|
113
|
-
* @param {number} [param.shadowmapResolution]
|
|
114
111
|
* @param {boolean} [param.castShadow]
|
|
115
112
|
* @param {Color} [param.sun]
|
|
116
113
|
* @param {number} [param.sunIntensity]
|
|
@@ -119,10 +116,9 @@ export class EngineHarness {
|
|
|
119
116
|
* @param {number} [param.ambientIntensity]
|
|
120
117
|
* @param {number} [param.sunShadowDistance] Maximum draw distance for sun's shadow. Allows better use of shadowmap resolution.
|
|
121
118
|
*/
|
|
122
|
-
static buildLights({ engine, ecd,
|
|
119
|
+
static buildLights({ engine, ecd, castShadow, sun, sunIntensity, sunDirection, sunShadowDistance, ambient, ambientIntensity }: {
|
|
123
120
|
engine: Engine;
|
|
124
121
|
ecd?: EntityComponentDataset;
|
|
125
|
-
shadowmapResolution?: number;
|
|
126
122
|
castShadow?: boolean;
|
|
127
123
|
sun?: Color;
|
|
128
124
|
sunIntensity?: number;
|
|
@@ -135,14 +131,12 @@ export class EngineHarness {
|
|
|
135
131
|
* @param {Object} param
|
|
136
132
|
* @param {number} [param.cameraEntity]
|
|
137
133
|
* @param {Engine} param.engine
|
|
138
|
-
* @param {number} [param.sensitivity]
|
|
139
134
|
* @param {EntityComponentDataset} [param.ecd]
|
|
140
135
|
* @returns {Promise<Entity>}
|
|
141
136
|
*/
|
|
142
|
-
static buildOrbitalCameraController({ cameraEntity, engine, ecd,
|
|
137
|
+
static buildOrbitalCameraController({ cameraEntity, engine, ecd, }: {
|
|
143
138
|
cameraEntity?: number;
|
|
144
139
|
engine: Engine;
|
|
145
|
-
sensitivity?: number;
|
|
146
140
|
ecd?: EntityComponentDataset;
|
|
147
141
|
}): Promise<Entity>;
|
|
148
142
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"EngineHarness.d.ts","sourceRoot":"","sources":["../../../src/engine/EngineHarness.js"],"names":[],"mappings":"AAqFA;IAmBI;;;;;OAKG;IACH;QAHmE,aAAa,GAArE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5C,QAAQ,MAAM,CAAC,CAM1B;IAED;;;;;;;;;OASG;IACH,0BAHW,MAAM,GACJ,KAAK,CAYjB;IAED;;;;;;;;;OASG;IACH,6BAHW,MAAM,GACJ,aAAa,CAQzB;IAkED;;;;;;;;;;;;;OAaG;IACH;QAZyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,MAAM,GAAtB,OAAO;QACQ,QAAQ,GAAvB,MAAM;QACS,KAAK,GAApB,MAAM;QACS,GAAG,GAAlB,MAAM;QACU,QAAQ,GAAxB,OAAO;QACQ,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACS,WAAW,GAA1B,MAAM;QACJ,MAAM,CA+DlB;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH;QAnB0B,MAAM,EAArB,MAAM;QACgC,KAAK,GAA3C;YAAC,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAC;YAAA,CAAC,EAAC,MAAM,CAAA;SAAC;QACrB,SAAS;QACT,WAAW;QACF,KAAK,GAArB,MAAM;QACU,GAAG,GAAnB,MAAM;QACU,QAAQ,GAAxB,MAAM;QACwB,WAAW,GAAzC;YAAC,CAAC,EAAC,MAAM,CAAC;YAAC,CAAC,EAAC,MAAM,CAAA;SAAC;QACJ,iBAAiB,GAAjC,MAAM;QACW,WAAW,GAA5B,OAAO;QACU,aAAa,GAA9B,OAAO;QACU,YAAY,GAA7B,OAAO;QACU,aAAa,GAA9B,OAAO;QACS,iBAAiB,GAAjC,MAAM;QACU,iBAAiB,GAAjC,MAAM;QACW,gBAAgB,GAAjC,OAAO;QACU,cAAc,GAA/B,OAAO;QACU,OAAO,GAAxB,OAAO;sBAwEjB;IAGD;;;;;;;;;;;OAWG;IACH;QAVyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACN,UAAU,GAA1B,OAAO;QACO,GAAG,GAAjB,KAAK;QACU,YAAY,GAA3B,MAAM;QACU,YAAY,GAA5B,OAAO;QACO,OAAO,GAArB,KAAK;QACU,gBAAgB,GAA/B,MAAM;QACS,iBAAiB,GAAhC,MAAM;sBA0DhB;IAED;;;;;;OAMG;IACH;QAL0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CAgD3B;IAGD;;;;;;;;;;OAUG;IACH;QAR2B,MAAM,EAAtB,MAAM;QACY,IAAI,GAAtB,OAAO;QACU,QAAQ;QACR,UAAU,GAA3B,MAAM;QACW,UAAU,GAA3B,MAAM;QACY,WAAW,GAA7B,OAAO;QACL,OAAO,CAwEnB;IAhgBD;;;OAGG;IACH,YAFU,eAAQ,IAAI,CAEb;IAGL;;;OAGG;IACH,QAFU,MAAM,CAEiC;IA2DrD;;;;;OAKG;IACH;QAJkE,aAAa,GAApE,CAAC,MAAM,EAAC,mBAAmB,EAAC,MAAM,EAAC,MAAM,QAAI;QAC5B,mBAAmB,GAApC,OAAO;QACL,QAAQ,MAAM,CAAC,CA0D3B;CA6XJ;;IAID;;;OAGG;IACH,uCAMC;;qCAxjBY,OAAO,iCAAiC,EAAE,sBAAsB;mBA7B1D,aAAa;oCACI,0BAA0B;sBAQxC,kCAAkC;8BAnB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBASzB,8BAA8B"}
|
|
@@ -9,6 +9,7 @@ import { JsonAssetLoader } from "./asset/loaders/JsonAssetLoader.js";
|
|
|
9
9
|
import { SerializationMetadata } from "./ecs/components/SerializationMetadata.js";
|
|
10
10
|
import Tag from "./ecs/components/Tag.js";
|
|
11
11
|
import Entity from "./ecs/Entity.js";
|
|
12
|
+
import ScriptSystem from "./ecs/systems/ScriptSystem.js";
|
|
12
13
|
import { TerrainLayer } from "./ecs/terrain/ecs/layers/TerrainLayer.js";
|
|
13
14
|
import Terrain from "./ecs/terrain/ecs/Terrain.js";
|
|
14
15
|
import { Transform64 } from "./ecs/transform/Transform64.js";
|
|
@@ -313,7 +314,6 @@ export class EngineHarness {
|
|
|
313
314
|
* @param {number} [params.cameraFarDistance]
|
|
314
315
|
* @param {boolean} [params.cameraController=true]
|
|
315
316
|
* @param {boolean} [params.cameraAutoClip]
|
|
316
|
-
* @param {number} [params.shadowmapResolution]
|
|
317
317
|
* @param {boolean} [params.showFps]
|
|
318
318
|
*/
|
|
319
319
|
static async buildBasics({
|
|
@@ -334,7 +334,6 @@ export class EngineHarness {
|
|
|
334
334
|
cameraFarDistance,
|
|
335
335
|
cameraController = true,
|
|
336
336
|
cameraAutoClip = true,
|
|
337
|
-
shadowmapResolution,
|
|
338
337
|
showFps = false
|
|
339
338
|
}) {
|
|
340
339
|
|
|
@@ -345,7 +344,6 @@ export class EngineHarness {
|
|
|
345
344
|
if (enableLights) {
|
|
346
345
|
await EngineHarness.buildLights({
|
|
347
346
|
engine: engine,
|
|
348
|
-
shadowmapResolution,
|
|
349
347
|
castShadow: enableShadows,
|
|
350
348
|
});
|
|
351
349
|
}
|
|
@@ -395,7 +393,6 @@ export class EngineHarness {
|
|
|
395
393
|
* @param {Object} param
|
|
396
394
|
* @param {Engine} param.engine
|
|
397
395
|
* @param {EntityComponentDataset} [param.ecd]
|
|
398
|
-
* @param {number} [param.shadowmapResolution]
|
|
399
396
|
* @param {boolean} [param.castShadow]
|
|
400
397
|
* @param {Color} [param.sun]
|
|
401
398
|
* @param {number} [param.sunIntensity]
|
|
@@ -407,7 +404,6 @@ export class EngineHarness {
|
|
|
407
404
|
static async buildLights({
|
|
408
405
|
engine,
|
|
409
406
|
ecd = engine.entityManager.dataset,
|
|
410
|
-
shadowmapResolution = 2048,
|
|
411
407
|
castShadow = true,
|
|
412
408
|
sun = DEFAULT_SUNLIGHT_COLOR,
|
|
413
409
|
sunIntensity = 0.9,
|
|
@@ -467,7 +463,6 @@ export class EngineHarness {
|
|
|
467
463
|
* @param {Object} param
|
|
468
464
|
* @param {number} [param.cameraEntity]
|
|
469
465
|
* @param {Engine} param.engine
|
|
470
|
-
* @param {number} [param.sensitivity]
|
|
471
466
|
* @param {EntityComponentDataset} [param.ecd]
|
|
472
467
|
* @returns {Promise<Entity>}
|
|
473
468
|
*/
|
|
@@ -475,7 +470,6 @@ export class EngineHarness {
|
|
|
475
470
|
cameraEntity,
|
|
476
471
|
engine,
|
|
477
472
|
ecd = engine.entityManager.dataset,
|
|
478
|
-
sensitivity = 1
|
|
479
473
|
}) {
|
|
480
474
|
|
|
481
475
|
if (cameraEntity === undefined) {
|
|
@@ -490,6 +484,11 @@ export class EngineHarness {
|
|
|
490
484
|
await em.addSystem(new InputControllerSystem(engine.devices));
|
|
491
485
|
}
|
|
492
486
|
|
|
487
|
+
// the orbit's throw and the keyboard pan advance in scripts
|
|
488
|
+
if (em.getSystem(ScriptSystem) === null) {
|
|
489
|
+
await em.addSystem(new ScriptSystem());
|
|
490
|
+
}
|
|
491
|
+
|
|
493
492
|
if (!ecd.isComponentTypeRegistered(SerializationMetadata)) {
|
|
494
493
|
ecd.registerComponentType(SerializationMetadata);
|
|
495
494
|
}
|
|
@@ -505,7 +504,6 @@ export class EngineHarness {
|
|
|
505
504
|
camera_entity: cameraEntity,
|
|
506
505
|
ecd,
|
|
507
506
|
dom_element: domElement,
|
|
508
|
-
sensitivity
|
|
509
507
|
});
|
|
510
508
|
|
|
511
509
|
eb.add(Tag.fromJSON(['CameraController']));
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* Pointer navigation for a camera entity's {@link TopDownCameraController}: drag with the primary
|
|
3
|
+
* button (or a touch) to orbit, with the secondary to pan, the wheel to zoom. A drag moves the camera
|
|
4
|
+
* as it happens and throws on release; see {@link OrbitalCameraRig}.
|
|
5
|
+
*
|
|
6
|
+
* The orbit swings all the way round, under the target included, short of turning over at the poles.
|
|
2
7
|
*
|
|
3
8
|
* @param {Object} options
|
|
4
|
-
* @param {number} options.camera_entity
|
|
9
|
+
* @param {number} options.camera_entity carries the {@link TopDownCameraController} and {@link Camera}
|
|
5
10
|
* @param {EntityComponentDataset} options.ecd
|
|
6
|
-
* @param {HTMLElement} options.dom_element
|
|
7
|
-
* @
|
|
8
|
-
* @return {Entity}
|
|
11
|
+
* @param {HTMLElement} options.dom_element the viewport, measured for its height
|
|
12
|
+
* @return {Entity} transient, to be built into the dataset
|
|
9
13
|
*/
|
|
10
|
-
export function makeOrbitalCameraController({ camera_entity, ecd, dom_element,
|
|
14
|
+
export function makeOrbitalCameraController({ camera_entity, ecd, dom_element, }: {
|
|
11
15
|
camera_entity: number;
|
|
12
16
|
ecd: EntityComponentDataset;
|
|
13
17
|
dom_element: HTMLElement;
|
|
14
|
-
sensitivity?: number;
|
|
15
18
|
}): Entity;
|
|
16
19
|
import Entity from "../../ecs/Entity.js";
|
|
17
20
|
//# sourceMappingURL=makeOrbitalCameraController.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeOrbitalCameraController.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/camera/makeOrbitalCameraController.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"makeOrbitalCameraController.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics/camera/makeOrbitalCameraController.js"],"names":[],"mappings":"AAUA;;;;;;;;;;;;GAYG;AACH;IAL2B,aAAa,EAA7B,MAAM;IAC0B,GAAG;IACd,WAAW,EAAhC,WAAW;IACV,MAAM,CA4DjB;mBA9EkB,qBAAqB"}
|