@woosh/meep-engine 2.33.22 → 2.33.26

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 (288) hide show
  1. package/core/bvh2/BinaryNode.js +1 -1
  2. package/core/bvh2/aabb3/AABB3.js +18 -0
  3. package/core/bvh2/aabb3/AABB3Math.js +1 -1
  4. package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
  5. package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
  6. package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
  7. package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
  8. package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
  9. package/core/collection/ArrayUtils.js +1 -1
  10. package/core/collection/array/arrayQuickSort.js +9 -6
  11. package/core/collection/array/array_swap.js +22 -0
  12. package/core/collection/array/binarySearchHighIndex.js +1 -1
  13. package/core/collection/array/computeHashArray.js +22 -0
  14. package/core/collection/array/computeHashIntegerArray.js +15 -0
  15. package/core/collection/array/copyArray.js +2 -2
  16. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  17. package/core/color/Color.js +2 -1
  18. package/core/function/FunctionCompiler.js +2 -1
  19. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  20. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
  21. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  22. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  23. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  24. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  25. package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  26. package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
  27. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  28. package/core/geom/3d/shape/AbstractShape3D.js +65 -0
  29. package/core/geom/3d/shape/TransformedShape3D.js +181 -0
  30. package/core/geom/3d/shape/TransformedShape3D.spec.js +33 -0
  31. package/core/geom/3d/shape/UnionShape3D.js +255 -0
  32. package/core/geom/3d/shape/UnitCubeShape3D.js +101 -0
  33. package/core/geom/3d/shape/UnitCubeShape3D.spec.js +42 -0
  34. package/core/geom/3d/shape/UnitSphereShape3D.js +55 -0
  35. package/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +48 -0
  36. package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
  37. package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
  38. package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
  39. package/core/geom/AABB2.js +1 -1
  40. package/core/geom/ConicRay.js +3 -1
  41. package/core/geom/LineSegment.js +0 -78
  42. package/core/geom/Matrix4.js +7 -8
  43. package/core/geom/Plane.js +14 -9
  44. package/core/geom/Rectangle.js +2 -1
  45. package/core/geom/Vector1.js +1 -1
  46. package/core/geom/Vector3.js +2 -1
  47. package/core/geom/Vector4.js +2 -1
  48. package/core/geom/random/randomPointInBox.js +7 -3
  49. package/core/geom/random/randomPointInPoint.js +6 -3
  50. package/core/geom/random/randomPointInSphere.js +9 -5
  51. package/core/geom/random/randomPointOnBox.js +7 -3
  52. package/core/geom/random/randomPointOnSphere.js +6 -3
  53. package/core/geom/v3_length.js +8 -3
  54. package/core/graph/graph_k_means_cluster.js +1 -1
  55. package/core/json/resolvePathByArray.js +2 -2
  56. package/core/math/MathUtils.js +0 -354
  57. package/core/math/MathUtils.spec.js +7 -1
  58. package/core/math/gaussian.js +9 -0
  59. package/core/math/hash/computeHashFloat.js +17 -0
  60. package/core/math/hash/computeHashFloatArray.js +34 -0
  61. package/core/math/hash/computeObjectHash.js +54 -0
  62. package/core/math/intersects1D.js +19 -0
  63. package/core/math/interval/NumericInterval.js +2 -2
  64. package/core/math/isValueBetween.js +10 -0
  65. package/core/math/isValueBetweenInclusive.js +10 -0
  66. package/core/math/noise/curl_noise_3dt.js +1 -1
  67. package/core/math/noise/sdnoise.js +10 -10
  68. package/core/math/overlap1D.js +19 -0
  69. package/core/math/pingpong.js +17 -0
  70. package/core/math/random/makeRangedRandom.js +19 -0
  71. package/core/math/random/randomFloatBetween.js +14 -0
  72. package/core/math/random/randomFromArray.js +19 -0
  73. package/core/math/random/randomGaussian.js +15 -0
  74. package/core/math/random/randomIntegerBetween.js +14 -0
  75. package/core/math/random/roundFair.js +15 -0
  76. package/core/math/separation1D.js +21 -0
  77. package/core/math/solveQuadratic.js +25 -0
  78. package/core/model/BoundedValue.js +1 -1
  79. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  80. package/core/model/node-graph/node/Port.js +1 -1
  81. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  82. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  83. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  84. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  85. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  86. package/core/model/stat/LinearModifier.js +1 -1
  87. package/core/primitives/array/computeIntegerArrayHash.js +1 -1
  88. package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
  89. package/core/primitives/strings/insert_after_or_replace.js +27 -0
  90. package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
  91. package/editor/view/ecs/EntityEditor.js +2 -2
  92. package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
  93. package/engine/EngineHarness.js +1 -0
  94. package/engine/animation/AnimationUtils.js +5 -5
  95. package/engine/animation/curve/AnimationCurve.js +72 -0
  96. package/engine/animation/curve/Keyframe.js +27 -0
  97. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  98. package/engine/asset/Asset.js +1 -1
  99. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  100. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  101. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  102. package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
  103. package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
  104. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  105. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  106. package/engine/ecs/EntityBuilder.js +25 -5
  107. package/engine/ecs/animation/Animation.js +2 -1
  108. package/engine/ecs/animation/InverseKinematics.js +2 -1
  109. package/engine/ecs/attachment/AttachmentBinding.js +8 -0
  110. package/engine/ecs/attachment/AttachmentSystem.js +4 -0
  111. package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
  112. package/engine/ecs/components/Tag.js +27 -6
  113. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  114. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  115. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  116. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  117. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  118. package/engine/ecs/fow/FogOfWar.js +4 -0
  119. package/engine/ecs/fow/FogOfWarSystem.js +2 -0
  120. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  121. package/engine/ecs/gui/GUIElement.js +1 -1
  122. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  123. package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
  124. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  125. package/engine/ecs/system/AbstractContextSystem.js +1 -1
  126. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  127. package/engine/ecs/systems/SteeringSystem.js +1 -1
  128. package/engine/ecs/systems/TagSystem.js +17 -0
  129. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  130. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  131. package/engine/ecs/transform/Transform.js +19 -6
  132. package/engine/ecs/util/hideEntityGracefully.js +18 -0
  133. package/engine/graphics/GraphicsEngine.js +11 -23
  134. package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  135. package/engine/graphics/composit/CompositLayer.js +17 -4
  136. package/engine/graphics/composit/CompositingStages.js +8 -0
  137. package/engine/graphics/composit/LayerCompositer.js +35 -6
  138. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  139. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  140. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  141. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  142. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  143. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  144. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  145. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  146. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  147. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  148. package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
  149. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  150. package/engine/graphics/ecs/light/Light.js +5 -0
  151. package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
  152. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  153. package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
  154. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  155. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
  156. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  157. package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
  158. package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
  159. package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
  160. package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
  161. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  162. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  163. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  164. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  165. package/engine/graphics/micron/buildPatchwork.js +1 -1
  166. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  167. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  168. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  169. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  170. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  171. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  172. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  173. package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
  174. package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
  175. package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
  176. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
  177. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
  178. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
  179. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
  180. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
  181. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
  182. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
  183. package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
  184. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  185. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  186. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  187. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  188. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
  189. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
  190. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  191. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
  192. package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
  193. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  194. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  195. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  196. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  197. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  198. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  199. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  200. package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
  201. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
  202. package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
  203. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
  204. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  205. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  206. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  207. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  208. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  209. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  210. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  211. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  212. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  213. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  214. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  215. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  216. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
  217. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  218. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  219. package/engine/graphics/render/forward_plus/LightManager.js +126 -95
  220. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  221. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  222. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  223. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  224. package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
  225. package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
  226. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
  227. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
  228. package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
  229. package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
  230. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
  231. package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
  232. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  233. package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
  234. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
  235. package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
  236. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  237. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  238. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  239. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  240. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  241. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  242. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  243. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  244. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  245. package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
  246. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  247. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  248. package/engine/graphics/shaders/TerrainShader.js +4 -5
  249. package/engine/graphics/shadows/ShadowMapRenderer.js +8 -2
  250. package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
  251. package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
  252. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  253. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  254. package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
  255. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  256. package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
  257. package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
  258. package/engine/graphics/trail/x/RibbonX.js +17 -2
  259. package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
  260. package/engine/graphics/util/composeMatrix4.js +33 -23
  261. package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
  262. package/engine/grid/components/GridObstacle.js +3 -10
  263. package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
  264. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  265. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  266. package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
  267. package/engine/navigation/ecs/components/Path.js +1 -6
  268. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  269. package/engine/reference/v2/Reference.js +6 -0
  270. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  271. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  272. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  273. package/engine/ui/notification/notificationGenerator.js +1 -1
  274. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  275. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  276. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  277. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  278. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  279. package/generation/theme/ThemeEngine.js +2 -2
  280. package/misc/makeMaterialIconCached.js +2 -2
  281. package/package.json +3 -3
  282. package/view/View.js +4 -2
  283. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  284. package/view/elements/radial/RadialText.js +2 -1
  285. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  286. package/view/minimap/gl/buildMaterial.js +94 -0
  287. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  288. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
@@ -367,6 +367,7 @@ export class EngineHarness {
367
367
  sensitivity
368
368
  });
369
369
 
370
+ eb.add(Tag.fromJSON(['CameraController']));
370
371
  eb.add(SerializationMetadata.Transient);
371
372
 
372
373
  eb.build(ecd);
@@ -7,7 +7,7 @@ import { removeComponentsExcept } from "../ecs/util/removeComponentsExcept.js";
7
7
  import { createSound, createTimer } from "../EntityCreator.js";
8
8
  import Mesh from "../graphics/ecs/mesh/Mesh.js";
9
9
  import Trail2D, { Trail2DFlags } from "../graphics/ecs/trail2d/Trail2D.js";
10
- import { ParticleEmitterSystem2 } from "../graphics/particles/ecs/ParticleEmitterSystem2.js";
10
+ import { ParticleEmitterSystem } from "../graphics/particles/ecs/ParticleEmitterSystem.js";
11
11
  import { ParticleEmitter } from "../graphics/particles/particular/engine/emitter/ParticleEmitter.js";
12
12
  import { ParticleEmitterFlag } from "../graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js";
13
13
  import { distributeParticlesOnObject3D } from "../graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js";
@@ -137,9 +137,9 @@ export function removeEntityWithMeshParticlesEffect(
137
137
 
138
138
  /**
139
139
  *
140
- * @type {ParticleEmitterSystem2}
140
+ * @type {ParticleEmitterSystem}
141
141
  */
142
- const sPE = entityManager.getSystem(ParticleEmitterSystem2);
142
+ const sPE = entityManager.getSystem(ParticleEmitterSystem);
143
143
 
144
144
  /**
145
145
  *
@@ -214,9 +214,9 @@ export function removeEntityGenericEffect(
214
214
 
215
215
  /**
216
216
  *
217
- * @type {ParticleEmitterSystem2}
217
+ * @type {ParticleEmitterSystem}
218
218
  */
219
- const sPE = engine.entityManager.getSystem(ParticleEmitterSystem2);
219
+ const sPE = engine.entityManager.getSystem(ParticleEmitterSystem);
220
220
 
221
221
  /**
222
222
  *
@@ -0,0 +1,72 @@
1
+ import { inverseLerp } from "../../../core/math/inverseLerp.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number} t
6
+ * @param {Keyframe} keyframe0
7
+ * @param {Keyframe} keyframe1
8
+ * @return {number}
9
+ */
10
+ function evaluate(t, keyframe0, keyframe1) {
11
+
12
+ const dt = keyframe1.time - keyframe0.time;
13
+
14
+ const m0 = keyframe0.outTangent * dt;
15
+ const m1 = keyframe1.inTangent * dt;
16
+
17
+ const t2 = t * t;
18
+ const t3 = t2 * t;
19
+
20
+ const a = 2 * t3 - 3 * t2 + 1;
21
+ const b = t3 - 2 * t2 + t;
22
+ const c = t3 - t2;
23
+ const d = -2 * t3 + 3 * t2;
24
+
25
+ return a * keyframe0.value + b * m0 + c * m1 + d * keyframe1.value;
26
+ }
27
+
28
+ /**
29
+ * Modelled on unity's AnimationCurve
30
+ * @see https://github.com/nothke/ThreadableCurve/blob/master/ThreadableCurve.cs
31
+ */
32
+ export class AnimationCurve {
33
+ constructor() {
34
+ /**
35
+ *
36
+ * @type {Keyframe[]}
37
+ */
38
+ this.keys = [];
39
+ }
40
+
41
+ evaluate(t) {
42
+ const keys = this.keys;
43
+ const key_count = keys.length;
44
+ if (key_count === 0) {
45
+ return 0;
46
+ }
47
+
48
+ if (key_count === 1) {
49
+ return keys[0].value;
50
+ }
51
+
52
+ if (t < keys[0].time) {
53
+ // before start
54
+ return keys[0].value;
55
+ }
56
+
57
+ for (let i = 1; i < key_count; i++) {
58
+ const f1 = keys[i];
59
+
60
+ if (t < f1.time) {
61
+ const f0 = keys[i - 1];
62
+ const kt = inverseLerp(f0.time, f1.time, t);
63
+
64
+ return evaluate(kt, f0, f1);
65
+ }
66
+ }
67
+
68
+ // past end
69
+ return keys[key_count - 1].value;
70
+ }
71
+
72
+ }
@@ -0,0 +1,27 @@
1
+ export class Keyframe {
2
+ constructor() {
3
+ /**
4
+ *
5
+ * @type {number}
6
+ */
7
+ this.value = 0;
8
+
9
+ /**
10
+ *
11
+ * @type {number}
12
+ */
13
+ this.time = 0;
14
+
15
+ /**
16
+ *
17
+ * @type {number}
18
+ */
19
+ this.inTangent = 0;
20
+
21
+ /**
22
+ *
23
+ * @type {number}
24
+ */
25
+ this.outTangent = 0;
26
+ }
27
+ }
@@ -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
  *
@@ -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