@woosh/meep-engine 2.33.23 → 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 (204) 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/collection/ArrayUtils.js +1 -1
  8. package/core/collection/array/arrayQuickSort.js +9 -6
  9. package/core/collection/array/array_swap.js +22 -0
  10. package/core/collection/array/computeHashArray.js +22 -0
  11. package/core/collection/array/computeHashIntegerArray.js +15 -0
  12. package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
  13. package/core/color/Color.js +2 -1
  14. package/core/function/FunctionCompiler.js +2 -1
  15. package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
  16. package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  17. package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
  18. package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
  19. package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
  20. package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
  21. package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
  22. package/core/geom/3d/shape/AbstractShape3D.js +29 -0
  23. package/core/geom/3d/shape/CompositeShape.js +60 -0
  24. package/core/geom/3d/shape/TransformedShape3D.js +70 -0
  25. package/core/geom/3d/shape/UnitCubeShape3D.js +13 -0
  26. package/core/geom/3d/shape/UnitSphereShape3D.js +16 -0
  27. package/core/geom/AABB2.js +1 -1
  28. package/core/geom/ConicRay.js +3 -1
  29. package/core/geom/LineSegment.js +0 -78
  30. package/core/geom/Matrix4.js +7 -8
  31. package/core/geom/Rectangle.js +2 -1
  32. package/core/geom/Vector1.js +1 -1
  33. package/core/geom/Vector3.js +2 -1
  34. package/core/geom/Vector4.js +2 -1
  35. package/core/geom/random/randomPointInBox.js +7 -3
  36. package/core/geom/random/randomPointInPoint.js +6 -3
  37. package/core/geom/random/randomPointInSphere.js +6 -3
  38. package/core/geom/random/randomPointOnBox.js +7 -3
  39. package/core/geom/random/randomPointOnSphere.js +6 -3
  40. package/core/geom/v3_length.js +8 -3
  41. package/core/graph/graph_k_means_cluster.js +1 -1
  42. package/core/math/MathUtils.js +0 -354
  43. package/core/math/MathUtils.spec.js +7 -1
  44. package/core/math/gaussian.js +9 -0
  45. package/core/math/hash/computeHashFloat.js +17 -0
  46. package/core/math/hash/computeHashFloatArray.js +34 -0
  47. package/core/math/hash/computeObjectHash.js +54 -0
  48. package/core/math/intersects1D.js +19 -0
  49. package/core/math/interval/NumericInterval.js +2 -2
  50. package/core/math/isValueBetween.js +10 -0
  51. package/core/math/isValueBetweenInclusive.js +10 -0
  52. package/core/math/noise/curl_noise_3dt.js +1 -1
  53. package/core/math/noise/sdnoise.js +10 -10
  54. package/core/math/overlap1D.js +19 -0
  55. package/core/math/pingpong.js +17 -0
  56. package/core/math/random/makeRangedRandom.js +19 -0
  57. package/core/math/random/randomFloatBetween.js +14 -0
  58. package/core/math/random/randomFromArray.js +19 -0
  59. package/core/math/random/randomGaussian.js +15 -0
  60. package/core/math/random/randomIntegerBetween.js +14 -0
  61. package/core/math/random/roundFair.js +15 -0
  62. package/core/math/separation1D.js +21 -0
  63. package/core/math/solveQuadratic.js +25 -0
  64. package/core/model/BoundedValue.js +1 -1
  65. package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
  66. package/core/model/node-graph/node/Port.js +1 -1
  67. package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
  68. package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
  69. package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
  70. package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
  71. package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
  72. package/core/model/stat/LinearModifier.js +1 -1
  73. package/engine/animation/curve/AnimationCurve.js +72 -0
  74. package/engine/animation/curve/Keyframe.js +27 -0
  75. package/engine/animation/keyed2/AnimationTrack.js +27 -3
  76. package/engine/asset/Asset.js +1 -1
  77. package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  78. package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
  79. package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
  80. package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
  81. package/engine/asset/loaders/material/computeTextureHash.js +2 -1
  82. package/engine/ecs/animation/Animation.js +2 -1
  83. package/engine/ecs/animation/InverseKinematics.js +2 -1
  84. package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
  85. package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
  86. package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
  87. package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
  88. package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
  89. package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
  90. package/engine/ecs/gui/GUIElement.js +1 -1
  91. package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
  92. package/engine/ecs/gui/position/ViewportPosition.js +2 -1
  93. package/engine/ecs/systems/RangedAttackSystem.js +1 -1
  94. package/engine/ecs/systems/SteeringSystem.js +1 -1
  95. package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
  96. package/engine/ecs/tooltip/TooltipComponent.js +15 -0
  97. package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
  98. package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
  99. package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
  100. package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
  101. package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
  102. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
  103. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
  104. package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
  105. package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  106. package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
  107. package/engine/graphics/ecs/light/Light.d.ts +1 -1
  108. package/engine/graphics/ecs/light/Light.js +3 -0
  109. package/engine/graphics/ecs/mesh/Mesh.js +2 -1
  110. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
  111. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
  112. package/engine/graphics/geometry/AttributeSpec.js +105 -0
  113. package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
  114. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
  115. package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
  116. package/engine/graphics/micron/buildPatchwork.js +1 -1
  117. package/engine/graphics/micron/format/MicronGeometry.js +3 -3
  118. package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
  119. package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
  120. package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
  121. package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
  122. package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
  123. package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
  124. package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +80 -16
  125. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +57 -52
  126. package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +2 -1
  127. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +51 -12
  128. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +3 -2
  129. package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +1 -1
  130. package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
  131. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
  132. package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
  133. package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
  134. package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +21 -0
  135. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +0 -20
  136. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
  137. package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
  138. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
  139. package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
  140. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
  141. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
  142. package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
  143. package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
  144. package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +384 -0
  145. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +558 -0
  146. package/engine/graphics/particles/particular/group/Operation.js +18 -0
  147. package/engine/graphics/particles/particular/group/OperationType.js +9 -0
  148. package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
  149. package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
  150. package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
  151. package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
  152. package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
  153. package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
  154. package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
  155. package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
  156. package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
  157. package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +1 -1
  158. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
  159. package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
  160. package/engine/graphics/render/forward_plus/LightManager.js +117 -94
  161. package/engine/graphics/render/forward_plus/PointLight.js +9 -0
  162. package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
  163. package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
  164. package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
  165. package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
  166. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +5 -5
  167. package/engine/graphics/render/forward_plus/prototypeLightManager.js +180 -86
  168. package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
  169. package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
  170. package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
  171. package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
  172. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
  173. package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
  174. package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
  175. package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
  176. package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
  177. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
  178. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +1 -1
  179. package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
  180. package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  181. package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
  182. package/engine/grid/components/GridObstacle.js +1 -1
  183. package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
  184. package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
  185. package/engine/navigation/ecs/components/Path.js +1 -1
  186. package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
  187. package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
  188. package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
  189. package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
  190. package/engine/ui/notification/notificationGenerator.js +1 -1
  191. package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
  192. package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
  193. package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
  194. package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
  195. package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
  196. package/generation/theme/ThemeEngine.js +1 -1
  197. package/misc/makeMaterialIconCached.js +2 -2
  198. package/package.json +1 -1
  199. package/view/elements/image/HTMLElementCacheKey.js +2 -1
  200. package/view/elements/radial/RadialText.js +2 -1
  201. package/view/minimap/gl/MinimapMarkersGL.js +6 -100
  202. package/view/minimap/gl/buildMaterial.js +94 -0
  203. package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
  204. package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -357
@@ -0,0 +1,19 @@
1
+ /**
2
+ *
3
+ * @param {function():number} random returns a number between 0 and 1
4
+ * @param {number} min
5
+ * @param {number} max
6
+ * @returns {function():number} returns number between min and max
7
+ */
8
+ export function makeRangedRandom(random, min, max) {
9
+
10
+ if (min === 0 && max === 1) {
11
+ //input already returns values in correct range
12
+ return random;
13
+ }
14
+
15
+ const scale = max - min;
16
+ return function () {
17
+ return random() * scale + min;
18
+ };
19
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ *
3
+ * @param {function} random
4
+ * @param {number} min
5
+ * @param {number} max
6
+ * @returns {number}
7
+ */
8
+ export function randomFloatBetween(random, min, max) {
9
+ const span = max - min;
10
+
11
+ const roll = random();
12
+
13
+ return roll * span + min;
14
+ }
@@ -0,0 +1,19 @@
1
+ import { assert } from "../../assert.js";
2
+ import { min2 } from "../min2.js";
3
+
4
+ /**
5
+ * @template T
6
+ * @param {function} random
7
+ * @param {T[]} array
8
+ * @returns {T}
9
+ */
10
+ export function randomFromArray(random, array) {
11
+ assert.isArray(array, 'array');
12
+ assert.isFunction(random, 'random');
13
+
14
+ const length = array.length;
15
+
16
+ const i = min2(length - 1, Math.floor(random() * length));
17
+
18
+ return array[i];
19
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Returns a random number within a normal distribution (Bell/Gaussian curve)
3
+ * @param {int} [quality=6] controls number of "die rolls" used to approximate curve, more rolls - better approximation but higher cost of computation
4
+ * @param {function():number} random
5
+ * @returns {number} value between 0 and 1 with normal weight at 0.5
6
+ */
7
+ export function randomGaussian(random, quality = 6) {
8
+ let s = 0;
9
+
10
+ for (let i = 0; i < quality; i++) {
11
+ s += random();
12
+ }
13
+
14
+ return s / quality;
15
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Inclusive random between two boundaries, result is integer
3
+ * @param {function} random
4
+ * @param {number} min lower boundary, must be an integer
5
+ * @param {number} max upper boundary, must be an integer
6
+ * @returns {number}
7
+ */
8
+ export function randomIntegerBetween(random, min, max) {
9
+ const span = max - min;
10
+
11
+ const roll = random();
12
+
13
+ return Math.round(roll * span) + min;
14
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Performs a probabilistic rounding where a fraction is rounded up or down with probability equal to the fraction
3
+ * @param {number} number
4
+ * @param {function} random
5
+ * @returns {int}
6
+ */
7
+ export function roundFair(number, random) {
8
+ const mantissa = number % 1;
9
+ const roll = random();
10
+ if (roll < mantissa) {
11
+ return Math.ceil(number);
12
+ } else {
13
+ return Math.floor(number);
14
+ }
15
+ }
@@ -0,0 +1,21 @@
1
+ import { assert } from "../assert.js";
2
+ import { min2 } from "./min2.js";
3
+ import { max2 } from "./max2.js";
4
+
5
+ /**
6
+ * Returns a number representing overlap distance between two 1D line segments.
7
+ * Positive number indicates overlap, negative number indicates that segments do not overlap; 0 indicates that segments are touching.
8
+ * @param {Number} a0
9
+ * @param {Number} a1
10
+ * @param {Number} b0
11
+ * @param {Number} b1
12
+ * @returns {number}
13
+ */
14
+ export function separation1D(a0, a1, b0, b1) {
15
+ assert.isNumber(a0, "a0");
16
+ assert.isNumber(a1, "a1");
17
+ assert.isNumber(b0, "b0");
18
+ assert.isNumber(b1, "b1");
19
+
20
+ return min2(a1, b1) - max2(a0, b0);
21
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Return solutions for quadratic
3
+ * @param {number} a
4
+ * @param {number} b
5
+ * @param {number} c
6
+ * @returns {number[]|null}
7
+ */
8
+ export function solveQuadratic(a, b, c) {
9
+ let sol = null;
10
+ if (Math.abs(a) < 1e-6) {
11
+ if (Math.abs(b) < 1e-6) {
12
+ sol = Math.abs(c) < 1e-6 ? [0, 0] : null;
13
+ } else {
14
+ sol = [-c / b, -c / b];
15
+ }
16
+ } else {
17
+ let disc = b * b - 4 * a * c;
18
+ if (disc >= 0) {
19
+ disc = Math.sqrt(disc);
20
+ a = 2 * a;
21
+ sol = [(-b - disc) / a, (-b + disc) / a];
22
+ }
23
+ }
24
+ return sol;
25
+ }
@@ -5,7 +5,7 @@
5
5
 
6
6
  import Signal from "../events/signal/Signal.js";
7
7
  import { inverseLerp } from "../math/inverseLerp.js";
8
- import { computeHashFloat } from "../math/MathUtils.js";
8
+ import { computeHashFloat } from "../math/hash/computeHashFloat.js";
9
9
 
10
10
  /**
11
11
  *
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../../assert.js";
2
- import { computeHashIntegerArray } from "../../../math/MathUtils.js";
2
+ import { computeHashIntegerArray } from "../../../collection/array/computeHashIntegerArray.js";
3
3
 
4
4
  /**
5
5
  * Reference for a port of a node instance
@@ -1,6 +1,6 @@
1
- import { computeHashIntegerArray } from "../../../math/MathUtils.js";
2
1
  import { computeStringHash } from "../../../primitives/strings/computeStringHash.js";
3
2
  import { PortDirection } from "./PortDirection.js";
3
+ import { computeHashIntegerArray } from "../../../collection/array/computeHashIntegerArray.js";
4
4
 
5
5
  export class Port {
6
6
  constructor() {
@@ -1,4 +1,3 @@
1
- import { randomFloatBetween, randomFromArray, randomIntegerBetween } from "../../../math/MathUtils.js";
2
1
  import { seededRandom } from "../../../math/random/seededRandom.js";
3
2
  import DataType from "../../../parser/simple/DataType.js";
4
3
  import { ReactiveLiteralBoolean } from "../model/terminal/ReactiveLiteralBoolean.js";
@@ -7,6 +6,9 @@ import { ReactiveLiteralString } from "../model/terminal/ReactiveLiteralString.j
7
6
  import { ReactiveReference } from "../model/terminal/ReactiveReference.js";
8
7
  import { createRandomReactiveExpression } from "../model/util/createRandomReactiveExpression.js";
9
8
  import { MultiPredicateEvaluator } from "./MultiPredicateEvaluator.js";
9
+ import { randomFromArray } from "../../../math/random/randomFromArray.js";
10
+ import { randomFloatBetween } from "../../../math/random/randomFloatBetween.js";
11
+ import { randomIntegerBetween } from "../../../math/random/randomIntegerBetween.js";
10
12
 
11
13
  test.skip('performance', () => {
12
14
  const random = seededRandom(12319);
@@ -1,6 +1,6 @@
1
1
  import { assert } from "../../../assert.js";
2
- import { computeHashIntegerArray } from "../../../math/MathUtils.js";
3
2
  import { ReactiveExpression } from "./ReactiveExpression.js";
3
+ import { computeHashIntegerArray } from "../../../collection/array/computeHashIntegerArray.js";
4
4
 
5
5
  /**
6
6
  * @extends {ReactiveExpression}
@@ -1,8 +1,8 @@
1
1
  import { assert } from "../../../../assert.js";
2
2
  import Signal from "../../../../events/signal/Signal.js";
3
- import { computeHashFloat } from "../../../../math/MathUtils.js";
4
3
  import DataType from "../../../../parser/simple/DataType.js";
5
4
  import { ReactiveExpression } from "../ReactiveExpression.js";
5
+ import { computeHashFloat } from "../../../../math/hash/computeHashFloat.js";
6
6
 
7
7
  const dummySignal = new Signal();
8
8
 
@@ -1,8 +1,8 @@
1
1
  import { assert } from "../../../../assert.js";
2
- import { computeHashIntegerArray } from "../../../../math/MathUtils.js";
3
2
  import DataType from "../../../../parser/simple/DataType.js";
4
3
  import { computeStringHash } from "../../../../primitives/strings/computeStringHash.js";
5
4
  import { ReactiveExpression } from "../ReactiveExpression.js";
5
+ import { computeHashIntegerArray } from "../../../../collection/array/computeHashIntegerArray.js";
6
6
 
7
7
 
8
8
  /**
@@ -4,7 +4,6 @@
4
4
  * @param {ReactiveExpression} b
5
5
  * @returns {ReactiveExpression}
6
6
  */
7
- import { randomFromArray } from "../../../../math/MathUtils.js";
8
7
  import DataType from "../../../../parser/simple/DataType.js";
9
8
  import { ReactiveAdd } from "../arithmetic/ReactiveAdd.js";
10
9
  import { ReactiveDivide } from "../arithmetic/ReactiveDivide.js";
@@ -20,6 +19,7 @@ import { ReactiveAnd } from "../logic/ReactiveAnd.js";
20
19
  import { ReactiveOr } from "../logic/ReactiveOr.js";
21
20
  import { ReactiveLiteralNumber } from "../terminal/ReactiveLiteralNumber.js";
22
21
  import { ReactiveLiteralString } from "../terminal/ReactiveLiteralString.js";
22
+ import { randomFromArray } from "../../../../math/random/randomFromArray.js";
23
23
 
24
24
  /**
25
25
  *
@@ -1,5 +1,5 @@
1
1
  import { assert } from "../../assert.js";
2
- import { computeHashFloat } from "../../math/MathUtils.js";
2
+ import { computeHashFloat } from "../../math/hash/computeHashFloat.js";
3
3
 
4
4
 
5
5
  /**
@@ -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
  }
@@ -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
  *
@@ -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() {
@@ -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() {
@@ -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
  /**
@@ -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