@woosh/meep-engine 2.33.21 → 2.33.25

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/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  9. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
  10. package/core/collection/ArrayUtils.js +1 -1
  11. package/core/collection/array/arrayQuickSort.js +9 -6
  12. package/core/collection/array/array_swap.js +22 -0
  13. package/core/collection/array/binarySearchHighIndex.js +1 -1
  14. package/core/collection/array/computeHashArray.js +22 -0
  15. package/core/collection/array/computeHashIntegerArray.js +15 -0
  16. package/core/collection/array/copyArray.js +2 -2
  17. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  18. package/core/color/Color.js +2 -1
  19. package/core/function/FunctionCompiler.js +2 -1
  20. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  21. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
  22. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  23. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  24. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  25. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  26. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  27. package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
  28. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  29. package/core/geom/3d/shape/AbstractShape3D.js +38 -0
  30. package/core/geom/3d/shape/CompositeShape.js +240 -0
  31. package/core/geom/3d/shape/TransformedShape3D.js +126 -0
  32. package/core/geom/3d/shape/UnitCubeShape3D.js +24 -0
  33. package/core/geom/3d/shape/UnitSphereShape3D.js +24 -0
  34. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  35. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  36. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  37. package/core/geom/AABB2.js +1 -1
  38. package/core/geom/ConicRay.js +3 -1
  39. package/core/geom/LineSegment.js +0 -78
  40. package/core/geom/Matrix4.js +7 -8
  41. package/core/geom/Plane.js +14 -9
  42. package/core/geom/Rectangle.js +2 -1
  43. package/core/geom/Vector1.js +1 -1
  44. package/core/geom/Vector3.js +2 -1
  45. package/core/geom/Vector4.js +2 -1
  46. package/core/geom/random/randomPointInBox.js +7 -3
  47. package/core/geom/random/randomPointInPoint.js +6 -3
  48. package/core/geom/random/randomPointInSphere.js +9 -5
  49. package/core/geom/random/randomPointOnBox.js +7 -3
  50. package/core/geom/random/randomPointOnSphere.js +6 -3
  51. package/core/geom/v3_length.js +8 -3
  52. package/core/graph/graph_k_means_cluster.js +1 -1
  53. package/core/json/resolvePathByArray.js +2 -2
  54. package/core/math/MathUtils.js +0 -354
  55. package/core/math/MathUtils.spec.js +7 -1
  56. package/core/math/gaussian.js +9 -0
  57. package/core/math/hash/computeHashFloat.js +17 -0
  58. package/core/math/hash/computeHashFloatArray.js +34 -0
  59. package/core/math/hash/computeObjectHash.js +54 -0
  60. package/core/math/intersects1D.js +19 -0
  61. package/core/math/interval/NumericInterval.js +2 -2
  62. package/core/math/isValueBetween.js +10 -0
  63. package/core/math/isValueBetweenInclusive.js +10 -0
  64. package/core/math/noise/curl_noise_3dt.js +1 -1
  65. package/core/math/noise/sdnoise.js +10 -10
  66. package/core/math/overlap1D.js +19 -0
  67. package/core/math/pingpong.js +17 -0
  68. package/core/math/random/makeRangedRandom.js +19 -0
  69. package/core/math/random/randomFloatBetween.js +14 -0
  70. package/core/math/random/randomFromArray.js +19 -0
  71. package/core/math/random/randomGaussian.js +15 -0
  72. package/core/math/random/randomIntegerBetween.js +14 -0
  73. package/core/math/random/roundFair.js +15 -0
  74. package/core/math/separation1D.js +21 -0
  75. package/core/math/solveQuadratic.js +25 -0
  76. package/core/model/BoundedValue.js +1 -1
  77. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  78. package/core/model/node-graph/node/Port.js +1 -1
  79. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  80. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  81. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  82. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  83. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  84. package/core/model/stat/LinearModifier.js +1 -1
  85. package/core/primitives/array/computeIntegerArrayHash.js +1 -1
  86. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  87. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  88. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  89. package/editor/view/ecs/EntityEditor.js +2 -2
  90. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  91. package/engine/EngineHarness.js +1 -0
  92. package/engine/animation/AnimationUtils.js +5 -5
  93. package/engine/animation/curve/AnimationCurve.js +72 -0
  94. package/engine/animation/curve/Keyframe.js +27 -0
  95. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  96. package/engine/asset/Asset.js +1 -1
  97. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  98. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  99. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  100. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  101. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  102. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  103. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  104. package/engine/ecs/EntityBuilder.js +25 -5
  105. package/engine/ecs/animation/Animation.js +2 -1
  106. package/engine/ecs/animation/InverseKinematics.js +2 -1
  107. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  108. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  109. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  110. package/engine/ecs/components/Tag.js +27 -6
  111. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  112. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  113. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  114. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  115. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  116. package/engine/ecs/fow/FogOfWar.js +4 -0
  117. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  118. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  119. package/engine/ecs/gui/GUIElement.js +1 -1
  120. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  121. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  122. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  123. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  124. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  125. package/engine/ecs/systems/SteeringSystem.js +1 -1
  126. package/engine/ecs/systems/TagSystem.js +17 -0
  127. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  128. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  129. package/engine/ecs/transform/Transform.js +19 -6
  130. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  131. package/engine/graphics/GraphicsEngine.js +11 -23
  132. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  133. package/engine/graphics/composit/CompositLayer.js +17 -4
  134. package/engine/graphics/composit/CompositingStages.js +8 -0
  135. package/engine/graphics/composit/LayerCompositer.js +35 -6
  136. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  137. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  138. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  139. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  140. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  141. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  142. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  143. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  144. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  145. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  146. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  147. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  148. package/engine/graphics/ecs/light/Light.js +5 -0
  149. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  150. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  151. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  152. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  153. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  154. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  155. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  156. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  157. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  158. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  159. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  160. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  161. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  162. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  163. package/engine/graphics/micron/buildPatchwork.js +1 -1
  164. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  165. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  166. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  167. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  168. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  169. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  170. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  171. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  172. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  173. package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
  174. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  175. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
  176. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  177. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  178. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  179. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  180. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  181. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  182. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  183. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  184. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  185. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  186. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  187. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  188. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  189. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
  190. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  191. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  192. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  193. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  194. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  195. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  196. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  197. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  198. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  199. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  200. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  201. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
  202. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  203. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  204. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  205. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  206. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  207. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  208. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  209. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  210. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  211. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  212. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  213. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  214. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
  215. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  216. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  217. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  218. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  219. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  220. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  221. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  222. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
  223. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  224. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  225. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  226. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  227. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  228. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  229. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  230. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  231. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  232. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
  233. package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
  234. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  235. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  236. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  237. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  238. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  239. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  240. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  241. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  242. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  243. package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
  244. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  245. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  246. package/engine/graphics/shaders/TerrainShader.js +4 -5
  247. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  248. package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
  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/composeMatrix4.js +33 -23
  258. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  259. package/engine/grid/components/GridObstacle.js +3 -10
  260. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  261. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  262. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  263. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  264. package/engine/navigation/ecs/components/Path.js +1 -6
  265. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  266. package/engine/reference/v2/Reference.js +6 -0
  267. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  268. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  269. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  270. package/engine/ui/notification/notificationGenerator.js +1 -1
  271. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  272. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  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 +2 -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 +6 -100
  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
@@ -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
  *
@@ -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
  *
@@ -1,6 +1,7 @@
1
1
  import Signal from "../../core/events/signal/Signal.js";
2
2
  import { assert } from "../../core/assert.js";
3
3
  import { EventType } from "./EntityManager.js";
4
+ import { isDefined } from "../../core/process/matcher/Matchers.js";
4
5
 
5
6
  /**
6
7
  *
@@ -63,7 +64,6 @@ class EntityBuilder {
63
64
  this.on = {
64
65
  built: new Signal()
65
66
  };
66
-
67
67
  }
68
68
 
69
69
  /**
@@ -238,10 +238,10 @@ class EntityBuilder {
238
238
  this.dataset.addEntityEventListener(this.entity, eventName, listener, context);
239
239
  } else {
240
240
  this.deferredListeners.push({
241
- name: eventName,
242
- listener: listener,
243
- context
244
- });
241
+ name: eventName,
242
+ listener: listener,
243
+ context
244
+ });
245
245
  }
246
246
  return this;
247
247
  }
@@ -356,6 +356,26 @@ class EntityBuilder {
356
356
  this.on.built.send2(entity, dataset);
357
357
  return entity;
358
358
  }
359
+
360
+ /**
361
+ *
362
+ * @param {number} entity
363
+ * @param {EntityComponentDataset} dataset
364
+ * @returns {EntityBuilder}
365
+ */
366
+ static readFromDataset(entity, dataset) {
367
+ const r = new EntityBuilder();
368
+
369
+ dataset.getAllComponents(entity)
370
+ .filter(isDefined)
371
+ .forEach(r.add, r);
372
+
373
+ r.setFlag(EntityBuilderFlags.Built);
374
+ r.entity = entity;
375
+ r.dataset = dataset;
376
+
377
+ return r;
378
+ }
359
379
  }
360
380
 
361
381
  /**
@@ -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() {
@@ -30,6 +30,14 @@ export class AttachmentBinding {
30
30
  this.attachment = null;
31
31
  }
32
32
 
33
+ link() {
34
+
35
+ }
36
+
37
+ unlink() {
38
+
39
+ }
40
+
33
41
  update() {
34
42
 
35
43
  }
@@ -265,6 +265,8 @@ export class AttachmentSystem extends System {
265
265
  //update iterator
266
266
  this.waiting.splice(i, 1);
267
267
 
268
+ binding.link();
269
+
268
270
  i--;
269
271
  numRecords--;
270
272
  }
@@ -305,6 +307,8 @@ export class AttachmentSystem extends System {
305
307
  parentBindings.splice(i, 1);
306
308
  }
307
309
 
310
+ attachmentBinding.unlink();
311
+
308
312
  break;
309
313
  }
310
314
  }
@@ -1,18 +1,9 @@
1
- import Vector3 from "../../../core/geom/Vector3.js";
2
- import { Matrix4, Quaternion as ThreeQuaternion } from "three";
3
1
  import { AttachmentBinding } from "./AttachmentBinding.js";
4
- import Quaternion from "../../../core/geom/Quaternion.js";
2
+ import { mat4 } from "gl-matrix";
5
3
 
6
- const socketM4 = new Matrix4();
7
-
8
- const threeQuaternion = new ThreeQuaternion();
9
-
10
- const pScale = new Vector3();
11
- const pPosition = new Vector3();
12
-
13
- const attachmentM4 = new Matrix4();
14
-
15
- const parentM4 = new Matrix4();
4
+ const scratch_m4_0 = new Float32Array(16);
5
+ const scratch_m4_1 = new Float32Array(16);
6
+ const scratch_m4_2 = new Float32Array(16);
16
7
 
17
8
  export class TransformAttachmentBinding extends AttachmentBinding {
18
9
  constructor() {
@@ -24,40 +15,19 @@ export class TransformAttachmentBinding extends AttachmentBinding {
24
15
  * TODO make use of Transform.multiplyTransforms for better readability and performance
25
16
  */
26
17
  update() {
27
- const socketTransform = this.socket.transform;
28
-
29
- threeQuaternion.copy(socketTransform.rotation);
30
-
31
- socketM4.compose(socketTransform.position, threeQuaternion, socketTransform.scale);
32
-
33
- const parentTransform = this.parentTransform;
34
-
35
- threeQuaternion.copy(parentTransform.rotation);
36
-
37
- parentM4.compose(parentTransform.position, threeQuaternion, parentTransform.scale);
38
-
39
- const attachment = this.attachment;
40
- const aT = attachment.transform;
41
-
42
- threeQuaternion.copy(aT.rotation);
43
-
44
- attachmentM4.compose(aT.position, threeQuaternion, aT.scale);
45
-
46
- socketM4.multiplyMatrices(parentM4, socketM4);
47
- socketM4.multiply(attachmentM4);
48
- socketM4.decompose(pPosition, threeQuaternion, pScale);
49
-
50
- const t = this.attachedTransform;
51
18
 
52
- if (Number.isNaN(threeQuaternion.x)) {
53
- t.rotation.copy(Quaternion.identity);
54
- } else {
55
- t.rotation.copy(threeQuaternion);
56
- }
19
+ this.socket.transform.toMatrix4(scratch_m4_0);
20
+ this.parentTransform.toMatrix4(scratch_m4_1);
21
+ this.attachment.transform.toMatrix4(scratch_m4_2);
57
22
 
58
- t.scale.copy(pScale);
23
+ mat4.multiply(
24
+ scratch_m4_0, scratch_m4_1, scratch_m4_0
25
+ );
26
+ mat4.multiply(
27
+ scratch_m4_0, scratch_m4_0, scratch_m4_2
28
+ );
59
29
 
60
- t.position.copy(pPosition);
30
+ this.attachedTransform.fromMatrix4(scratch_m4_0);
61
31
  }
62
32
 
63
33
  link() {
@@ -81,6 +81,8 @@ export class Tag {
81
81
  * @returns {boolean}
82
82
  */
83
83
  add(value) {
84
+ assert.isString(value, 'value');
85
+
84
86
  if (this.contains(value)) {
85
87
  return false;
86
88
  }
@@ -117,6 +119,8 @@ export class Tag {
117
119
  * @returns {boolean}
118
120
  */
119
121
  contains(value) {
122
+ assert.isString(value, 'value');
123
+
120
124
  return this.values.indexOf(value) !== -1;
121
125
  }
122
126
 
@@ -125,16 +129,20 @@ export class Tag {
125
129
  * @param {string[]} values
126
130
  */
127
131
  containsAll(values) {
128
- const valueCount = values.length;
132
+ assert.isArray(values, 'values');
133
+
134
+ const search_value_count = values.length;
135
+
136
+ const these_values = this.values;
137
+ const these_values_count = these_values.length;
129
138
 
130
- const values1 = this.values;
131
- const tagCount = values1.length;
139
+ let i = 0, j = 0;
132
140
 
133
- main: for (let i = 0; i < valueCount; i++) {
141
+ main: for (; i < search_value_count; i++) {
134
142
  const v = values[i];
135
143
 
136
- for (let j = 0; j < tagCount; j++) {
137
- const tag = values1[j];
144
+ for (j = 0; j < these_values_count; j++) {
145
+ const tag = these_values[j];
138
146
 
139
147
  if (tag === v) {
140
148
  continue main;
@@ -287,6 +295,19 @@ export class Tag {
287
295
  return result;
288
296
  }
289
297
 
298
+ /**
299
+ *
300
+ * @param {string} tag
301
+ * @returns {Tag}
302
+ */
303
+ static fromOne(tag) {
304
+ const r = new Tag();
305
+
306
+ r.add(tag);
307
+
308
+ return r;
309
+ }
310
+
290
311
 
291
312
  /**
292
313
  *
@@ -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() {
@@ -75,6 +75,10 @@ export class FogOfWar {
75
75
  */
76
76
  this.texture = null;
77
77
 
78
+ /**
79
+ * Resolution scale of FoW versus terrain resolution, higher number makes FoW more detailed
80
+ * @type {Vector1}
81
+ */
78
82
  this.scale = new Vector1(1);
79
83
 
80
84
  /**
@@ -12,6 +12,7 @@ import { BlendingType } from "../../graphics/texture/sampler/BlendingType.js";
12
12
  import { FogOfWarRenderer } from "./shader/FogOfWarRenderer.js";
13
13
  import { StandardFrameBuffers } from "../../graphics/StandardFrameBuffers.js";
14
14
  import { CompositLayer } from "../../graphics/composit/CompositLayer.js";
15
+ import { CompositingStages } from "../../graphics/composit/CompositingStages.js";
15
16
 
16
17
 
17
18
  const frustum = new Frustum();
@@ -133,6 +134,7 @@ export class FogOfWarSystem extends System {
133
134
 
134
135
  const compositerLayer = graphics.layerComposer.createLayer({}, BlendingType.Normal);
135
136
  compositerLayer.name = 'Fog of War';
137
+ compositerLayer.stage = CompositingStages.POST_TRANSPARENT;
136
138
 
137
139
  // Fog of war should be drawn last typically, over everything else, so we set order to a large number
138
140
  compositerLayer.order = 1000;
@@ -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
  /**
@@ -144,7 +144,9 @@ class HeadsUpDisplaySystem extends System {
144
144
  up.set(worldPositionX, worldPositionY + 1, worldPositionZ, 1);
145
145
  up.threeApplyMatrix4(projectionMatrix);
146
146
 
147
+ // compute perspective divide
147
148
  const d = 1 / Math.abs(up.w);
149
+
148
150
  up.x *= d;
149
151
  up.y *= d;
150
152
  up.z *= d;
@@ -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
@@ -38,7 +38,7 @@ export class AbstractContextSystem extends System {
38
38
  // TODO
39
39
  },
40
40
  (ctx) => {
41
- ctx.unlink();
41
+ //ctx.unlink();
42
42
  }
43
43
  );
44
44
 
@@ -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,10 +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
13
  import Vector3 from "../../../core/geom/Vector3.js";
15
14
  import { alignToVector } from "../terrain/ecs/ClingToTerrainSystem.js";
16
15
  import { v3_dot } from "../../../core/geom/v3_dot.js";
16
+ import { solveQuadratic } from "../../../core/math/solveQuadratic.js";
17
17
 
18
18
  /**
19
19
  *
@@ -13,6 +13,23 @@ class TagSystem extends System {
13
13
 
14
14
  this.entityManager = null;
15
15
  }
16
+
17
+ /**
18
+ *
19
+ * @param {string} tag
20
+ * @param {EntityComponentDataset} ecd
21
+ * @returns {number[]}
22
+ */
23
+ static find_entities_with_tag(tag, ecd) {
24
+ const r = [];
25
+ ecd.traverseComponents(Tag, (t, e) => {
26
+ if (t.contains(tag)) {
27
+ r.push(e);
28
+ }
29
+ });
30
+
31
+ return r;
32
+ }
16
33
  }
17
34
 
18
35
 
@@ -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