@woosh/meep-engine 2.33.20 → 2.33.24

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 (285) hide show
  1. package/core/assert.js +3 -1
  2. package/core/bvh2/BinaryNode.js +1 -1
  3. package/core/bvh2/aabb3/AABB3.js +18 -0
  4. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  5. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  6. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  7. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  8. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +11 -8
  9. package/core/collection/ArrayUtils.js +1 -1
  10. package/core/collection/HashMap.js +66 -22
  11. package/core/collection/array/arrayQuickSort.js +9 -6
  12. package/core/collection/array/array_swap.js +22 -0
  13. package/core/collection/array/computeHashArray.js +22 -0
  14. package/core/collection/array/computeHashIntegerArray.js +15 -0
  15. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  16. package/core/color/Color.js +2 -1
  17. package/core/function/FunctionCompiler.js +2 -1
  18. package/core/geom/3d/CircleMath.js +4 -4
  19. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  20. package/core/geom/3d/cone/computeConeBoundingBox.js +4 -4
  21. package/core/geom/3d/{compute_bounding_cone_of_2_cones.js → cone/compute_bounding_cone_of_2_cones.js} +3 -3
  22. package/core/geom/3d/{compute_bounding_cone_of_2_cones.spec.js → cone/compute_bounding_cone_of_2_cones.spec.js} +1 -1
  23. package/core/geom/3d/frustum/array_setFromProjectionMatrix.js +1 -1
  24. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +11 -3
  25. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  26. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  27. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  28. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  29. package/core/geom/3d/{encode_unit3_hemioct.js → normal/hemioct/encode_unit3_hemioct.js} +0 -0
  30. package/core/geom/3d/{unit_hemioct.spec.js → normal/hemioct/unit_hemioct.spec.js} +1 -1
  31. package/core/geom/3d/normal/lamber_azimuth/transform.js +61 -0
  32. package/core/geom/3d/normal/spherical/sphere_map_transform.js +77 -0
  33. package/core/geom/3d/{lerp_planes_to_array.js → plane/lerp_planes_to_array.js} +1 -3
  34. package/core/geom/3d/plane/plane3_lerp.js +3 -1
  35. package/core/geom/3d/plane/plane3_slerp.js +4 -1
  36. package/core/geom/3d/{plane_computeConvex3PlaneIntersection.js → plane/plane_computeConvex3PlaneIntersection.js} +14 -16
  37. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  38. package/core/geom/3d/shape/AbstractShape3D.js +29 -0
  39. package/core/geom/3d/shape/CompositeShape.js +60 -0
  40. package/core/geom/3d/shape/TransformedShape3D.js +70 -0
  41. package/core/geom/3d/shape/UnitCubeShape3D.js +13 -0
  42. package/core/geom/3d/shape/UnitSphereShape3D.js +16 -0
  43. package/core/geom/3d/topology/TopoTriangle.js +1 -1
  44. package/core/geom/3d/topology/TopoVertex.js +1 -1
  45. package/core/geom/3d/topology/bounds/computeTraingleClusterNormalBoundingCone.js +2 -2
  46. package/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
  47. package/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
  48. package/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
  49. package/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
  50. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  51. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  52. package/core/geom/AABB2.js +1 -1
  53. package/core/geom/ConicRay.js +3 -1
  54. package/core/geom/LineSegment.js +1 -77
  55. package/core/geom/Matrix4.js +8 -8
  56. package/core/geom/Plane.js +15 -10
  57. package/core/geom/Quaternion.js +2 -1
  58. package/core/geom/Rectangle.js +2 -1
  59. package/core/geom/Vector1.js +1 -1
  60. package/core/geom/Vector3.d.ts +2 -0
  61. package/core/geom/Vector3.js +35 -159
  62. package/core/geom/Vector3.spec.js +2 -1
  63. package/core/geom/Vector4.js +2 -1
  64. package/core/geom/random/randomPointInBox.js +7 -3
  65. package/core/geom/random/randomPointInPoint.js +6 -3
  66. package/core/geom/random/randomPointInSphere.js +6 -3
  67. package/core/geom/random/randomPointOnBox.js +7 -3
  68. package/core/geom/random/randomPointOnSphere.js +6 -3
  69. package/core/geom/v3_angle_between.js +31 -0
  70. package/core/geom/v3_distance.js +16 -0
  71. package/core/geom/v3_distance_sqr.js +17 -0
  72. package/core/geom/v3_dot.js +13 -0
  73. package/core/geom/v3_length.js +10 -0
  74. package/core/geom/v3_length_sqr.js +10 -0
  75. package/core/geom/v3_lerp.js +21 -0
  76. package/core/geom/v3_slerp.js +48 -0
  77. package/core/graph/graph_k_means_cluster.js +1 -1
  78. package/core/math/MathUtils.js +0 -354
  79. package/core/math/MathUtils.spec.js +7 -1
  80. package/core/math/gaussian.js +9 -0
  81. package/core/math/hash/computeHashFloat.js +17 -0
  82. package/core/math/hash/computeHashFloatArray.js +34 -0
  83. package/core/math/hash/computeObjectHash.js +54 -0
  84. package/core/math/intersects1D.js +19 -0
  85. package/core/math/interval/NumericInterval.js +2 -2
  86. package/core/math/isValueBetween.js +10 -0
  87. package/core/math/isValueBetweenInclusive.js +10 -0
  88. package/core/math/noise/curl_noise_3dt.js +1 -1
  89. package/core/math/noise/sdnoise.js +10 -10
  90. package/core/math/overlap1D.js +19 -0
  91. package/core/math/pingpong.js +17 -0
  92. package/core/math/random/makeRangedRandom.js +19 -0
  93. package/core/math/random/randomFloatBetween.js +14 -0
  94. package/core/math/random/randomFromArray.js +19 -0
  95. package/core/math/random/randomGaussian.js +15 -0
  96. package/core/math/random/randomIntegerBetween.js +14 -0
  97. package/core/math/random/roundFair.js +15 -0
  98. package/core/math/separation1D.js +21 -0
  99. package/core/math/solveQuadratic.js +25 -0
  100. package/core/model/BoundedValue.js +1 -1
  101. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  102. package/core/model/node-graph/node/Port.js +1 -1
  103. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  104. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  105. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  106. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  107. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  108. package/core/model/stat/LinearModifier.js +1 -1
  109. package/core/primitives/array/computeIntegerArrayHash.js +6 -1
  110. package/engine/animation/curve/AnimationCurve.js +72 -0
  111. package/engine/animation/curve/Keyframe.js +27 -0
  112. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  113. package/engine/asset/Asset.js +1 -1
  114. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  115. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  116. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  117. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  118. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  119. package/engine/asset/loaders/material/computeMaterialHash.js +4 -3
  120. package/engine/asset/loaders/material/computeTextureEquality.js +13 -5
  121. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  122. package/engine/ecs/animation/Animation.js +2 -1
  123. package/engine/ecs/animation/InverseKinematics.js +2 -1
  124. package/engine/ecs/animation/OneBoneSurfaceAlignmentSolver.js +3 -1
  125. package/engine/ecs/animation/TwoBoneInverseKinematicsSolver.js +3 -1
  126. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  127. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  128. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  129. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  130. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  131. package/engine/ecs/fow/FogOfWar.js +2 -3
  132. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  133. package/engine/ecs/gui/GUIElement.js +1 -1
  134. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  135. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +1 -1
  136. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  137. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  138. package/engine/ecs/systems/SteeringSystem.js +3 -2
  139. package/engine/ecs/terrain/ecs/Terrain.js +6 -0
  140. package/engine/ecs/terrain/ecs/layers/TerrainLayers.js +5 -0
  141. package/engine/ecs/terrain/ecs/splat/SplatMapping.js +5 -0
  142. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  143. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  144. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  145. package/engine/graphics/GraphicsEngine.js +1 -0
  146. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  147. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  148. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  149. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  150. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  151. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  152. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  153. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  154. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  155. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +2 -2
  156. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  157. package/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +0 -53
  158. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  159. package/engine/graphics/ecs/light/Light.js +3 -0
  160. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  161. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  162. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  163. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  164. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  165. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  166. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  167. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  168. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  169. package/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +2 -1
  170. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  171. package/engine/graphics/micron/build/clustering/computeFaceCurvatureScore.js +1 -1
  172. package/engine/graphics/micron/build/clustering/compute_face_connection_weight.js +1 -1
  173. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  174. package/engine/graphics/micron/build/hierarchy/computePatchMergeScore.js +1 -1
  175. package/engine/graphics/micron/build/hierarchy/patch_combine.js +1 -1
  176. package/engine/graphics/micron/buildPatchwork.js +1 -1
  177. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  178. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  179. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  180. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  181. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  182. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  183. package/engine/graphics/micron/render/refinement/is_patch_facing_back.js +2 -2
  184. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  185. package/engine/graphics/particles/particular/engine/ParticularEngine.js +4 -2
  186. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  187. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +92 -144
  188. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  189. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +51 -12
  190. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +3 -2
  191. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  192. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  193. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  194. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  195. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  196. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  197. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +21 -0
  198. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -20
  199. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  200. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +7 -25
  201. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  202. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  203. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  204. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  205. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  206. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  207. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  208. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +384 -0
  209. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +558 -0
  210. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  211. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  212. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  213. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  214. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  215. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  216. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  217. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  218. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  219. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  220. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  221. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  222. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +1 -1
  223. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  224. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  225. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  226. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  227. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  228. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  229. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  230. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +15 -33
  231. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  232. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +12 -2
  233. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +6 -6
  234. package/engine/graphics/render/forward_plus/prototypeLightManager.js +231 -136
  235. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  236. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  237. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  238. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  239. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  240. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  241. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  242. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  243. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  244. package/engine/graphics/render/layers/RenderLayerUtils.js +8 -5
  245. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  246. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  247. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  248. package/engine/graphics/texture/atlas/TextureAtlas.js +18 -14
  249. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  250. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  251. package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
  252. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  253. package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
  254. package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
  255. package/engine/graphics/trail/x/RibbonX.js +17 -2
  256. package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
  257. package/engine/graphics/util/projectSphere.js +1 -1
  258. package/engine/grid/components/GridObstacle.js +3 -10
  259. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  260. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  261. package/engine/navigation/ecs/components/Path.js +3 -2
  262. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  263. package/engine/reference/v2/Reference.js +6 -0
  264. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  265. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  266. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  267. package/engine/ui/notification/notificationGenerator.js +1 -1
  268. package/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +3 -2
  269. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  270. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  271. package/generation/markers/GridCellActionPlaceMarker.js +13 -1
  272. package/generation/markers/MarkerNode.js +6 -0
  273. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  274. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  275. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  276. package/generation/theme/ThemeEngine.js +5 -2
  277. package/misc/makeMaterialIconCached.js +2 -2
  278. package/package.json +3 -3
  279. package/view/View.js +4 -2
  280. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  281. package/view/elements/radial/RadialText.js +2 -1
  282. package/view/minimap/gl/MinimapMarkersGL.js +19 -101
  283. package/view/minimap/gl/buildMaterial.js +94 -0
  284. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  285. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
@@ -19,18 +19,43 @@ function AnimationTrack(properties) {
19
19
  */
20
20
  this.propertyCount = properties.length;
21
21
 
22
+ /**
23
+ *
24
+ * @type {number[]}
25
+ */
22
26
  this.keyValues = [];
27
+
28
+ /**
29
+ *
30
+ * @type {number[]}
31
+ */
23
32
  this.keyTimes = [];
24
33
 
25
34
  this.timeStart = Number.POSITIVE_INFINITY;
26
35
  this.timeEnd = Number.NEGATIVE_INFINITY;
27
36
 
37
+ /**
38
+ * Indices of keys from which transition takes place
39
+ * @type {number[]}
40
+ */
28
41
  this.transitionKeys = [];
42
+
43
+ /**
44
+ * Transition function associated with a key
45
+ * @type {function[]}
46
+ */
29
47
  this.transitionFunctions = [];
30
48
  }
31
49
 
32
- AnimationTrack.prototype.initialize = function () {
33
- const keysTyped = new Float64Array(this.keyValues.length);
50
+ AnimationTrack.prototype.optimize = function () {
51
+ const key_value_count = this.keyValues.length;
52
+ const key_count = this.keyTimes.length;
53
+
54
+ // use a common buffer to get better cache locality
55
+ const buffer = new ArrayBuffer(key_count * 4 + key_value_count * 8);
56
+
57
+ const keyTimesTyped = new Float32Array(buffer, 0, key_count);
58
+ const keysTyped = new Float64Array(buffer, key_count * 4, key_value_count);
34
59
 
35
60
  //transfer original keys into typed array
36
61
  keysTyped.set(this.keyValues, 0);
@@ -38,7 +63,6 @@ AnimationTrack.prototype.initialize = function () {
38
63
  //overwrite the original array
39
64
  this.keyValues = keysTyped;
40
65
 
41
- const keyTimesTyped = new Float32Array(this.keyTimes.length);
42
66
  keyTimesTyped.set(this.keyTimes, 0);
43
67
 
44
68
  this.keyTimes = keyTimesTyped;
@@ -4,9 +4,9 @@
4
4
  * @param {string} type
5
5
  * @constructor
6
6
  */
7
- import { computeHashIntegerArray } from "../../core/math/MathUtils.js";
8
7
  import { assert } from "../../core/assert.js";
9
8
  import { computeStringHash } from "../../core/primitives/strings/computeStringHash.js";
9
+ import { computeHashIntegerArray } from "../../core/collection/array/computeHashIntegerArray.js";
10
10
 
11
11
  export class AssetDescription {
12
12
  /**
@@ -2,5 +2,5 @@ import {AssetLoader} from "./AssetLoader";
2
2
  import {Object3D} from "three";
3
3
 
4
4
  export class GLTFAssetLoader extends AssetLoader<Object3D> {
5
-
5
+ setDracoDecoderPath(path: string): void
6
6
  }
@@ -127,6 +127,8 @@ export class GLTFAssetLoader extends AssetLoader {
127
127
 
128
128
  this.__dracoLoader = new DRACOLoader();
129
129
  this.__dracoLoader.setWorkerLimit(1);
130
+
131
+ // set default path
130
132
  this.__dracoLoader.setDecoderPath(buildDracoDecoderPath());
131
133
 
132
134
  const loader = new GLTFLoader();
@@ -156,6 +158,14 @@ export class GLTFAssetLoader extends AssetLoader {
156
158
  });
157
159
  }
158
160
 
161
+ /**
162
+ *
163
+ * @param {string} p
164
+ */
165
+ setDracoDecoderPath(p) {
166
+ this.__dracoLoader.setDecoderPath(p);
167
+ }
168
+
159
169
  /**
160
170
  *
161
171
  * @param {boolean} v
@@ -28,6 +28,12 @@ export class ImageRGBADataAsset extends Asset {
28
28
  */
29
29
  this.height = height;
30
30
 
31
+ /**
32
+ * Number of channels
33
+ * @type {number}
34
+ */
35
+ this.itemSize = 4;
36
+
31
37
  this.byteSize = data.length;
32
38
  }
33
39
 
@@ -35,7 +41,8 @@ export class ImageRGBADataAsset extends Asset {
35
41
  return {
36
42
  data: this.data,
37
43
  width: this.width,
38
- height: this.height
44
+ height: this.height,
45
+ itemSize: this.itemSize
39
46
  };
40
47
  }
41
48
  }
@@ -79,6 +79,17 @@ function obtainCanvasCtx(width, height) {
79
79
  return gl;
80
80
  }
81
81
 
82
+ /**
83
+ *
84
+ * @param {ImageBitmap} bitmap
85
+ * @return {Sampler2D}
86
+ */
87
+ export function sampler_from_bitmap(bitmap) {
88
+ const ctx = obtainCanvasCtx(bitmap.width, bitmap.height);
89
+
90
+ return obtainSampler(bitmap, ctx);
91
+ }
92
+
82
93
  /**
83
94
  *
84
95
  * @param {ImageBitmap} a
@@ -1,47 +1,41 @@
1
1
  import { min2 } from "../../../../core/math/min2.js";
2
- import { computeIntegerArrayHash } from "../../../../core/primitives/array/computeIntegerArrayHash.js";
2
+ import { sampler_from_bitmap } from "./computeImageBitmapEquality.js";
3
3
 
4
- let canvas = null;
5
- let canvasContext = null;
6
4
 
7
5
  /**
8
6
  *
9
- * @returns {CanvasRenderingContext2D}
7
+ * @param {ImageBitmap} bitmap
8
+ * @returns {number}
10
9
  */
11
- function getCanvasContext() {
10
+ export function computeImageBitmapHash(bitmap) {
12
11
 
13
- if (canvasContext === null) {
14
- canvas = document.createElement('canvas');
12
+ const w = min2(bitmap.width, 8);
13
+ const h = min2(bitmap.height, 8);
15
14
 
16
- canvas.height = 8;
17
- canvas.width = 8;
15
+ const sampler = sampler_from_bitmap(bitmap);
18
16
 
19
- canvasContext = canvas.getContext('2d');
17
+ const sampler_data = sampler.data;
18
+ const item_size = sampler.itemSize;
20
19
 
21
- }
20
+ let hash = 0;
22
21
 
23
- return canvasContext;
22
+ for (let y = 0; y < h; y++) {
24
23
 
25
- }
24
+ const row_size = y * sampler.width;
26
25
 
27
- /**
28
- *
29
- * @param {ImageBitmap} bitmap
30
- * @returns {number}
31
- */
32
- export function computeImageBitmapHash(bitmap) {
33
- const ctx = getCanvasContext();
26
+ for (let x = 0; x < w; x++) {
34
27
 
35
- const w = min2(bitmap.width, 8);
36
- const h = min2(bitmap.height, 8);
28
+ const texel_index = x + row_size;
29
+ const address = texel_index * item_size;
37
30
 
38
- ctx.clearRect(0, 0, w, h);
31
+ for (let i = 0; i < item_size; i++) {
39
32
 
40
- ctx.drawImage(bitmap, 0, 0, w, h, 0, 0, w, h);
33
+ const v = sampler_data[address];
41
34
 
42
- const imageData = ctx.getImageData(0, 0, w, h);
43
-
44
- const data = imageData.data;
35
+ hash = (hash << 5) - hash + v;
36
+ }
37
+ }
38
+ }
45
39
 
46
- return computeIntegerArrayHash(data, 0, data.length);
40
+ return hash;
47
41
  }
@@ -1,7 +1,9 @@
1
- import { computeHashArray, computeHashFloat, computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
2
1
  import { planeHash } from "./planeHash.js";
3
2
  import { computeTextureHash } from "./computeTextureHash.js";
4
3
  import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
4
+ import { computeHashArray } from "../../../../core/collection/array/computeHashArray.js";
5
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
6
+ import { computeHashFloat } from "../../../../core/math/hash/computeHashFloat.js";
5
7
 
6
8
  /**
7
9
  *
@@ -59,8 +61,7 @@ export function computeMaterialHash(material) {
59
61
  computeTextureHash(material.alphaMap),
60
62
  computeHashFloat(material.envMapIntensity),
61
63
  computeTextureHash(material.envMap)
62
- )
63
- ;
64
+ );
64
65
  } else if (material.isShaderMaterial) {
65
66
  hash ^= material.lights ? 0 : 1;
66
67
  }
@@ -51,6 +51,7 @@ export function computeTextureEquality(a, b) {
51
51
  const bMipmaps = b.mipmaps;
52
52
 
53
53
  const n = aMipmaps.length;
54
+
54
55
  if (n !== bMipmaps.length) {
55
56
  return false;
56
57
  }
@@ -72,8 +73,8 @@ export function computeTextureEquality(a, b) {
72
73
 
73
74
  /**
74
75
  *
75
- * @param {Image|[]} a
76
- * @param {Image|[]} b
76
+ * @param {Image|[]|{width:number, height:number}} a
77
+ * @param {Image|[]|{width:number, height:number}} b
77
78
  * @returns {boolean}
78
79
  */
79
80
  export function textureImagesEqual(a, b) {
@@ -89,6 +90,14 @@ export function textureImagesEqual(a, b) {
89
90
  }
90
91
  }
91
92
 
93
+ if (
94
+ (typeof a.width === "number" && a.width !== b.width)
95
+ || (typeof a.height === "number" && a.height !== b.height)
96
+ ) {
97
+ // dimensions are present, but are inconsistent
98
+ return false;
99
+ }
100
+
92
101
  if (a instanceof ImageBitmap && b instanceof ImageBitmap) {
93
102
  return computeImageBitmapEquality(a, b);
94
103
  }
@@ -148,11 +157,10 @@ export function textureImagesEqual(a, b) {
148
157
  }
149
158
  }
150
159
 
151
- //array images are equivalent
152
- return true;
153
160
  }
154
161
 
155
- return false;
162
+ // assume equivalent
163
+ return true;
156
164
  }
157
165
 
158
166
 
@@ -1,6 +1,7 @@
1
- import { computeHashFloat, computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
2
1
  import { max2 } from "../../../../core/math/max2.js";
3
2
  import { computeImageBitmapHash } from "./computeImageBitmapHash.js";
3
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
4
+ import { computeHashFloat } from "../../../../core/math/hash/computeHashFloat.js";
4
5
 
5
6
  /**
6
7
  *
@@ -8,7 +8,8 @@ import ObservedString from "../../../core/model/ObservedString.js";
8
8
  import ObservedInteger from "../../../core/model/ObservedInteger.js";
9
9
  import Vector1 from "../../../core/geom/Vector1.js";
10
10
  import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSerializationAdapter.js";
11
- import { computeHashFloat, computeHashIntegerArray } from "../../../core/math/MathUtils.js";
11
+ import { computeHashIntegerArray } from "../../../core/collection/array/computeHashIntegerArray.js";
12
+ import { computeHashFloat } from "../../../core/math/hash/computeHashFloat.js";
12
13
 
13
14
  /**
14
15
  *
@@ -1,7 +1,8 @@
1
1
  import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSerializationAdapter.js";
2
2
  import { NumericInterval } from "../../../core/math/interval/NumericInterval.js";
3
- import { computeHashFloat, computeHashIntegerArray } from "../../../core/math/MathUtils.js";
4
3
  import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
4
+ import { computeHashIntegerArray } from "../../../core/collection/array/computeHashIntegerArray.js";
5
+ import { computeHashFloat } from "../../../core/math/hash/computeHashFloat.js";
5
6
 
6
7
  class IKConstraint {
7
8
  constructor() {
@@ -3,9 +3,11 @@ import { inverseLerp } from "../../../core/math/inverseLerp.js";
3
3
  import { IKSolver } from "./IKSolver.js";
4
4
  import { findSkeletonBoneByType } from "../../graphics/ecs/mesh/SkeletonUtils.js";
5
5
  import Quaternion from "../../../core/geom/Quaternion.js";
6
- import Vector3, { v3_dot, v3_length } from "../../../core/geom/Vector3.js";
6
+ import Vector3 from "../../../core/geom/Vector3.js";
7
7
  import { SurfacePoint3 } from "../../../core/geom/3d/SurfacePoint3.js";
8
8
  import { v3_computeOffsetVector } from "./IKMath.js";
9
+ import { v3_dot } from "../../../core/geom/v3_dot.js";
10
+ import { v3_length } from "../../../core/geom/v3_length.js";
9
11
 
10
12
  const boneWorldPosition = new Vector3();
11
13
  const boneWorldRotation = new Quaternion();
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../core/assert.js";
2
- import Vector3, { v3_dot, v3_length } from "../../../core/geom/Vector3.js";
2
+ import Vector3 from "../../../core/geom/Vector3.js";
3
3
  import { clamp } from "../../../core/math/clamp.js";
4
4
  import { inverseLerp } from "../../../core/math/inverseLerp.js";
5
5
  import Quaternion from "../../../core/geom/Quaternion.js";
@@ -7,6 +7,8 @@ import { findSkeletonBoneByType } from "../../graphics/ecs/mesh/SkeletonUtils.js
7
7
  import { SurfacePoint3 } from "../../../core/geom/3d/SurfacePoint3.js";
8
8
  import { IKSolver } from "./IKSolver.js";
9
9
  import { v3_computeOffsetVector } from "./IKMath.js";
10
+ import { v3_dot } from "../../../core/geom/v3_dot.js";
11
+ import { v3_length } from "../../../core/geom/v3_length.js";
10
12
 
11
13
  const boneWorldPositionC = new Vector3();
12
14
  const boneWorldPositionB = new Vector3();
@@ -14,11 +14,12 @@ import { SerializationMetadata } from "../components/SerializationMetadata.js";
14
14
  import Tag from "../components/Tag.js";
15
15
  import { OverrideContextBehavior } from "../../../../model/game/util/behavior/OverrideContextBehavior.js";
16
16
  import { HashMap } from "../../../core/collection/HashMap.js";
17
- import { randomFloatBetween, randomFromArray } from "../../../core/math/MathUtils.js";
18
17
  import { assert } from "../../../core/assert.js";
19
18
  import { RuleExecution } from "./RuleExecution.js";
20
19
  import { computeContextualDynamicRuleDebugString } from "./rules/computeContextualDynamicRuleDebugString.js";
21
20
  import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
21
+ import { randomFromArray } from "../../../core/math/random/randomFromArray.js";
22
+ import { randomFloatBetween } from "../../../core/math/random/randomFloatBetween.js";
22
23
 
23
24
  /**
24
25
  * In seconds
@@ -3,15 +3,13 @@ import { DynamicRuleDescriptionTable } from "./rules/DynamicRuleDescriptionTable
3
3
  import { createRandomReactiveExpression } from "../../../core/model/reactive/model/util/createRandomReactiveExpression.js";
4
4
  import { ReactiveReference } from "../../../core/model/reactive/model/terminal/ReactiveReference.js";
5
5
  import { ReactiveLiteralNumber } from "../../../core/model/reactive/model/terminal/ReactiveLiteralNumber.js";
6
- import {
7
- randomFloatBetween,
8
- randomFromArray,
9
- randomIntegerBetween
10
- } from "../../../core/math/MathUtils.js";
11
6
  import { ReactiveLiteralString } from "../../../core/model/reactive/model/terminal/ReactiveLiteralString.js";
12
7
  import { ReactiveLiteralBoolean } from "../../../core/model/reactive/model/terminal/ReactiveLiteralBoolean.js";
13
8
  import { DynamicRuleDescription } from "./rules/DynamicRuleDescription.js";
14
9
  import DataType from "../../../core/parser/simple/DataType.js";
10
+ import { randomFromArray } from "../../../core/math/random/randomFromArray.js";
11
+ import { randomFloatBetween } from "../../../core/math/random/randomFloatBetween.js";
12
+ import { randomIntegerBetween } from "../../../core/math/random/randomIntegerBetween.js";
15
13
 
16
14
  describe.skip('performance', () => {
17
15
 
@@ -1,7 +1,7 @@
1
1
  import { AbstractActionDescription } from "./AbstractActionDescription.js";
2
2
  import { WeightedRandomBehavior } from "../../../../intelligence/behavior/selector/WeightedRandomBehavior.js";
3
3
  import { WeightedElement } from "../../../../intelligence/behavior/selector/WeightedElement.js";
4
- import { computeHashFloat } from "../../../../../core/math/MathUtils.js";
4
+ import { computeHashFloat } from "../../../../../core/math/hash/computeHashFloat.js";
5
5
 
6
6
  export class WeightedRandomActionDescription extends AbstractActionDescription {
7
7
  constructor() {
@@ -1,6 +1,6 @@
1
1
  import { PointFitnessFunction } from "../PointFitnessFunction.js";
2
2
  import { assert } from "../../../../core/assert.js";
3
- import { gaussian } from "../../../../core/math/MathUtils.js";
3
+ import { gaussian } from "../../../../core/math/gaussian.js";
4
4
 
5
5
  export class PointFitnessGaussianBlur extends PointFitnessFunction {
6
6
  constructor() {
@@ -4,7 +4,7 @@ import ObservedBoolean from "../../../../core/model/ObservedBoolean.js";
4
4
  import { InstancedFoliage } from "../InstancedFoliage.js";
5
5
  import { Base64 } from "../../../../core/binary/Base64.js";
6
6
  import { BinaryBuffer } from "../../../../core/binary/BinaryBuffer.js";
7
- import { computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
7
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
8
8
 
9
9
  export class FoliageLayer {
10
10
  constructor() {
@@ -5,7 +5,6 @@ import { Sampler2D } from "../../graphics/texture/sampler/Sampler2D.js";
5
5
  import { ClampToEdgeWrapping, DataTexture, LinearFilter, RedFormat, UnsignedByteType } from "three";
6
6
  import Vector1 from "../../../core/geom/Vector1.js";
7
7
  import Vector2 from "../../../core/geom/Vector2.js";
8
- import Vector3 from "../../../core/geom/Vector3.js";
9
8
  import { assert } from "../../../core/assert.js";
10
9
  import { computeUnsignedDistanceField } from "../../graphics/texture/sampler/distanceField.js";
11
10
  import Vector4 from "../../../core/geom/Vector4.js";
@@ -357,7 +356,7 @@ export class FogOfWar {
357
356
  }
358
357
 
359
358
 
360
- this.on.textureChanged.dispatch();
359
+ this.on.textureChanged.send0();
361
360
 
362
361
  //clear flag
363
362
  this.textureNeedsUpdate = false;
@@ -534,7 +533,7 @@ export class FogOfWar {
534
533
  const sampleX = samplePosition[0];
535
534
  const sampleY = samplePosition[1];
536
535
 
537
- return this.distanceSampler.readChannel(sampleX|0, sampleY|0, 0);
536
+ return this.distanceSampler.readChannel(sampleX | 0, sampleY | 0, 0);
538
537
  }
539
538
 
540
539
  rebuildDistanceField() {
@@ -1,8 +1,8 @@
1
1
  import { buildScreenSpaceFogOfWarShader } from "./screenSpaceFogOfWarShader.js";
2
2
  import { assert } from "../../../../core/assert.js";
3
3
  import { Mesh, OrthographicCamera, Scene } from "three";
4
- import { isValueBetweenInclusive } from "../../../../core/math/MathUtils.js";
5
4
  import { FULL_SCREEN_TRIANGLE_GEOMETRY } from "../../../graphics/geometry/FULL_SCREEN_TRIANGLE_GEOMETRY.js";
5
+ import { isValueBetweenInclusive } from "../../../../core/math/isValueBetweenInclusive.js";
6
6
 
7
7
  /**
8
8
  *
@@ -6,9 +6,9 @@ import ObservedBoolean from "../../../core/model/ObservedBoolean.js";
6
6
  import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSerializationAdapter.js";
7
7
  import { COMPONENT_SERIALIZATION_TRANSIENT_FIELD } from "../storage/COMPONENT_SERIALIZATION_TRANSIENT_FIELD.js";
8
8
  import { assert } from "../../../core/assert.js";
9
- import { computeHashIntegerArray } from "../../../core/math/MathUtils.js";
10
9
  import { objectDeepEquals } from "../../../core/model/object/objectDeepEquals.js";
11
10
  import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
11
+ import { computeHashIntegerArray } from "../../../core/collection/array/computeHashIntegerArray.js";
12
12
 
13
13
  /**
14
14
  *
@@ -7,7 +7,7 @@
7
7
 
8
8
  import Vector3 from '../../../../core/geom/Vector3.js';
9
9
  import { HeadsUpDisplayFlag } from "./HeadsUpDisplayFlag.js";
10
- import { computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
10
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
11
11
 
12
12
  class HeadsUpDisplay {
13
13
  /**
@@ -85,7 +85,6 @@ class HeadsUpDisplaySystem extends System {
85
85
  * @private
86
86
  */
87
87
  __apply_entity_transformation(hud, transform, vp, element) {
88
- const position = transform.position;
89
88
  const worldOffset = hud.worldOffset;
90
89
 
91
90
  let worldOffsetX = worldOffset.x;
@@ -107,6 +106,7 @@ class HeadsUpDisplaySystem extends System {
107
106
  v4.applyQuaternion(transform.rotation);
108
107
  }
109
108
 
109
+ const position = transform.position;
110
110
 
111
111
  v4.add3(position);
112
112
 
@@ -5,7 +5,8 @@
5
5
  import Vector2 from "../../../../core/geom/Vector2.js";
6
6
  import ObservedBoolean from "../../../../core/model/ObservedBoolean.js";
7
7
  import { BinaryClassSerializationAdapter } from "../../storage/binary/BinaryClassSerializationAdapter.js";
8
- import { computeHashFloat, computeHashIntegerArray } from "../../../../core/math/MathUtils.js";
8
+ import { computeHashIntegerArray } from "../../../../core/collection/array/computeHashIntegerArray.js";
9
+ import { computeHashFloat } from "../../../../core/math/hash/computeHashFloat.js";
9
10
 
10
11
  /**
11
12
  * @readonly
@@ -8,7 +8,7 @@ import PhysicalBody from '../components/PhysicalBody.js';
8
8
  import Motion from '../components/Motion.js';
9
9
  import Renderable from '../components/Renderable.js';
10
10
  import { Matrix4 as ThreeMatrix4, Vector3 as ThreeVector3 } from 'three';
11
- import { solveQuadratic } from "../../../core/math/MathUtils.js";
11
+ import { solveQuadratic } from "../../../core/math/solveQuadratic.js";
12
12
 
13
13
  /**
14
14
  * Return the firing solution for a projectile starting at 'src' with
@@ -10,9 +10,10 @@ import PhysicalBody from '../components/PhysicalBody.js';
10
10
  import Motion from '../components/Motion.js';
11
11
  import { Transform } from '../transform/Transform.js';
12
12
  import Steering, { SteeringEvents, SteeringFlags } from '../components/Steering.js';
13
- import { solveQuadratic } from "../../../core/math/MathUtils.js";
14
- import Vector3, { v3_dot } from "../../../core/geom/Vector3.js";
13
+ import Vector3 from "../../../core/geom/Vector3.js";
15
14
  import { alignToVector } from "../terrain/ecs/ClingToTerrainSystem.js";
15
+ import { v3_dot } from "../../../core/geom/v3_dot.js";
16
+ import { solveQuadratic } from "../../../core/math/solveQuadratic.js";
16
17
 
17
18
  /**
18
19
  *
@@ -461,6 +461,10 @@ class Terrain {
461
461
  this.__material_reference.release();
462
462
 
463
463
  this.tiles.dispose();
464
+ this.splat.dispose();
465
+ this.layers.dispose();
466
+
467
+ this.heightTexture.dispose();
464
468
 
465
469
  this.clearFlag(TerrainFlags.Linked);
466
470
  }
@@ -1045,6 +1049,8 @@ class Terrain {
1045
1049
  return texture;
1046
1050
  });
1047
1051
 
1052
+ // TODO ensure cleanup when terrain is unlinked
1053
+
1048
1054
  return result;
1049
1055
  }
1050
1056
 
@@ -335,6 +335,11 @@ export class TerrainLayers {
335
335
  this.texture.needsUpdate = true;
336
336
  }
337
337
 
338
+ dispose() {
339
+ this.texture.dispose();
340
+ this.scalesTexture.dispose();
341
+ }
342
+
338
343
  clear() {
339
344
  this.layers.reset();
340
345
  }
@@ -359,6 +359,11 @@ export class SplatMapping {
359
359
 
360
360
  }
361
361
 
362
+ dispose() {
363
+ this.weightTexture.dispose();
364
+ this.materialTexture.dispose();
365
+ }
366
+
362
367
  /**
363
368
  * Cut a specified layer, depth will be reduced by 1
364
369
  * @param {number} index
@@ -14,7 +14,6 @@ import CheckersTexture from '../../../graphics/texture/CheckersTexture.js';
14
14
  import { MeshPhongMaterial } from 'three';
15
15
  import { assert } from "../../../../core/assert.js";
16
16
  import { Color } from "../../../../core/color/Color.js";
17
- import { randomFloatBetween } from "../../../../core/math/MathUtils.js";
18
17
  import { noop } from "../../../../core/function/Functions.js";
19
18
  import Vector3 from "../../../../core/geom/Vector3.js";
20
19
  import { SurfacePoint3 } from "../../../../core/geom/3d/SurfacePoint3.js";
@@ -24,6 +23,7 @@ import { traverseBinaryNodeUsingVisitor } from "../../../../core/bvh2/traversal/
24
23
  import { aabb2_overlapExists } from "../../../../core/geom/AABB2.js";
25
24
  import ObservedInteger from "../../../../core/model/ObservedInteger.js";
26
25
  import { NumericInterval } from "../../../../core/math/interval/NumericInterval.js";
26
+ import { randomFloatBetween } from "../../../../core/math/random/randomFloatBetween.js";
27
27
 
28
28
  class TerrainTileManager {
29
29
  /**
@@ -1,3 +1,5 @@
1
+ import { computeStringHash } from "../../../core/primitives/strings/computeStringHash.js";
2
+
1
3
  export class TooltipComponent {
2
4
  constructor() {
3
5
  /**
@@ -7,6 +9,19 @@ export class TooltipComponent {
7
9
  this.key = '';
8
10
  }
9
11
 
12
+ hash() {
13
+ return computeStringHash(this.key);
14
+ }
15
+
16
+ /**
17
+ *
18
+ * @param {TooltipComponent} other
19
+ * @return {boolean}
20
+ */
21
+ equals(other) {
22
+ return this.key === other.key;
23
+ }
24
+
10
25
  toJSON() {
11
26
  return {
12
27
  key: this.key
@@ -15,10 +15,23 @@ import { DelayBehavior } from "../../intelligence/behavior/util/DelayBehavior.js
15
15
  import { Light } from "../../graphics/ecs/light/Light.js";
16
16
  import { TransitionPropertyVectorXBehavior } from "../../../../model/game/story/behaviors/generic/TransitionPropertyVectorXBehavior.js";
17
17
 
18
+ /**
19
+ * @readonly
20
+ * @type {number}
21
+ */
18
22
  const SHUTDOWN_GRACE_PERIOD = 60;
19
23
 
24
+ /**
25
+ *
26
+ * @type {Map<Class|function, function(T,entity?:EntityBuilder,createEntity?:function,createEntityContext?:*):number>}
27
+ */
20
28
  const component_shutdown = new Map();
21
29
 
30
+ /**
31
+ * @template T
32
+ * @param {Class<T>} type
33
+ * @param {function(T,entity?:EntityBuilder,createEntity?:function,createEntityContext?:*):number} method
34
+ */
22
35
  function addShutdown(type, method) {
23
36
  component_shutdown.set(type, method);
24
37
  }
@@ -152,6 +165,11 @@ addShutdown(SoundEmitter, (soundEmitter, builder, createEntity, createEntityThis
152
165
  * @return {number} duration in seconds until the entity is completely hidden
153
166
  */
154
167
  export function hideEntityGracefully(builder, createEntity, createEntityThisArg) {
168
+ if (!builder.isBuilt) {
169
+ // already destroyed
170
+ return 0;
171
+ }
172
+
155
173
  let delay = 0;
156
174
 
157
175
  const components = builder.element;