@woosh/meep-engine 3.60.4 → 3.60.6

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.
Files changed (419) hide show
  1. package/CHANGELOG.md +2621 -0
  2. package/CONTRIBUTING.md +7 -0
  3. package/MIGRATION_2_TO_3.md +136 -0
  4. package/SECURITY.md +4 -0
  5. package/editor/EditorCameraNavigation.d.ts +2 -1
  6. package/editor/EditorCameraNavigation.d.ts.map +1 -1
  7. package/editor/EditorCameraNavigation.js +51 -57
  8. package/package.json +6 -2
  9. package/src/engine/EngineHarness.d.ts +3 -9
  10. package/src/engine/EngineHarness.d.ts.map +1 -1
  11. package/src/engine/EngineHarness.js +6 -8
  12. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts +9 -6
  13. package/src/engine/graphics/camera/makeOrbitalCameraController.d.ts.map +1 -1
  14. package/src/engine/graphics/camera/makeOrbitalCameraController.js +44 -71
  15. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts +64 -0
  16. package/src/engine/graphics/camera/orbital/MomentumAxis.d.ts.map +1 -0
  17. package/src/engine/graphics/camera/orbital/MomentumAxis.js +187 -0
  18. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts +86 -0
  19. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.d.ts.map +1 -0
  20. package/src/engine/graphics/camera/orbital/OrbitalCameraRig.js +319 -0
  21. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts +34 -10
  22. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.d.ts.map +1 -1
  23. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +116 -30
  24. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts +1 -7
  25. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +1 -37
  27. package/src/engine/graphics/ecs/water/Water.d.ts +8 -0
  28. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  29. package/src/engine/graphics/ecs/water/Water.js +8 -0
  30. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  31. package/src/engine/graphics3/WaterSystem.js +731 -734
  32. package/src/engine/graphics3/decal/DecalTileShader.d.ts +61 -0
  33. package/src/engine/graphics3/decal/DecalTileShader.d.ts.map +1 -0
  34. package/src/engine/graphics3/decal/DecalTileShader.js +138 -0
  35. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts +10 -4
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +149 -44
  38. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts +25 -0
  39. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.d.ts.map +1 -0
  40. package/src/engine/graphics3/decal/chunk_decal_tile_vertex.js +55 -0
  41. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts +22 -0
  42. package/src/engine/graphics3/decal/graph_gather_decal_tiles.d.ts.map +1 -0
  43. package/src/engine/graphics3/decal/graph_gather_decal_tiles.js +70 -0
  44. package/src/engine/graphics3/decal/shader_decal_composite.d.ts +7 -5
  45. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  46. package/src/engine/graphics3/decal/shader_decal_composite.js +48 -44
  47. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts +12 -0
  48. package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -0
  49. package/src/engine/graphics3/decal/shader_decal_tile_copy.js +78 -0
  50. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts +11 -0
  51. package/src/engine/graphics3/decal/shader_gather_decal_tiles.d.ts.map +1 -0
  52. package/src/engine/graphics3/decal/shader_gather_decal_tiles.js +80 -0
  53. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts +13 -0
  54. package/src/engine/input/devices/mouse/MouseEventButtons.d.ts.map +1 -0
  55. package/src/engine/input/devices/mouse/MouseEventButtons.js +23 -0
  56. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts +4 -0
  57. package/src/engine/input/ecs/controllers/KeyboardCameraController.d.ts.map +1 -1
  58. package/src/engine/input/ecs/controllers/KeyboardCameraController.js +9 -45
  59. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  60. package/src/shade/playground/water_refraction/README.md +5 -6
  61. package/src/shade/playground/water_refraction/index.html +1 -1
  62. package/src/shade/renderer/Renderer.d.ts +11 -0
  63. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  64. package/src/shade/renderer/Renderer.js +50 -6
  65. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts +40 -80
  66. package/src/shade/renderer/camera/orbital/OrbitalCameraController.d.ts.map +1 -1
  67. package/src/shade/renderer/camera/orbital/OrbitalCameraController.js +197 -147
  68. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  69. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  70. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  71. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  72. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  73. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +28 -45
  74. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  75. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +111 -119
  76. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +22 -3
  77. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +1 -1
  78. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +84 -3
  79. package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts +19 -0
  80. package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.d.ts.map +1 -0
  81. package/src/shade/renderer/geometry/virtual/proxy/vgeo_proxy_triangle_limit.js +25 -0
  82. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts +31 -0
  83. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.d.ts.map +1 -0
  84. package/src/shade/renderer/geometry/virtual/proxy/vgeo_to_proxy_mesh.js +343 -0
  85. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +15 -0
  86. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts.map +1 -1
  87. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +38 -0
  88. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts +17 -0
  89. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.d.ts.map +1 -0
  90. package/src/shade/renderer/geometry/virtual/runtime/vgeo_meshlet_metadata_write.js +29 -0
  91. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.d.ts.map +1 -1
  92. package/src/shade/renderer/geometry/virtual/runtime/vgeo_runtime_meshlet_batch.js +7 -13
  93. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +28 -59
  94. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts.map +1 -1
  95. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +84 -789
  96. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +1 -8
  98. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +7 -6
  99. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +12 -11
  101. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.d.ts +2 -2
  102. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_instance.js +2 -2
  103. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +1 -4
  104. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +1 -10
  106. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +5 -15
  107. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +1 -1
  108. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +6 -34
  109. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  110. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +1 -7
  111. package/src/shade/renderer/hiz/HZBFootprint.d.ts +14 -0
  112. package/src/shade/renderer/hiz/HZBFootprint.d.ts.map +1 -0
  113. package/src/shade/renderer/hiz/HZBFootprint.js +16 -0
  114. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts +10 -0
  115. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.d.ts.map +1 -0
  116. package/src/shade/renderer/hiz/HZB_FOOTPRINT_X.js +11 -0
  117. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts +10 -0
  118. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.d.ts.map +1 -0
  119. package/src/shade/renderer/hiz/HZB_FOOTPRINT_Y.js +11 -0
  120. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +0 -7
  121. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  122. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +405 -350
  123. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts +12 -0
  124. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.d.ts.map +1 -0
  125. package/src/shade/renderer/hiz/chunk_hzb_footprint_x.js +27 -0
  126. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts +12 -0
  127. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.d.ts.map +1 -0
  128. package/src/shade/renderer/hiz/chunk_hzb_footprint_y.js +27 -0
  129. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts +14 -0
  130. package/src/shade/renderer/hiz/hzb_footprint_texels.d.ts.map +1 -0
  131. package/src/shade/renderer/hiz/hzb_footprint_texels.js +34 -0
  132. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +0 -5
  133. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  134. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +37 -57
  135. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts +11 -0
  136. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0.d.ts.map +1 -0
  137. package/src/shade/renderer/hiz/{shader_hzb_reduce_mip0_clip.js → shader_hzb_reduce_mip0.js} +120 -111
  138. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  139. package/src/shade/renderer/material/GPUMaterialManager.d.ts +11 -1
  140. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  141. package/src/shade/renderer/material/GPUMaterialManager.js +16 -8
  142. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +12 -12
  143. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  144. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +17 -118
  145. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +7 -3
  146. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  147. package/src/shade/renderer/postprocess/gtao/GTAO.js +26 -13
  148. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +14 -0
  149. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  150. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +196 -68
  151. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  152. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +42 -28
  153. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  154. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +429 -414
  155. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts +16 -0
  156. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.d.ts.map +1 -0
  157. package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +156 -0
  158. package/src/shade/renderer/scene/GPUSceneContext.d.ts +2 -2
  159. package/src/shade/renderer/scene/GPUSceneContext.js +5 -5
  160. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  161. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +7 -2
  162. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +0 -6
  163. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  164. package/src/shade/renderer/water/GPUWaterRenderer.js +12 -17
  165. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts +35 -0
  166. package/src/shade/renderer/water/medium/graph_water_meshlets.d.ts.map +1 -0
  167. package/src/shade/renderer/water/medium/graph_water_meshlets.js +89 -0
  168. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  169. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  170. package/src/shade/renderer/water/shader_water.js +22 -13
  171. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  172. package/src/shade/renderer/water/shader_water_avboit.js +7 -7
  173. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +1 -1
  174. package/src/shade/renderer/water/surface/graph_water_tessellation.js +1 -1
  175. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +9 -1
  176. package/editor/REWORK_PLAN_2026_08.md +0 -692
  177. package/src/CODEC_LAYOUT_VERIFICATION.md +0 -419
  178. package/src/CORRECTNESS_HUNT_2026_07_24.md +0 -142
  179. package/src/DUPLICATION_AUDIT_2026_08_07/00_core_reuse_surface.md +0 -738
  180. package/src/DUPLICATION_AUDIT_2026_08_07/A_core_math_geom.md +0 -79
  181. package/src/DUPLICATION_AUDIT_2026_08_07/B_core_data.md +0 -93
  182. package/src/DUPLICATION_AUDIT_2026_08_07/C_gfx_render.md +0 -80
  183. package/src/DUPLICATION_AUDIT_2026_08_07/D_gfx_features.md +0 -164
  184. package/src/DUPLICATION_AUDIT_2026_08_07/E_physics.md +0 -69
  185. package/src/DUPLICATION_AUDIT_2026_08_07/F_sound.md +0 -110
  186. package/src/DUPLICATION_AUDIT_2026_08_07/G_net_save.md +0 -129
  187. package/src/DUPLICATION_AUDIT_2026_08_07/H_engine_misc.md +0 -72
  188. package/src/DUPLICATION_AUDIT_2026_08_07/I_generation_view.md +0 -74
  189. package/src/DUPLICATION_AUDIT_2026_08_07/K_crosscutting.md +0 -169
  190. package/src/DUPLICATION_AUDIT_2026_08_07.md +0 -254
  191. package/src/DUPLICATION_AUDIT_REMEDIATION.md +0 -250
  192. package/src/DUPLICATION_REVIEW_2026_10_24.md +0 -1072
  193. package/src/REVIEW_2026_08_06/adv-core.md +0 -511
  194. package/src/REVIEW_2026_08_06/adv-gfx.md +0 -480
  195. package/src/REVIEW_2026_08_06/adv-view.md +0 -446
  196. package/src/REVIEW_2026_08_06/api-core.md +0 -296
  197. package/src/REVIEW_2026_08_06/api-engine.md +0 -195
  198. package/src/REVIEW_2026_08_06/bvh-phys-sound-net.md +0 -507
  199. package/src/REVIEW_2026_08_06/core-binary.md +0 -348
  200. package/src/REVIEW_2026_08_06/core-collection.md +0 -376
  201. package/src/REVIEW_2026_08_06/core-math.md +0 -221
  202. package/src/REVIEW_2026_08_06/core-process.md +0 -266
  203. package/src/REVIEW_2026_08_06/core-science.md +0 -223
  204. package/src/REVIEW_2026_08_06/engine-ai-nav.md +0 -279
  205. package/src/REVIEW_2026_08_06/engine-animation.md +0 -167
  206. package/src/REVIEW_2026_08_06/engine-asset.md +0 -166
  207. package/src/REVIEW_2026_08_06/engine-ecs.md +0 -920
  208. package/src/REVIEW_2026_08_06/engine-input.md +0 -197
  209. package/src/REVIEW_2026_08_06/engine-misc.md +0 -248
  210. package/src/REVIEW_2026_08_06/engine-terrain.md +0 -52
  211. package/src/REVIEW_2026_08_06/generation.md +0 -176
  212. package/src/REVIEW_2026_08_06/geom-2d.md +0 -434
  213. package/src/REVIEW_2026_08_06/geom-3d.md +0 -117
  214. package/src/REVIEW_2026_08_06/gfx-gi.md +0 -143
  215. package/src/REVIEW_2026_08_06/gfx-render.md +0 -740
  216. package/src/REVIEW_2026_08_06/gfx-texture.md +0 -690
  217. package/src/REVIEW_2026_08_06/prior-criticals.md +0 -49
  218. package/src/REVIEW_2026_08_06/prior-highs.md +0 -138
  219. package/src/REVIEW_2026_08_06/test-gaps.md +0 -364
  220. package/src/REVIEW_2026_08_06/view.md +0 -667
  221. package/src/REVIEW_2026_08_06.md +0 -610
  222. package/src/core/binary/lz4/LZ4_HIGH_COMPRESSION_PLAN_2026_09_14.md +0 -542
  223. package/src/core/bvh2/bvh3/NOTES.md +0 -2
  224. package/src/core/bvh8/NOTES.md +0 -63
  225. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +0 -243
  226. package/src/core/color/COLOR_FIX_PLAN_2026_08_28.md +0 -417
  227. package/src/core/color/COLOR_REVIEW_2026_08_28.md +0 -779
  228. package/src/core/geom/2d/polygon/TRIANGULATION_DESIGN.md +0 -433
  229. package/src/core/geom/3d/atlas/ATLAS_PORT_PLAN.md +0 -486
  230. package/src/core/geom/3d/atlas/BFF_PLAN.md +0 -174
  231. package/src/core/geom/3d/atlas/REVIEW_02.md +0 -392
  232. package/src/core/geom/3d/gjk/GJK_REVIEW_NOTES.md +0 -146
  233. package/src/core/geom/3d/gjk/NOTES.md +0 -8
  234. package/src/core/geom/3d/topology/TOPO_MESH_RETIREMENT_PLAN.md +0 -135
  235. package/src/core/geom/GEOMETRY_REVIEW_002_API_ISSUES.md +0 -381
  236. package/src/core/geom/GEOMETRY_REVIEW_002_NAMING.md +0 -684
  237. package/src/core/geom/MANIFOLD_COMPARISON_2026_08_01.md +0 -554
  238. package/src/core/model/reactive/evaluation/PREDICATE_APPLICABILITY_PROPOSAL.md +0 -446
  239. package/src/engine/REVIEW_2026_07_03.md +0 -211
  240. package/src/engine/asset/loaders/image/IMAGE_CODEC_REVIEW_2026_08_28.md +0 -815
  241. package/src/engine/control/first-person/DESIGN.md +0 -658
  242. package/src/engine/control/first-person/DESIGN_COLLISION.md +0 -382
  243. package/src/engine/control/first-person/DESIGN_EXTENSIONS.md +0 -563
  244. package/src/engine/control/first-person/TODO.md +0 -160
  245. package/src/engine/ecs/ASYNC_SYSTEMS_PROPOSAL.md +0 -531
  246. package/src/engine/ecs/HIERARCHY_REVIEW.md +0 -717
  247. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +0 -262
  248. package/src/engine/ecs/ik/PLAN.md +0 -179
  249. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +0 -272
  250. package/src/engine/ecs/storage/binary/object-v2/DESIGN.md +0 -199
  251. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +0 -521
  252. package/src/engine/graphics/CONTEXT_LOSS_RECOVERY_PLAN.md +0 -463
  253. package/src/engine/graphics/ecs/camera/pp/NOTES.md +0 -48
  254. package/src/engine/graphics/render/frame_graph/CORRECTNESS_FIXES_2026_09_04.md +0 -659
  255. package/src/engine/graphics/render/frame_graph/FRAME_GRAPH_RECOMMENDATIONS.md +0 -235
  256. package/src/engine/graphics/sh3/path_tracer/REVIEW_001_ACTION_PLAN.md +0 -490
  257. package/src/engine/graphics/texture/sampler/compare/FLIP_IMPLEMENTATION_PLAN.md +0 -466
  258. package/src/engine/input/GAMEPAD_API_PROPOSAL.md +0 -717
  259. package/src/engine/input/ecs/ism/ISM_DESIGN.md +0 -1523
  260. package/src/engine/input/ecs/ism/ISM_IMPLEMENTATION_PLAN.md +0 -627
  261. package/src/engine/navigation/mesh/OVERLAPPING_SURFACES_2026_08_25.md +0 -661
  262. package/src/engine/navigation/mesh/PATHFINDING_PLAN.md +0 -229
  263. package/src/engine/network/CONGESTION_CONTROL.md +0 -87
  264. package/src/engine/network/MESSAGE_TRANSPORT.md +0 -364
  265. package/src/engine/network/SMOOTHNESS_DESIGN.md +0 -400
  266. package/src/engine/physics/cloth/MEASUREMENTS.md +0 -5304
  267. package/src/engine/physics/cloth/PLAN.md +0 -3056
  268. package/src/engine/physics/fluid/GPU_FLUID_CASCADES_PROPOSAL_2026_10_16.md +0 -1382
  269. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +0 -243
  270. package/src/engine/physics/fluid/solver/NOTES.md +0 -46
  271. package/src/engine/sound/SOUND_EMITTER_RETIREMENT_PLAN.md +0 -536
  272. package/src/engine/sound/simulation/IMPLEMENTATION_PLAN.md +0 -432
  273. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +0 -250
  274. package/src/engine/sound/simulation/PROBE_TRANSFER_RESEARCH.md +0 -322
  275. package/src/engine/sound/simulation/REFLECTION_IR_PLAN.md +0 -261
  276. package/src/engine/sound/simulation/VISIBILITY_GRAPH_PLAN.md +0 -121
  277. package/src/engine/sound/sopra/IMPLEMENTATION_PLAN.md +0 -999
  278. package/src/format/image/avif/DECISIONS.md +0 -545
  279. package/src/format/image/jpeg/NOTES.md +0 -3
  280. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +0 -814
  281. package/src/generation/COORDINATES.md +0 -54
  282. package/src/generation/REVIEW_01_ACTION_PLAN.md +0 -628
  283. package/src/generation/foliage/ANNUAL_SHOOTS_BRIEF_2026_10_25.md +0 -220
  284. package/src/generation/foliage/CROWN_FILLING_BRIEF_2026_10_26.md +0 -172
  285. package/src/generation/foliage/CROWN_FULLNESS_BRIEF_2026_10_26.md +0 -86
  286. package/src/generation/foliage/FOLIAGE_DESIGN.md +0 -547
  287. package/src/generation/foliage/FOLIAGE_PLAN.md +0 -198
  288. package/src/generation/foliage/LEAF_ARCHITECTURE_BRIEF_2026_10_26.md +0 -158
  289. package/src/generation/foliage/LOD_REWORK_BRIEF_2026_10_27.md +0 -521
  290. package/src/generation/foliage/REAL_TIME_TREES_BRIEF_2026_10_27.md +0 -86
  291. package/src/generation/foliage/SELF_ORGANIZING_FRAMEWORK_BRIEF_2026_10_26.md +0 -347
  292. package/src/generation/foliage/SHOOT_SYSTEMS_ALL_SPECIES_BRIEF_2026_10_26.md +0 -248
  293. package/src/generation/foliage/SPEEDTREE_COMPARISON_2026_10_24.md +0 -694
  294. package/src/generation/foliage/TWO_FRONT_ENDS_BRIEF_2026_10_28.md +0 -552
  295. package/src/shade/RENDERER_CONTRACT.md +0 -697
  296. package/src/shade/SHADER_F16_PROPOSAL_2026_10_24.md +0 -263
  297. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +0 -569
  298. package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +0 -755
  299. package/src/shade/device/mock/EXTENSION_PROPOSAL_2026_08_22.md +0 -458
  300. package/src/shade/device/mock/IMPLEMENTATION_PLAN.md +0 -255
  301. package/src/shade/device/mock/REVIEW_2026_08_22.md +0 -527
  302. package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +0 -894
  303. package/src/shade/device/timing/profile/SGPT_FORMAT.md +0 -345
  304. package/src/shade/renderer/NOTES.md +0 -78
  305. package/src/shade/renderer/PLAN.md +0 -8
  306. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +0 -145
  307. package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +0 -357
  308. package/src/shade/renderer/atmosphere/NOTES.md +0 -6
  309. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts +0 -76
  310. package/src/shade/renderer/camera/orbital/MomentumAxis.d.ts.map +0 -1
  311. package/src/shade/renderer/camera/orbital/MomentumAxis.js +0 -164
  312. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts +0 -45
  313. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.d.ts.map +0 -1
  314. package/src/shade/renderer/camera/orbital/OrbitalCameraConfig.js +0 -66
  315. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +0 -98
  316. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +0 -1
  317. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +0 -184
  318. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +0 -175
  319. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +0 -1
  320. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +0 -411
  321. package/src/shade/renderer/camera/orbital/README.md +0 -81
  322. package/src/shade/renderer/camera/orbital/index.d.ts +0 -6
  323. package/src/shade/renderer/camera/orbital/index.d.ts.map +0 -1
  324. package/src/shade/renderer/camera/orbital/index.js +0 -9
  325. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +0 -964
  326. package/src/shade/renderer/fluid/GPU_FLUID_OCCUPANCY_AND_SOTA_REVIEW_2026_10_26.md +0 -361
  327. package/src/shade/renderer/geometry/bvh/BLAS_REFIT_BATCH_PLAN.md +0 -619
  328. package/src/shade/renderer/geometry/meshlet/COMPACTION_PLAN_2026_09_16.md +0 -674
  329. package/src/shade/renderer/geometry/sdf/NOTES.md +0 -6
  330. package/src/shade/renderer/geometry/virtual/ATTRIBUTE_PLAN_2026_09_18.md +0 -540
  331. package/src/shade/renderer/geometry/virtual/MICRON_COMPARISON_2026_08_20.md +0 -305
  332. package/src/shade/renderer/geometry/virtual/VGEO_FORMAT.md +0 -913
  333. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_DESIGN.md +0 -787
  334. package/src/shade/renderer/geometry/virtual/VIRTUAL_GEOMETRY_PLAN.md +0 -481
  335. package/src/shade/renderer/geometry/virtual/VK_LOD_CLUSTERS_COMPARISON_2026_08_20.md +0 -301
  336. package/src/shade/renderer/geometry/virtual/WEDGE_PLAN_2026_09_18.md +0 -448
  337. package/src/shade/renderer/geometry/virtual/runtime/CULL_PLAN_2026_09_16.md +0 -385
  338. package/src/shade/renderer/geometry/virtual/runtime/CUT_PLAN_2026_09_14.md +0 -656
  339. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +0 -308
  340. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN.md +0 -657
  341. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +0 -551
  342. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +0 -529
  343. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts +0 -47
  344. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.d.ts.map +0 -1
  345. package/src/shade/renderer/geometry/virtual/sdf/VGEO_SDF.js +0 -80
  346. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts +0 -16
  347. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.d.ts.map +0 -1
  348. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_collect.js +0 -67
  349. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts +0 -17
  350. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.d.ts.map +0 -1
  351. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_decode.js +0 -145
  352. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts +0 -12
  353. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.d.ts.map +0 -1
  354. package/src/shade/renderer/geometry/virtual/sdf/shader_vgeo_sdf_traverse.js +0 -105
  355. package/src/shade/renderer/global_illumination/lpv/NOTES.md +0 -3
  356. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_CLIPMAP_PROPOSAL_2026_10_27.md +0 -4306
  357. package/src/shade/renderer/global_illumination/probe_clipmap/PROBE_RAYS_VARIABLE_AND_SORTED_SCOPE_2026_10_30.md +0 -410
  358. package/src/shade/renderer/global_illumination/sharc/NOTES.md +0 -8
  359. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +0 -1369
  360. package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +0 -202
  361. package/src/shade/renderer/gpu_primitive/indirect/NOTES.md +0 -94
  362. package/src/shade/renderer/hiz/NOTES.md +0 -3
  363. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +0 -8
  364. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +0 -1
  365. package/src/shade/renderer/light/cluster/NOTES.md +0 -11
  366. package/src/shade/renderer/light/cluster/PROPOSAL_ALGORITHM_2026_10_16.md +0 -524
  367. package/src/shade/renderer/light/cluster/PROPOSAL_HIERARCHICAL_2026_10_16.md +0 -1101
  368. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts +0 -24
  369. package/src/shade/renderer/material/resident/shader_resident_texture_means.d.ts.map +0 -1
  370. package/src/shade/renderer/material/resident/shader_resident_texture_means.js +0 -120
  371. package/src/shade/renderer/particles/DESIGN.md +0 -1011
  372. package/src/shade/renderer/particles/EMITTER_GLOBAL_STATE_PLAN_2026_10_29.md +0 -280
  373. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +0 -453
  374. package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +0 -520
  375. package/src/shade/renderer/postprocess/bloom/NOTES.md +0 -6
  376. package/src/shade/renderer/postprocess/fsr/NOTES.md +0 -4
  377. package/src/shade/renderer/postprocess/gtao/NOTES.md +0 -6
  378. package/src/shade/renderer/postprocess/nss/NOTES.md +0 -332
  379. package/src/shade/renderer/postprocess/perspective/NOTES.md +0 -3
  380. package/src/shade/renderer/postprocess/sscs/NOTES.md +0 -5
  381. package/src/shade/renderer/postprocess/ssr/NOTES.md +0 -14
  382. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +0 -286
  383. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -39
  384. package/src/shade/renderer/postprocess/taa/NOTES.md +0 -11
  385. package/src/shade/renderer/postprocess/upscale-dither/NOTES.md +0 -78
  386. package/src/shade/renderer/postprocess/vrs/NOTES.md +0 -4
  387. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +0 -1218
  388. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +0 -600
  389. package/src/shade/renderer/restir/reservoir/NOTES.md +0 -6
  390. package/src/shade/renderer/shader/chunk/atmosphere/NOTES.md +0 -6
  391. package/src/shade/renderer/shader/chunk/brdf/FRESNEL_BRIEF_2026_10_16.md +0 -391
  392. package/src/shade/renderer/shader/chunk/color/tonemap/ACES_TONE_MAPPING_BRIEF_2026_10_17.md +0 -153
  393. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +0 -322
  394. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +0 -247
  395. package/src/shade/renderer/shader/chunk/fsr/NOTES.md +0 -3
  396. package/src/shade/renderer/shader/chunk/fsr/spd/NOTES.md +0 -4
  397. package/src/shade/renderer/shader/chunk/geometry/ray/NOTES.md +0 -4
  398. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +0 -159
  399. package/src/shade/renderer/shader/chunk/mboit/NOTES.md +0 -38
  400. package/src/shade/renderer/shader/chunk/spherical_harmonics/l1i/NOTES.md +0 -3
  401. package/src/shade/renderer/shader/chunk/spherical_harmonics/sampling/NOTES.md +0 -8
  402. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +0 -927
  403. package/src/shade/renderer/shadow/contact/FINDINGS.md +0 -413
  404. package/src/shade/renderer/shadow/map/csm/NOTES.md +0 -5
  405. package/src/shade/renderer/shadow/ray/NOTES.md +0 -31
  406. package/src/shade/renderer/shadow/sdf/NOTES.md +0 -9
  407. package/src/shade/renderer/shadow/sdf/brixelizer/NOTES.md +0 -5
  408. package/src/shade/renderer/shadow/sdf/cascade/NOTES.md +0 -9
  409. package/src/shade/renderer/shadow/vsm/NOTES.md +0 -12
  410. package/src/shade/renderer/shadow/vsm/PLAN.md +0 -442
  411. package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +0 -43
  412. package/src/shade/renderer/texture/COMPRESSED_TEXTURE_PLAN_2026_09_01.md +0 -2444
  413. package/src/shade/renderer/texture/mipmaps/NOTES.md +0 -3
  414. package/src/shade/renderer/volumetrics/NOTES.md +0 -1329
  415. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +0 -336
  416. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +0 -23
  417. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +0 -1
  418. package/src/shade/renderer/water/medium/GPUWaterBodies.js +0 -75
  419. package/src/shade/wgsl/NOTES.md +0 -4
@@ -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
@@ -0,0 +1,4 @@
1
+ # Security
2
+
3
+ Report a suspected vulnerability to **info@company-named.com** rather than disclosing it publicly.
4
+ Include the engine version and the smallest reproduction you have.
@@ -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 themselves.
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":"AAuCA;;;;;;;GAOG;AACH;IA2CI;;;;;;OAMG;IACH,mCAJW,uBAAuB,qDAqCjC;IAED,eAmBC;;CAqDJ;oCAxMmC,sEAAsE"}
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 { clamp } from "../src/core/math/clamp.js";
5
- import TopDownCameraController from "../src/engine/graphics/ecs/camera/topdown/TopDownCameraController.js";
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/TopDownCameraControllerSystem.js";
9
- import { decodeMouseEventButtons } from "../src/engine/input/devices/mouse/decodeMouseEventButtons.js";
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 themselves.
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
- #handleTick = () => {
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
- this.#handleTick();
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, event) {
162
- const buttons = decodeMouseEventButtons(event.buttons);
163
-
164
- const controller = this.#controller;
165
-
166
- if (buttons[1]) {
167
- // secondary (right) button: orbit
168
- const dx = position.x - previousPosition.x;
169
- const dy = position.y - previousPosition.y;
170
-
171
- controller.yaw += dx * ORBIT_SENSITIVITY;
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
- const controller = this.#controller;
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.4",
9
+ "version": "3.60.6",
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, shadowmapResolution, showFps }: {
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, shadowmapResolution, castShadow, sun, sunIntensity, sunDirection, sunShadowDistance, ambient, ambientIntensity }: {
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, sensitivity }: {
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":"AAoFA;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;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH;QApB0B,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;QACS,mBAAmB,GAAnC,MAAM;QACW,OAAO,GAAxB,OAAO;sBA0EjB;IAGD;;;;;;;;;;;;OAYG;IACH;QAXyB,MAAM,EAApB,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACP,mBAAmB,GAAlC,MAAM;QACU,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;sBA2DhB;IAED;;;;;;;OAOG;IACH;QAN0B,YAAY,GAA3B,MAAM;QACQ,MAAM,EAApB,MAAM;QACS,WAAW,GAA1B,MAAM;QACyB,GAAG,GAAlC,sBAAsB;QACpB,QAAQ,MAAM,CAAC,CA6C3B;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;IAngBD;;;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;CAgYJ;;IAID;;;OAGG;IACH,uCAMC;;qCA3jBY,OAAO,iCAAiC,EAAE,sBAAsB;mBA7B1D,aAAa;oCACI,0BAA0B;sBAQxC,kCAAkC;8BAlB1B,mCAAmC;oBAD7C,yBAAyB;mBAK1B,iBAAiB;sBATd,wBAAwB;oBAG1B,yBAAyB;oBAQzB,8BAA8B"}
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
- * @param {number} [options.sensitivity]
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, sensitivity }: {
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":"AAOA;;;;;;;;GAQG;AACH;IAN2B,aAAa,EAA7B,MAAM;IAC0B,GAAG;IACd,WAAW,EAAhC,WAAW;IACM,WAAW,GAA5B,MAAM;IACL,MAAM,CA8FjB;mBA3GkB,qBAAqB"}
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"}