@woosh/meep-engine 2.37.18 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/core/assert.js +1 -1
  2. package/core/binary/float2uint8.js +8 -0
  3. package/core/binary/uint82float.js +8 -0
  4. package/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +6 -4
  5. package/core/collection/array/array_get_index_in_range.js +16 -0
  6. package/core/collection/array/typed/isTypedArray.js +20 -0
  7. package/core/collection/array/typedArrayToDataType.js +1 -0
  8. package/{engine/navigation/grid → core/collection/heap}/BinaryHeap.js +6 -1
  9. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.js +3 -2
  10. package/{engine/navigation/grid → core/collection/heap}/FastBinaryHeap.spec.js +3 -3
  11. package/core/collection/heap/Uin32Heap.spec.js +59 -0
  12. package/core/collection/heap/Uint32Heap.js +385 -0
  13. package/core/collection/list/List.d.ts +1 -1
  14. package/core/collection/table/RowFirstTable.js +34 -0
  15. package/core/collection/table/RowFirstTable.spec.js +59 -1
  16. package/core/color/Color.js +83 -1
  17. package/core/color/YCbCr_to_rgb_uint24.js +3 -4
  18. package/core/color/hsv2rgb.js +4 -3
  19. package/core/color/linear_to_sRGB.js +4 -5
  20. package/core/color/rgb2hex.js +1 -1
  21. package/core/color/rgb2uint24.js +6 -4
  22. package/core/color/rgb_to_YCbCr_uint24.js +11 -13
  23. package/core/events/signal/Signal.d.ts +11 -9
  24. package/core/events/signal/Signal.spec.js +16 -0
  25. package/core/geom/2d/quad-tree/qt_collect_by_circle.js +67 -0
  26. package/core/geom/3d/topology/computeTopoMeshVertexDuplicates.js +9 -6
  27. package/core/geom/3d/topology/expandConnectivityByLocality.js +5 -5
  28. package/core/geom/3d/topology/query/query_edge_is_boundary.js +7 -0
  29. package/core/geom/3d/topology/query/query_edge_is_manifold.js +13 -0
  30. package/core/geom/3d/topology/query/query_edge_is_manifold_or_boundary.js +11 -0
  31. package/core/geom/3d/topology/query/query_edge_is_wire.js +13 -0
  32. package/core/geom/3d/topology/query/query_edge_other_vertex.js +20 -0
  33. package/core/geom/3d/topology/query/query_edge_share_vert.js +9 -0
  34. package/core/geom/3d/topology/query/query_face_get_other_edges.js +39 -0
  35. package/core/geom/3d/topology/query/query_face_next_vertex.js +19 -0
  36. package/core/geom/3d/topology/query/query_face_prev_vertex.js +18 -0
  37. package/core/geom/3d/topology/query/query_vertex_in_edge.js +14 -0
  38. package/core/geom/3d/topology/query/query_vertex_pair_share_face.js +24 -0
  39. package/core/geom/3d/topology/query/query_vertices_in_edge.js +19 -0
  40. package/core/geom/3d/topology/simplify/collapseEdge.spec.js +3 -5
  41. package/core/geom/3d/topology/simplify/collapse_all_degenerate_edges.js +8 -10
  42. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +12 -2
  43. package/core/geom/3d/topology/simplify/decimate_edge_collapse_snap.js +277 -0
  44. package/core/geom/3d/topology/simplify/edge_collapse_quadratic.js +126 -0
  45. package/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +502 -0
  46. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +37 -5
  47. package/core/geom/3d/topology/simplify/quadratic/build_vertex_quadratics.js +86 -1
  48. package/core/geom/3d/topology/simplify/simplifyTopoMesh.js +4 -4
  49. package/core/geom/3d/topology/simplify/simplifyTopoMesh2.js +119 -0
  50. package/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +81 -0
  51. package/core/geom/3d/topology/{TopoEdge.js → struct/TopoEdge.js} +47 -20
  52. package/core/geom/3d/topology/{TopoEdge.spec.js → struct/TopoEdge.spec.js} +0 -0
  53. package/core/geom/3d/topology/{TopoMesh.js → struct/TopoMesh.js} +20 -41
  54. package/core/geom/3d/topology/{TopoTriangle.js → struct/TopoTriangle.js} +15 -25
  55. package/core/geom/3d/topology/{TopoVertex.js → struct/TopoVertex.js} +21 -4
  56. package/core/geom/3d/topology/{TopoVertex.spec.js → struct/TopoVertex.spec.js} +0 -0
  57. package/core/geom/3d/topology/tm_edge_kill.js +24 -0
  58. package/core/geom/3d/topology/tm_edge_splice.js +42 -0
  59. package/core/geom/3d/topology/tm_face_area.js +18 -0
  60. package/core/geom/3d/topology/tm_face_kill.js +12 -0
  61. package/core/geom/3d/topology/tm_face_normal.js +14 -0
  62. package/core/geom/3d/topology/tm_kill_only_edge.js +35 -0
  63. package/core/geom/3d/topology/tm_kill_only_face.js +12 -0
  64. package/core/geom/3d/topology/tm_kill_only_vert.js +14 -0
  65. package/core/geom/3d/topology/tm_vert_kill.js +19 -0
  66. package/core/geom/3d/topology/tm_vert_splice.js +64 -0
  67. package/core/geom/3d/topology/tm_vertex_compute_normal.js +42 -0
  68. package/core/geom/3d/topology/topoMeshToBufferGeometry.js +18 -4
  69. package/core/geom/3d/topology/weld_duplicate_vertices.js +63 -0
  70. package/core/geom/Quaternion.d.ts +21 -1
  71. package/core/geom/Quaternion.js +279 -200
  72. package/core/geom/Quaternion.spec.js +71 -2
  73. package/core/geom/Vector2.js +3 -3
  74. package/core/geom/Vector3.d.ts +2 -0
  75. package/core/geom/Vector3.js +31 -7
  76. package/core/geom/Vector3.schema.json +16 -0
  77. package/core/geom/Vector4.js +16 -0
  78. package/core/geom/packing/MaxRectangles.js +1 -1
  79. package/core/graph/cluster_mesh_metis.js +16 -0
  80. package/core/graph/coarsen_graph.js +1 -1
  81. package/core/graph/graph_k_means_cluster.js +1 -1
  82. package/core/json/JsonUtils.js +2 -20
  83. package/core/math/bell_membership_function.js +19 -0
  84. package/core/math/exp2.js +8 -0
  85. package/core/math/interval/NumericInterval.js +17 -0
  86. package/core/math/physics/brdf/brdf_burley.js +25 -0
  87. package/core/math/physics/bsdf/bsdf_schlick.js +22 -0
  88. package/core/math/physics/irradiance/interpolate_irradiance_linear.js +18 -0
  89. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundLogarithmic.js → core/math/physics/irradiance/interpolate_irradiance_lograrithmic.js} +2 -2
  90. package/{engine/sound/ecs/emitter/attenuate/attenuateSoundSmith.js → core/math/physics/irradiance/interpolate_irradiance_smith.js} +1 -1
  91. package/core/math/random/seededRandom.js +2 -31
  92. package/core/math/random/seededRandom_Mulberry32.js +31 -0
  93. package/core/math/random/seededRandom_sine.js +33 -0
  94. package/core/model/ObservedEnum.js +8 -0
  95. package/editor/Editor.js +97 -1
  96. package/editor/actions/concrete/ModifyPatchSampler2DAction.js +118 -0
  97. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +30 -0
  98. package/editor/actions/concrete/PatchTerrainHeightAction.js +13 -105
  99. package/editor/ecs/component/FieldDescriptor.js +34 -0
  100. package/editor/ecs/component/FieldValueAdapter.js +20 -0
  101. package/editor/ecs/component/TypeEditor.js +33 -0
  102. package/editor/ecs/component/TypeSchema.d.ts +38 -0
  103. package/editor/ecs/component/createFieldEditor.js +90 -0
  104. package/editor/ecs/component/createObjectEditor.js +266 -60
  105. package/editor/ecs/component/editors/ColorEditor.js +39 -0
  106. package/editor/ecs/component/editors/HTMLElementEditor.js +17 -0
  107. package/editor/ecs/component/editors/ImagePathEditor.js +50 -0
  108. package/editor/ecs/component/editors/NumericIntervalEditor.js +86 -0
  109. package/editor/ecs/component/editors/ObservedBooleanEditor.js +13 -0
  110. package/editor/ecs/component/editors/ObservedEnumEditor.js +32 -0
  111. package/editor/ecs/component/editors/ObservedIntegerEditor.js +43 -0
  112. package/editor/ecs/component/editors/ObservedStringEditor.js +51 -0
  113. package/editor/ecs/component/editors/Sampler2DEditor.js +107 -0
  114. package/editor/ecs/component/editors/collection/ListEditor.js +83 -0
  115. package/editor/ecs/component/editors/common/BitFlagsEditor.js +80 -0
  116. package/editor/ecs/component/editors/common/EnumEditor.js +41 -0
  117. package/editor/ecs/component/editors/common/makeV3_editor.js +85 -0
  118. package/editor/ecs/component/editors/common/noEditor.js +9 -0
  119. package/editor/ecs/component/editors/ecs/GridObstacleEditor.js +17 -0
  120. package/editor/ecs/component/editors/ecs/MinimapMarkerEditor.js +16 -0
  121. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +44 -0
  122. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +17 -0
  123. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +58 -0
  124. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +54 -0
  125. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +21 -0
  126. package/editor/ecs/component/editors/ecs/Trail2DEditor.js +33 -0
  127. package/editor/ecs/component/editors/ecs/TransformEditor.js +23 -0
  128. package/editor/ecs/component/editors/ecs/terrain/SplatMappingEditor.js +21 -0
  129. package/editor/ecs/component/editors/ecs/terrain/TerrainEditor.js +89 -0
  130. package/editor/ecs/component/editors/ecs/terrain/TerrainLayerEditor.js +18 -0
  131. package/editor/ecs/component/editors/ecs/terrain/TerrainLayersEditor.js +22 -0
  132. package/editor/ecs/component/editors/ecs/terrain/TerrainOverlayEditor.js +20 -0
  133. package/editor/ecs/component/editors/geom/QuaternionEditor.js +56 -0
  134. package/editor/ecs/component/editors/geom/Vector1Editor.js +57 -0
  135. package/editor/ecs/component/editors/geom/Vector2Editor.js +11 -0
  136. package/editor/ecs/component/editors/geom/Vector3Editor.js +13 -0
  137. package/editor/ecs/component/editors/geom/Vector4Editor.js +12 -0
  138. package/editor/ecs/component/editors/primitive/ArrayEditor.js +46 -0
  139. package/editor/ecs/component/editors/primitive/BooleanEditor.js +27 -0
  140. package/editor/ecs/component/editors/primitive/FunctionEditor.js +29 -0
  141. package/editor/ecs/component/editors/primitive/NumberEditor.js +60 -0
  142. package/editor/ecs/component/editors/primitive/ObjectEditor.js +12 -0
  143. package/editor/ecs/component/editors/primitive/StringEditor.js +31 -0
  144. package/editor/ecs/component/editors/three/BufferGeometryEditor.js +28 -0
  145. package/editor/ecs/component/editors/three/MaterialEditor.js +27 -0
  146. package/editor/ecs/component/editors/three/MeshEditor.js +35 -0
  147. package/editor/ecs/component/editors/three/TextureEditor.js +32 -0
  148. package/editor/ecs/component/findNearestRegisteredType.js +59 -0
  149. package/editor/ecs/component/prototypeObjectEditor.js +379 -0
  150. package/editor/tools/SelectionTool.js +1 -1
  151. package/editor/tools/paint/TerrainHeightPaintTool.js +88 -68
  152. package/editor/tools/paint/TerrainPaintTool.js +2 -1
  153. package/editor/tools/paint/TerrainTexturePaintTool.js +8 -73
  154. package/editor/view/EditorView.js +1 -1
  155. package/editor/view/ecs/ComponentControlView.js +2 -30
  156. package/editor/view/ecs/EntityEditor.js +61 -139
  157. package/editor/view/ecs/components/GridObstacleController.js +4 -4
  158. package/editor/view/ecs/components/TerrainController.js +1 -1
  159. package/editor/view/ecs/components/common/NumberController.js +19 -7
  160. package/editor/view/node-graph/NodeGraphView.js +2 -2
  161. package/editor/view/node-graph/NodeView.js +7 -9
  162. package/engine/animation/keyed2/AnimationTrack.js +1 -1
  163. package/engine/asset/AssetManager.d.ts +1 -1
  164. package/engine/asset/AssetManager.js +390 -388
  165. package/engine/asset/loaders/gltf/extensions/MSFT_texture_dds.js +14 -2
  166. package/engine/ecs/components/TagEditor.js +15 -0
  167. package/engine/ecs/fow/FogOfWarEditor.js +13 -0
  168. package/engine/ecs/parent/ParentEntitySystem.js +57 -0
  169. package/engine/ecs/terrain/ecs/OffsetScaleTransform2D.d.ts +6 -0
  170. package/engine/ecs/terrain/ecs/Terrain.js +44 -43
  171. package/engine/ecs/terrain/ecs/TerrainSystem.js +2 -2
  172. package/engine/ecs/terrain/ecs/layers/TerrainLayer.js +1 -1
  173. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +26 -28
  174. package/engine/ecs/terrain/overlay/TerrainOverlay.js +71 -66
  175. package/engine/ecs/terrain/tiles/TerrainTileManager.js +23 -0
  176. package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +1 -1
  177. package/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +13 -7
  178. package/engine/ecs/terrain/util/tensionOptimizeUV.js +1 -1
  179. package/engine/ecs/transform/Transform.d.ts +2 -0
  180. package/engine/ecs/transform/Transform.editor.schema.json +16 -0
  181. package/engine/ecs/transform/Transform.js +3 -0
  182. package/engine/graphics/ecs/highlight/HighlightEditor.js +17 -0
  183. package/engine/graphics/ecs/light/Light.js +0 -47
  184. package/engine/graphics/ecs/light/LightSerializationAdapter.js +50 -0
  185. package/engine/graphics/ecs/mesh/MeshEditor.js +28 -0
  186. package/engine/graphics/ecs/mesh-v2/DrawMode.js +2 -1
  187. package/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +3 -3
  188. package/engine/graphics/ecs/mesh-v2/build_three_object.js +3 -1
  189. package/engine/graphics/ecs/mesh-v2/sg_compute_hierarchy_bounding_box_by_parent_entity.js +31 -0
  190. package/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.d.ts +4 -0
  191. package/engine/graphics/ecs/sprite/Sprite.js +11 -0
  192. package/engine/graphics/ecs/sprite/SpriteSystemPE.js +133 -0
  193. package/engine/graphics/ecs/sprite/prototypeSpriteSystem.js +1570 -0
  194. package/engine/graphics/micron/build/PatchRepresentation.js +7 -3
  195. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +18 -8
  196. package/engine/graphics/micron/build/clustering/build_clustering_2.js +1 -1
  197. package/engine/graphics/micron/build/clustering/build_leaf_patches.js +2 -2
  198. package/engine/graphics/micron/build/clustering/build_leaf_patches_metis.js +1 -1
  199. package/engine/graphics/micron/build/hierarchy/buildAbstractPatchHierarchy.js +21 -3
  200. package/engine/graphics/micron/build/hierarchy/merge_patches.js +96 -43
  201. package/engine/graphics/micron/build/hierarchy/qvdr_build_simplified_clusters.js +11 -5
  202. package/engine/graphics/micron/format/VirtualGeometry.js +46 -3
  203. package/engine/graphics/micron/format/micron_build_proxy_geometry.js +4 -2
  204. package/engine/graphics/micron/prototypeVirtualGeometry.js +47 -10
  205. package/engine/graphics/micron/render/instanced/shader/shader_rewrite_standard.js +17 -17
  206. package/engine/graphics/micron/render/refinement/get_geometry_patch_cut.js +15 -3
  207. package/engine/graphics/micron/simplifyGeometry.js +1 -1
  208. package/engine/graphics/particles/particular/engine/ParticularEngine.js +5 -0
  209. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +17 -9
  210. package/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +12 -10
  211. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +7 -2
  212. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +27 -0
  213. package/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +80 -0
  214. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +16 -4
  215. package/engine/graphics/shaders/TerrainShader.js +8 -8
  216. package/engine/graphics/texture/atlas/TextureAtlasDebugger.js +2 -1
  217. package/engine/graphics/texture/sampler/Sampler2D.js +206 -201
  218. package/engine/graphics/texture/sampler/Sampler2D.spec.js +34 -35
  219. package/engine/graphics/texture/sampler/bicubic.js +59 -0
  220. package/engine/graphics/texture/sampler/downsampleSample2D.spec.js +2 -2
  221. package/engine/graphics/texture/sampler/genericResampleSampler2D.js +0 -2
  222. package/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +146 -0
  223. package/engine/graphics/texture/sampler/{downsampleSampler2D.js → sampler2D_scale_down_linear.js} +8 -4
  224. package/engine/graphics/texture/sampler/sampler2_d_scale_down_lanczos.js +140 -0
  225. package/engine/graphics/texture/sampler/scaleSampler2D.js +3 -3
  226. package/engine/graphics/texture/sampler/writeSampler2DDataToDataTexture.js +1 -1
  227. package/engine/graphics/util/ScaleObject3ToBox.js +14 -1
  228. package/engine/graphics/util/makeMeshPreviewScene.js +2 -1
  229. package/engine/grid/components/GridObstacle.js +0 -44
  230. package/engine/grid/components/GridObstacleSerializationAdapter.js +46 -0
  231. package/engine/input/devices/PointerDevice.d.ts +1 -1
  232. package/engine/input/devices/PointerDevice.js +17 -2
  233. package/engine/input/ecs/util/TerrainCameraTargetSampler.js +2 -2
  234. package/engine/navigation/ecs/components/Path.d.ts +2 -0
  235. package/engine/navigation/ecs/components/Path.js +6 -1
  236. package/engine/navigation/ecs/components/computeNonuniformCatmullRomSplineSample.js +117 -0
  237. package/engine/navigation/grid/AStar.js +1 -1
  238. package/engine/navigation/grid/GridField.js +3 -2
  239. package/engine/platform/GetURLHash.js +27 -0
  240. package/engine/platform/WebEnginePlatform.js +1 -22
  241. package/engine/sound/ecs/emitter/SoundEmitter.js +10 -6
  242. package/engine/ui/DraggableAspect.js +2 -2
  243. package/generation/GridGenerator.js +7 -6
  244. package/generation/example/SampleGenerator0.js +39 -35
  245. package/generation/example/filters/SampleGroundMoistureFilter.js +58 -17
  246. package/generation/example/generators/interactive/mir_generator_place_buff_objects.js +7 -6
  247. package/generation/example/generators/mir_generator_place_bases.js +7 -3
  248. package/generation/example/generators/mir_generator_place_road_decorators.js +3 -3
  249. package/generation/example/generators/mir_generator_place_starting_point.js +3 -2
  250. package/generation/example/themes/SampleTheme0.js +11 -7
  251. package/generation/filtering/numeric/CellFilterLiteralFloat.js +5 -0
  252. package/generation/filtering/numeric/complex/CellFilterDilate.js +36 -0
  253. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +15 -5
  254. package/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +53 -1
  255. package/generation/filtering/numeric/math/CellFilterMax2.js +3 -0
  256. package/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +55 -0
  257. package/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +42 -0
  258. package/generation/filtering/numeric/sampling/CellFilterSampleLayerCubic.js +36 -0
  259. package/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +41 -0
  260. package/generation/grid/GridData.d.ts +5 -1
  261. package/generation/grid/GridData.js +35 -36
  262. package/generation/grid/MarkerMatchCounter.js +5 -3
  263. package/generation/grid/generation/discrete/GridTaskConnectRooms.js +1 -1
  264. package/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +1 -1
  265. package/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +1 -1
  266. package/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
  267. package/generation/markers/GridActionRuleSet.js +15 -32
  268. package/generation/markers/GridCellActionPlaceMarker.js +12 -8
  269. package/generation/markers/debug/visualizeMarkers.js +56 -36
  270. package/generation/markers/emitter/MarkerNodeEmitterFromAction.js +8 -8
  271. package/generation/markers/prototypeGridCellActionPlaceMarker.js +209 -0
  272. package/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -5
  273. package/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +2 -2
  274. package/generation/placement/GridCellPlacementRule.js +31 -25
  275. package/generation/theme/ThemeEngine.js +1 -1
  276. package/package.json +1 -1
  277. package/samples/terrain/from_image.js +7 -3
  278. package/samples/terrain/main.js +1 -1
  279. package/view/View.js +23 -1
  280. package/view/common/LabelView.js +1 -1
  281. package/view/compose3x3transform.js +32 -8
  282. package/view/controller/dat/DatGuiUtils.js +1 -1
  283. package/view/elements/DropDownSelectionView.js +11 -3
  284. package/view/elements/image/ImageView.js +3 -1
  285. package/core/model/ObservedReal.js +0 -55
  286. package/editor/ecs/component/ObjectEditor.js +0 -0
  287. package/engine/graphics/particles/particular/engine/renderers/SoftBillboardParticleRenderer.js +0 -7
  288. package/engine/sound/ecs/emitter/attenuate/attenuateSoundLinear.js +0 -11
  289. package/generation/filtering/numeric/CellFilterReadGridLayer.js +0 -73
@@ -1,3 +1,5 @@
1
+ import { REVISION } from 'three';
2
+
1
3
  /**
2
4
  * DDS Texture Extension
3
5
  *
@@ -28,7 +30,17 @@ export default class GLTFTextureDDSExtension {
28
30
  return null;
29
31
  }
30
32
  const extensionDef = textureDef.extensions[this.name];
31
- const source = json.images[extensionDef.source];
32
- return this.parser.loadTextureImage(textureIndex, source, this.ddsLoader);
33
+ const source_index = extensionDef.source;
34
+
35
+ const source = json.images[source_index];
36
+
37
+ if (REVISION <= 137) {
38
+
39
+ return this.parser.loadTextureImage(textureIndex, source, this.ddsLoader);
40
+
41
+ } else {
42
+ // API of GLTFLoader has changed after 137
43
+ return this.parser.loadTextureImage(textureIndex, source_index, this.ddsLoader);
44
+ }
33
45
  }
34
46
  }
@@ -0,0 +1,15 @@
1
+ import { ObjectEditor } from "../../../editor/ecs/component/editors/primitive/ObjectEditor.js";
2
+
3
+ export class TagEditor extends ObjectEditor {
4
+ get schema() {
5
+ return {
6
+ additionalProperties: false,
7
+ properties: {
8
+ values: {
9
+ type: Array,
10
+ type_parameters: [String]
11
+ }
12
+ }
13
+ };
14
+ }
15
+ }
@@ -0,0 +1,13 @@
1
+ import { ObjectEditor } from "../../../editor/ecs/component/editors/primitive/ObjectEditor.js";
2
+
3
+ export class FogOfWarEditor extends ObjectEditor {
4
+ get schema() {
5
+ return {
6
+ properties: {
7
+ revealAll: {
8
+ type: Function
9
+ }
10
+ }
11
+ };
12
+ }
13
+ }
@@ -162,4 +162,61 @@ export class ParentEntitySystem extends AbstractContextSystem {
162
162
 
163
163
  return parent.entity;
164
164
  }
165
+
166
+ /**
167
+ *
168
+ * @param {number[]} result
169
+ * @param {number} result_offset
170
+ * @param {EntityComponentDataset} ecd
171
+ * @param {number} entity
172
+ * @returns {number}
173
+ */
174
+ static findChildrenOf(result, result_offset, ecd, entity) {
175
+ let result_cursor = result_offset;
176
+ ecd.traverseComponents(ParentEntity, (p, e) => {
177
+ if (p.entity === entity) {
178
+ result[result_cursor++] = e;
179
+ }
180
+ });
181
+
182
+ return result_cursor - result_offset;
183
+ }
184
+
185
+ /**
186
+ *
187
+ * @param {EntityComponentDataset} ecd
188
+ * @param {number} root_entity
189
+ * @param {function(number, EntityComponentDataset)} callback
190
+ * @param {*} [thisArg]
191
+ */
192
+ static traverse(ecd, root_entity, callback, thisArg) {
193
+ traverse(ecd, root_entity, callback, thisArg);
194
+ }
195
+ }
196
+
197
+ /**
198
+ *
199
+ * @param {EntityComponentDataset} ecd
200
+ * @param {number} root_entity
201
+ * @param {function(number, EntityComponentDataset)} callback
202
+ * @param {*} [thisArg]
203
+ * @param {number[]} path keep track of where we came from, this is used to detect cycles
204
+ */
205
+ function traverse(ecd, root_entity, callback, thisArg, path = []) {
206
+
207
+ callback.call(thisArg, root_entity, ecd);
208
+
209
+ const children = [];
210
+ const child_count = ParentEntitySystem.findChildrenOf(children, 0, ecd, root_entity);
211
+
212
+ for (let i = 0; i < child_count; i++) {
213
+ const entity = children[i];
214
+
215
+ if (path.includes(entity)) {
216
+ console.warn(`Loop in entity hierarchy detected: ${path.join('->')}`);
217
+ continue;
218
+ }
219
+
220
+ traverse(ecd, entity, callback, thisArg, path.concat(entity));
221
+ }
165
222
  }
@@ -0,0 +1,6 @@
1
+ export class OffsetScaleTransform2D {
2
+ scale_x: number
3
+ scale_y: number
4
+ offset_x: number
5
+ offset_y: number
6
+ }
@@ -173,16 +173,16 @@ class Terrain {
173
173
  *
174
174
  * @type {WorkerProxy}
175
175
  */
176
- this.buildWorker = makeTerrainWorkerProxy();
176
+ this.__buildWorker = makeTerrainWorkerProxy();
177
177
 
178
- this.tiles = new TerrainTileManager({
178
+ this.__tiles = new TerrainTileManager({
179
179
  material: this.material,
180
- buildWorker: this.buildWorker
180
+ buildWorker: this.__buildWorker
181
181
  });
182
182
 
183
- this.tiles.tileSize.set(TILE_SIZE, TILE_SIZE);
183
+ this.__tiles.tileSize.set(TILE_SIZE, TILE_SIZE);
184
184
 
185
- this.tiles.material.set(this.material);
185
+ this.__tiles.material.set(this.material);
186
186
 
187
187
  /**
188
188
  *
@@ -285,7 +285,7 @@ class Terrain {
285
285
  const material = material_handle.getValue();
286
286
  this.clouds.addMaterial(material);
287
287
 
288
- this.tiles.material.set(material);
288
+ this.__tiles.material.set(material);
289
289
 
290
290
  this.updateMaterial();
291
291
 
@@ -314,7 +314,7 @@ class Terrain {
314
314
  // release material handle
315
315
  this.__material_reference.release();
316
316
 
317
- this.tiles.dispose();
317
+ this.__tiles.dispose();
318
318
  this.splat.dispose();
319
319
  this.layers.dispose();
320
320
 
@@ -428,11 +428,11 @@ class Terrain {
428
428
  * @returns {boolean}
429
429
  */
430
430
  raycastFirstSync(result, originX, originY, originZ, directionX, directionY, directionZ) {
431
- if (this.tiles === undefined) {
431
+ if (this.__tiles === undefined) {
432
432
  return false;
433
433
  }
434
434
 
435
- return this.tiles.raycastFirstSync(result, originX, originY, originZ, directionX, directionY, directionZ);
435
+ return this.__tiles.raycastFirstSync(result, originX, originY, originZ, directionX, directionY, directionZ);
436
436
  }
437
437
 
438
438
  /**
@@ -443,7 +443,7 @@ class Terrain {
443
443
  * @param {function} missCallback
444
444
  */
445
445
  raycast(origin, direction, callback, missCallback) {
446
- this.tiles.raycast(origin, direction, callback, missCallback);
446
+ this.__tiles.raycast(origin, direction, callback, missCallback);
447
447
  }
448
448
 
449
449
  /**
@@ -459,7 +459,7 @@ class Terrain {
459
459
  assert.typeOf(missCallback, 'function', 'missCallback');
460
460
  assert.typeOf(errorCallback, 'function', 'errorCallback');
461
461
 
462
- this.tiles.raycastVertical(x, y, callback, missCallback);
462
+ this.__tiles.raycastVertical(x, y, callback, missCallback);
463
463
  }
464
464
 
465
465
  /**
@@ -470,12 +470,12 @@ class Terrain {
470
470
  * @return {boolean}
471
471
  */
472
472
  raycastVerticalFirstSync(contact, x, y) {
473
- if (this.tiles === undefined) {
473
+ if (this.__tiles === undefined) {
474
474
  //tiles don't exist
475
475
  return false;
476
476
  }
477
477
 
478
- return this.tiles.raycastVerticalFirstSync(contact, x, y);
478
+ return this.__tiles.raycastVerticalFirstSync(contact, x, y);
479
479
  }
480
480
 
481
481
  /**
@@ -643,7 +643,7 @@ class Terrain {
643
643
  *
644
644
  * @type {TerrainTileManager}
645
645
  */
646
- const tiles = this.tiles;
646
+ const tiles = this.__tiles;
647
647
 
648
648
  const promisedTiles = [];
649
649
 
@@ -660,25 +660,6 @@ class Terrain {
660
660
  return Promise.all(promisedTiles);
661
661
  }
662
662
 
663
- /**
664
- * @deprecated use {@link #samplerHeight} instead
665
- * @param {Sampler2D} v
666
- */
667
- set heightMap(v) {
668
- this.samplerHeight = v;
669
- this.updateHeightTexture();
670
-
671
- console.warn('Deprecated');
672
- }
673
-
674
- /**
675
- * @deprecated use {@link #samplerHeight} instead
676
- * @return {Sampler2D}
677
- */
678
- get heightMap() {
679
- return this.samplerHeight;
680
- }
681
-
682
663
  updateMaterial() {
683
664
  let m = this.material;
684
665
 
@@ -724,6 +705,8 @@ class Terrain {
724
705
 
725
706
  image.width = sampler.width;
726
707
  image.height = sampler.height;
708
+
709
+ texture.needsUpdate = true;
727
710
  }
728
711
 
729
712
  /**
@@ -753,24 +736,24 @@ class Terrain {
753
736
  }
754
737
 
755
738
  startBuildService() {
756
- this.buildWorker.start();
739
+ this.__buildWorker.start();
757
740
  this.updateWorkerHeights();
758
741
  }
759
742
 
760
743
  async updateWorkerHeights() {
761
744
  const s = this.samplerHeight;
762
- const worker = this.buildWorker;
745
+ const worker = this.__buildWorker;
763
746
 
764
747
  await worker.setHeightSampler(s.data, s.itemSize, s.width, s.height);
765
748
 
766
749
  return await worker.computeHeightRange()
767
750
  .then(({ min, max }) => {
768
- this.tiles.setHeightRange(min, max);
751
+ this.__tiles.setHeightRange(min, max);
769
752
  });
770
753
  }
771
754
 
772
755
  stopBuildService() {
773
- this.buildWorker.stop();
756
+ this.__buildWorker.stop();
774
757
  }
775
758
 
776
759
  buildGridTransform() {
@@ -816,9 +799,9 @@ class Terrain {
816
799
 
817
800
  this.overlay.tileImage.set(MeepSettings.ecs.Terrain['tile-decal']);
818
801
 
819
- this.tiles.totalSize.copy(this.size);
820
- this.tiles.scale.set(this.gridScale, this.gridScale);
821
- this.tiles.resolution.set(this.resolution);
802
+ this.__tiles.totalSize.copy(this.size);
803
+ this.__tiles.scale.set(this.gridScale, this.gridScale);
804
+ this.__tiles.resolution.set(this.resolution);
822
805
 
823
806
  if (this.__legacyMaterialSpec !== null) {
824
807
  this.buildFromLegacy(assetManager);
@@ -855,9 +838,9 @@ class Terrain {
855
838
  * @type {Promise<TerrainTileManager>}
856
839
  * @deprecated
857
840
  */
858
- this.pTiles = Promise.resolve(this.tiles);
841
+ this.pTiles = Promise.resolve(this.__tiles);
859
842
 
860
- this.tiles.initialize();
843
+ this.__tiles.initialize();
861
844
 
862
845
  this.updateMaterial();
863
846
 
@@ -866,6 +849,24 @@ class Terrain {
866
849
  this.setFlag(TerrainFlags.Built);
867
850
  }
868
851
 
852
+ /**
853
+ *
854
+ * @returns {Texture|null}
855
+ */
856
+ get aoMap() {
857
+ const ref = this.__material_reference;
858
+ if (ref === null) {
859
+ return null;
860
+ }
861
+ const mat = ref.getValue();
862
+
863
+ if (mat === null) {
864
+ return null;
865
+ }
866
+
867
+ return mat.uniforms.aoMap.value;
868
+ }
869
+
869
870
  /**
870
871
  *
871
872
  * @param {number} quality resolution in texels per grid cell (4 = 4x4 light map texels per single grid cell)
@@ -896,7 +897,7 @@ class Terrain {
896
897
  texture,
897
898
  heightSampler: this.samplerHeight,
898
899
  worldSize: new Vector2(size_x * this.gridScale, size_y * this.gridScale),
899
- resolution: new Vector2(size_x * quality, size_y *quality)
900
+ resolution: new Vector2(size_x * quality, size_y * quality)
900
901
  });
901
902
 
902
903
 
@@ -131,7 +131,7 @@ class TerrainSystem extends System {
131
131
 
132
132
  component.link(this.graphics);
133
133
 
134
- const bvh = component.tiles.bvh;
134
+ const bvh = component.__tiles.bvh;
135
135
 
136
136
 
137
137
  //record entity for editor
@@ -193,7 +193,7 @@ class TerrainSystem extends System {
193
193
  assert.notEqual(terrain, null, 'terrain is null');
194
194
  assert.notEqual(terrain, undefined, 'terrain is undefined');
195
195
 
196
- const tileManager = terrain.tiles;
196
+ const tileManager = terrain.__tiles;
197
197
  if (tileManager !== undefined) {
198
198
  CameraSystem.getActiveFrustums(ecd, function (frustums) {
199
199
  tileManager.bvh.threeTraverseFrustumsIntersections(frustums, function (leafNode) {
@@ -31,7 +31,7 @@ export class TerrainLayer {
31
31
  *
32
32
  * @type {String}
33
33
  */
34
- this.textureDiffuseURL = null;
34
+ this.textureDiffuseURL = "";
35
35
 
36
36
  /**
37
37
  *
@@ -299,20 +299,26 @@ export class SplatMapping {
299
299
  */
300
300
  sampleWeight(u, v, materialIndex) {
301
301
 
302
+ return this.getLayerWeightSampler(materialIndex).sampleChannelBilinearUV(u, v, 0);
303
+ }
304
+
305
+ /**
306
+ *
307
+ * @param {number} index
308
+ * @returns {Sampler2D}
309
+ */
310
+ getLayerWeightSampler(index) {
311
+
302
312
  const width = this.size.x;
303
313
  const height = this.size.y;
304
314
 
305
315
  const layerSize = width * height;
306
316
 
307
- const startAddress = layerSize * materialIndex;
317
+ const startAddress = layerSize * index;
308
318
  const endAddress = startAddress + layerSize;
309
319
 
310
320
  //build a sampler for the layer
311
- const sampler = new Sampler2D(this.weightData.subarray(startAddress, endAddress), 1, width, height);
312
-
313
- const result = sampler.sampleChannelBilinear(u * width, v * height, 0);
314
-
315
- return result;
321
+ return new Sampler2D(this.weightData.subarray(startAddress, endAddress), 1, width, height);
316
322
  }
317
323
 
318
324
  /**
@@ -429,7 +435,12 @@ export class SplatMapping {
429
435
  const startAddress = index * layerByteSize;
430
436
  const endAddress = (index + 1) * layerByteSize;
431
437
 
432
- const image = this.weightTexture.image;
438
+ const weightTexture = this.weightTexture;
439
+
440
+ // release memory
441
+ weightTexture.dispose();
442
+
443
+ const image = weightTexture.image;
433
444
 
434
445
  const oldData = image.data;
435
446
 
@@ -444,7 +455,7 @@ export class SplatMapping {
444
455
 
445
456
  image.depth = this.depth;
446
457
 
447
- this.weightTexture.needsUpdate = true;
458
+ weightTexture.needsUpdate = true;
448
459
 
449
460
  return true;
450
461
  }
@@ -471,6 +482,8 @@ export class SplatMapping {
471
482
  }
472
483
 
473
484
  addWeightLayer() {
485
+ // release currently held GPU memory
486
+ this.weightTexture.dispose();
474
487
 
475
488
  const layerByteSize = this.size.x * this.size.y;
476
489
 
@@ -500,29 +513,14 @@ export class SplatMapping {
500
513
 
501
514
  this.depth = depth;
502
515
 
503
- if (width !== oldWidth || height !== oldHeight) {
504
-
516
+ if (width !== oldWidth || height !== oldHeight || depth !== oldDepth) {
505
517
  this.size.set(width, height);
506
-
507
- const materialImage = this.materialTexture.image;
508
-
509
- const oldMaterialData = materialImage.data;
510
-
511
- materialImage.width = width;
512
- materialImage.height = height;
513
- materialImage.data = new Uint8Array(width * height * 4);
514
-
515
- const source = new Sampler2D(oldMaterialData, 4, oldWidth, oldHeight);
516
- const target = new Sampler2D(materialImage.data, 4, width, height);
517
-
518
- scaleSampler2D(source, target);
519
-
520
- this.weightTexture.needsUpdate = true;
521
518
  }
522
519
 
523
- if (width !== oldWidth || height !== oldHeight || depth !== oldDepth) {
520
+ const weightImage = this.weightTexture.image;
524
521
 
525
- const weightImage = this.weightTexture.image;
522
+ if (weightImage.width !== width || weightImage.height !== height || weightImage.depth !== depth) {
523
+ // this extra check is in case dimensions were modified from outside
526
524
 
527
525
  const oldWeightData = weightImage.data;
528
526
 
@@ -543,7 +541,7 @@ export class SplatMapping {
543
541
  }
544
542
 
545
543
  this.weightTexture.needsUpdate = true;
546
- }
547
544
 
545
+ }
548
546
  }
549
547
  }