@woosh/meep-engine 2.55.0 → 2.56.1

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 (156) hide show
  1. package/editor/view/node-graph/PortView.js +2 -2
  2. package/package.json +1 -1
  3. package/src/core/binary/BinaryBuffer.js +2 -1
  4. package/src/core/cache/LoadingCache.js +10 -5
  5. package/src/core/collection/array/array_remove_element.js +6 -9
  6. package/src/core/collection/array/array_remove_first.js +13 -6
  7. package/src/core/collection/array/array_remove_first.spec.js +39 -0
  8. package/src/core/collection/array/binarySearchHighIndex.spec.js +10 -9
  9. package/src/core/collection/heap/Uin32Heap.spec.js +36 -0
  10. package/src/core/collection/heap/Uint32Heap.js +10 -5
  11. package/src/core/function/FunctionCompiler.js +4 -4
  12. package/src/core/function/Functions.js +0 -19
  13. package/src/core/geom/3d/SurfacePoint3.js +30 -20
  14. package/src/core/geom/3d/SurfacePoint3.spec.js +116 -0
  15. package/src/core/geom/3d/aabb/AABB3.js +10 -9
  16. package/src/core/geom/3d/aabb/{aabb3_array_contains_point.js → aabb3_array_intersects_point.js} +4 -1
  17. package/src/core/geom/3d/aabb/aabb3_from_min_max.js +25 -1
  18. package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.js +2 -25
  19. package/src/core/geom/3d/aabb/aabb3_signed_distance_sqr_to_point.js +5 -1
  20. package/src/core/geom/3d/apply_mat4_transform_to_direction_v3_array.js +5 -1
  21. package/src/core/geom/3d/apply_mat4_transform_to_v3_array.js +5 -1
  22. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +2 -2
  23. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.spec.js +26 -0
  24. package/src/core/geom/3d/v3_compute_triangle_normal.spec.js +18 -0
  25. package/src/core/geom/Vector2.js +1 -1
  26. package/src/core/geom/Vector3.js +1 -1
  27. package/src/core/geom/packing/miniball/Miniball.spec.js +24 -0
  28. package/src/core/math/statistics/computeStatisticalPartialMedian.js +2 -2
  29. package/src/core/model/object/read_property.js +2 -2
  30. package/src/core/model/object/write_property.js +3 -3
  31. package/src/core/primitives/numbers/compareNumbers.js +4 -4
  32. package/src/core/primitives/numbers/number_compare_ascending.js +9 -0
  33. package/src/core/primitives/numbers/number_compare_ascending.spec.js +9 -0
  34. package/src/core/primitives/numbers/number_compare_descending.js +9 -0
  35. package/src/core/primitives/numbers/number_compare_descending.spec.js +9 -0
  36. package/src/core/primitives/numbers/number_format_by_thousands.spec.js +12 -0
  37. package/src/core/primitives/numbers/number_pretty_print.js +1 -1
  38. package/src/core/primitives/strings/compareStrings.spec.js +12 -0
  39. package/src/core/primitives/strings/string_capitalize.js +15 -0
  40. package/src/core/primitives/strings/string_capitalize.spec.js +13 -0
  41. package/src/core/primitives/strings/string_compute_byte_size.js +21 -0
  42. package/src/core/primitives/strings/string_compute_common_prefix.js +44 -0
  43. package/src/core/primitives/strings/string_compute_common_prefix.spec.js +23 -0
  44. package/src/core/primitives/strings/string_format_camel_to_kebab.js +9 -0
  45. package/src/core/primitives/strings/string_format_camel_to_kebab.spec.js +8 -0
  46. package/src/core/primitives/strings/string_format_kebab_to_underscore.js +8 -0
  47. package/src/core/time/current_time_in_seconds.js +11 -0
  48. package/src/engine/Clock.js +3 -13
  49. package/src/engine/animation/curve/AnimationCurve.spec.js +27 -0
  50. package/src/engine/asset/AssetManager.js +2 -2
  51. package/src/engine/ecs/EntityManager.js +8 -1
  52. package/src/engine/ecs/EntityManager.spec.js +56 -6
  53. package/src/engine/ecs/animation/Animation.spec.js +22 -0
  54. package/src/engine/ecs/attachment/Attachment.js +24 -25
  55. package/src/engine/ecs/attachment/AttachmentBinding.js +27 -30
  56. package/src/engine/ecs/attachment/AttachmentSystem.js +21 -24
  57. package/src/engine/ecs/attachment/BoneAttachmentBinding.js +6 -9
  58. package/src/engine/ecs/attachment/TransformAttachmentBinding.js +0 -3
  59. package/src/engine/ecs/components/CharacterController.js +24 -18
  60. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +3 -2
  61. package/src/engine/ecs/fow/FogOfWarRevealer.js +2 -3
  62. package/src/engine/ecs/ik/IKMath.js +6 -1
  63. package/src/engine/ecs/ik/IKProblem.js +17 -17
  64. package/src/engine/ecs/ik/InverseKinematics.js +6 -7
  65. package/src/engine/ecs/ik/InverseKinematicsSystem.js +24 -26
  66. package/src/engine/ecs/storage/BinaryBufferSerializer.js +3 -3
  67. package/src/engine/ecs/systems/TagSystem.js +1 -6
  68. package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +2 -2
  69. package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.js +2 -2
  70. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.spec.js +14 -0
  71. package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.js +21 -9
  72. package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.spec.js +79 -0
  73. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.spec.js +7 -6
  74. package/src/engine/options/OptionGroup.js +10 -0
  75. package/src/engine/simulation/Ticker.js +17 -20
  76. package/src/generation/GridTaskGroup.js +5 -9
  77. package/src/generation/filtering/numeric/CellFilterCache.js +12 -16
  78. package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +31 -32
  79. package/src/generation/filtering/numeric/complex/CellFilterLookupTable.js +6 -9
  80. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +7 -10
  81. package/src/generation/filtering/numeric/complex/CellFilterSobel.js +6 -9
  82. package/src/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +18 -21
  83. package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +24 -25
  84. package/src/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +1 -1
  85. package/src/generation/grid/GridData.js +23 -22
  86. package/src/generation/grid/GridData.spec.js +41 -0
  87. package/src/generation/grid/GridTaskGenerator.js +7 -8
  88. package/src/generation/grid/layers/GridDataLayer.js +23 -25
  89. package/src/generation/markers/GridActionRuleSet.js +20 -22
  90. package/src/generation/markers/GridCellActionPlaceMarker.js +40 -43
  91. package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +7 -9
  92. package/src/generation/markers/MarkerNode.js +44 -44
  93. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +15 -18
  94. package/src/generation/markers/actions/MarkerNodeActionSequence.js +6 -9
  95. package/src/generation/markers/actions/MarkerNodeProcessingRuleSet.js +5 -7
  96. package/src/generation/markers/actions/MarkerProcessingRule.js +25 -26
  97. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +12 -15
  98. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -5
  99. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +6 -9
  100. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +8 -11
  101. package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +13 -13
  102. package/src/generation/markers/actions/util/GridCellActionDebugBreak.js +5 -8
  103. package/src/generation/markers/actions/util/GridCellActionLogToConsole.js +1 -4
  104. package/src/generation/markers/emitter/MarkerNodeConsumerBuffer.js +10 -13
  105. package/src/generation/markers/emitter/MarkerNodeEmitterFromAction.js +5 -9
  106. package/src/generation/markers/emitter/MarkerNodeEmitterGridCellAction.js +12 -15
  107. package/src/generation/markers/emitter/MarkerNodeEmitterGroup.js +5 -8
  108. package/src/generation/markers/emitter/MarkerNodeEmitterPredicated.js +18 -21
  109. package/src/generation/markers/matcher/MarkerNodeMatcher.js +2 -1
  110. package/src/generation/markers/matcher/MarkerNodeMatcherBinary.js +12 -13
  111. package/src/generation/markers/matcher/MarkerNodeMatcherContainsTag.js +7 -9
  112. package/src/generation/markers/matcher/MarkerNodeMatcherNot.js +7 -9
  113. package/src/generation/markers/predicate/GridDataNodePredicateBinary.js +10 -14
  114. package/src/generation/markers/predicate/GridDataNodePredicateNot.js +9 -11
  115. package/src/generation/markers/predicate/GridDataNodePredicateOverlaps.js +6 -9
  116. package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +2 -6
  117. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +6 -9
  118. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -4
  119. package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +12 -15
  120. package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.js +14 -17
  121. package/src/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +21 -23
  122. package/src/generation/markers/transform/MarkerNodeTransformerRemoveTag.js +1 -4
  123. package/src/generation/markers/transform/MarkerNodeTransformerSequence.js +6 -9
  124. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +13 -17
  125. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +12 -16
  126. package/src/generation/placement/GridCellActionTransformNearbyMarkers.js +26 -29
  127. package/src/generation/placement/GridCellPlacementRule.js +30 -32
  128. package/src/generation/placement/action/GridCellActionPlaceTags.js +26 -28
  129. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +16 -20
  130. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +13 -16
  131. package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +11 -14
  132. package/src/generation/placement/action/util/CellMatcherWithinAABB.js +2 -6
  133. package/src/generation/placement/action/util/GridCellActionSequence.js +7 -9
  134. package/src/generation/placement/action/util/GridCellDisplacedAction.js +9 -12
  135. package/src/generation/rules/CellMatcherFromFilter.js +6 -9
  136. package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -9
  137. package/src/generation/rules/GridLayerCellMatcher.js +11 -14
  138. package/src/generation/rules/cell/CellMatcherContainsMarkerWithinRadius.js +11 -14
  139. package/src/generation/rules/cell/CellMatcherGridPattern.js +6 -8
  140. package/src/generation/rules/cell/GridPatternMatcherCell.js +11 -12
  141. package/src/generation/rules/logic/CellMatcherBinary.js +10 -14
  142. package/src/generation/rules/logic/CellMatcherDecorator.js +5 -8
  143. package/src/generation/theme/AreaMask.js +15 -17
  144. package/src/generation/theme/AreaTheme.js +7 -8
  145. package/src/generation/theme/TerrainLayerDescription.js +10 -12
  146. package/src/generation/theme/TerrainLayerRule.js +11 -13
  147. package/src/generation/theme/TerrainTheme.js +6 -7
  148. package/src/generation/theme/Theme.js +15 -17
  149. package/src/generation/theme/ThemeEngine.js +16 -18
  150. package/src/view/string_tag_to_css_class_name.js +2 -2
  151. package/src/view/tooltip/gml/TooltipParser.js +2 -2
  152. package/src/core/cache/PersistentCacheAdapter.js +0 -378
  153. package/src/core/primitives/strings/StringUtils.js +0 -105
  154. package/src/core/primitives/strings/StringUtils.spec.js +0 -42
  155. package/src/engine/ecs/components/MonsterAI.js +0 -15
  156. package/src/generation/markers/MarkerRelation.js +0 -13
@@ -2,6 +2,7 @@ import { EntityManager } from "./EntityManager.js";
2
2
  import { System, SystemState } from "./System.js";
3
3
  import { jest } from '@jest/globals';
4
4
  import { IllegalStateException } from "../../core/fsm/exceptions/IllegalStateException.js";
5
+ import { EntityComponentDataset } from "./EntityComponentDataset.js";
5
6
 
6
7
  /**
7
8
  *
@@ -21,15 +22,11 @@ function makeEm(systems = []) {
21
22
  });
22
23
  }
23
24
 
24
- function DummyComponent() {
25
+ class DummyComponent {
25
26
  }
26
27
 
27
28
  class DummySystem extends System {
28
- constructor() {
29
- super();
30
-
31
- this.dependencies = [DummyComponent];
32
- }
29
+ dependencies = [DummyComponent];
33
30
  }
34
31
 
35
32
  test("constructor doesn't throw", () => {
@@ -143,6 +140,19 @@ test("addSystem", async () => {
143
140
  expect(() => em.addSystem(new DummySystem())).toThrow(IllegalStateException);
144
141
  });
145
142
 
143
+ test("add system to running manager", async () => {
144
+
145
+ const em = new EntityManager();
146
+
147
+ await new Promise((resolve, reject) => em.startup(resolve, reject));
148
+
149
+ const system = new DummySystem();
150
+
151
+ await em.addSystem(system);
152
+
153
+ expect(em.hasSystem(DummySystem)).toBe(true);
154
+ });
155
+
146
156
  test("removeSystem", async () => {
147
157
 
148
158
  const system = new DummySystem();
@@ -158,3 +168,43 @@ test("removeSystem", async () => {
158
168
  // Try again, this time we expect nothing to happen
159
169
  expect(await em.removeSystem(system)).toEqual(false);
160
170
  });
171
+
172
+ test("attempt to detach dataset when none is attached", () => {
173
+ const manager = new EntityManager();
174
+
175
+ expect(() => manager.detachDataSet()).not.toThrow();
176
+
177
+ // do it second time, in case something changes in the above call
178
+ expect(() => manager.detachDataSet()).not.toThrow();
179
+ });
180
+
181
+ test("getComponentTypeMap with 1 system", async () => {
182
+
183
+ const em = await makeEm([
184
+ new DummySystem()
185
+ ]);
186
+
187
+ expect(em.getComponentTypeMap()).toEqual([DummyComponent]);
188
+ });
189
+
190
+ test("attempting to attach another dataset before detaching previous one should throw", () => {
191
+
192
+ const em = new EntityManager();
193
+
194
+ em.attachDataSet(new EntityComponentDataset());
195
+
196
+ expect(() => em.attachDataSet(new EntityComponentDataset())).toThrow();
197
+
198
+ });
199
+
200
+ test("attaching same dataset should succeed", () => {
201
+
202
+ const em = new EntityManager();
203
+
204
+ const ecd = new EntityComponentDataset();
205
+ em.attachDataSet(ecd);
206
+
207
+ em.attachDataSet(ecd); // second time
208
+
209
+ expect(em.dataset).toBe(ecd);
210
+ });
@@ -0,0 +1,22 @@
1
+ import { Animation } from "./Animation.js";
2
+ import { AnimationClip } from "./AnimationClip.js";
3
+
4
+ test("constructor does not throw", () => {
5
+ new Animation()
6
+ });
7
+
8
+ test("equality", () => {
9
+
10
+ const a = new Animation();
11
+ const b = new Animation();
12
+
13
+ expect(a.equals(b)).toBe(true);
14
+
15
+ a.clips.add(new AnimationClip());
16
+
17
+ expect(a.equals(b)).toBe(false);
18
+
19
+ b.clips.add(new AnimationClip());
20
+
21
+ expect(a.equals(b)).toBe(true);
22
+ });
@@ -1,31 +1,30 @@
1
1
  import { Transform } from "../transform/Transform.js";
2
2
 
3
3
  export class Attachment {
4
- constructor() {
5
- /**
6
- * Parent entity to which attachment is made
7
- * @type {number}
8
- */
9
- this.parent = -1;
10
-
11
- /**
12
- * Socket on the parent entity to which attachment is made
13
- * @type {String}
14
- */
15
- this.socket = null;
16
-
17
- /**
18
- *
19
- * @type {Transform}
20
- */
21
- this.transform = new Transform();
22
-
23
- /**
24
- *
25
- * @type {boolean}
26
- */
27
- this.immediate = false;
28
- }
4
+
5
+ /**
6
+ * Parent entity to which attachment is made
7
+ * @type {number}
8
+ */
9
+ parent = -1;
10
+
11
+ /**
12
+ * Socket on the parent entity to which attachment is made
13
+ * @type {String}
14
+ */
15
+ socket = null;
16
+
17
+ /**
18
+ *
19
+ * @type {Transform}
20
+ */
21
+ transform = new Transform();
22
+
23
+ /**
24
+ *
25
+ * @type {boolean}
26
+ */
27
+ immediate = false;
29
28
 
30
29
  fromJSON({ parent, socket, transform, immediate = false }) {
31
30
  this.parent = parent;
@@ -1,34 +1,31 @@
1
1
  export class AttachmentBinding {
2
- constructor() {
3
- this.attachedEntity = -1;
4
-
5
- /**
6
- *
7
- * @type {Transform}
8
- */
9
- this.attachedTransform = null;
10
-
11
-
12
- this.parentEntity = -1;
13
-
14
- /**
15
- *
16
- * @type {Transform}
17
- */
18
- this.parentTransform = null;
19
-
20
- /**
21
- *
22
- * @type {AttachmentSocket}
23
- */
24
- this.socket = null;
25
-
26
- /**
27
- *
28
- * @type {Attachment}
29
- */
30
- this.attachment = null;
31
- }
2
+ attachedEntity = -1;
3
+
4
+ /**
5
+ *
6
+ * @type {Transform}
7
+ */
8
+ attachedTransform = null;
9
+
10
+ parentEntity = -1;
11
+
12
+ /**
13
+ *
14
+ * @type {Transform}
15
+ */
16
+ parentTransform = null;
17
+
18
+ /**
19
+ *
20
+ * @type {AttachmentSocket}
21
+ */
22
+ socket = null;
23
+
24
+ /**
25
+ *
26
+ * @type {Attachment}
27
+ */
28
+ attachment = null;
32
29
 
33
30
  link() {
34
31
 
@@ -10,35 +10,32 @@ import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessS
10
10
  import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
11
11
 
12
12
  export class AttachmentSystem extends System {
13
- constructor() {
14
- super();
15
13
 
16
- this.dependencies = [Attachment, Transform];
14
+ dependencies = [Attachment, Transform];
17
15
 
18
- this.components_used = [
19
- ResourceAccessSpecification.from(AttachmentSockets, ResourceAccessKind.Read),
20
- ResourceAccessSpecification.from(Mesh, ResourceAccessKind.Read),
21
- ResourceAccessSpecification.from(Transform, ResourceAccessKind.Write)
22
- ];
16
+ components_used = [
17
+ ResourceAccessSpecification.from(AttachmentSockets, ResourceAccessKind.Read),
18
+ ResourceAccessSpecification.from(Mesh, ResourceAccessKind.Read),
19
+ ResourceAccessSpecification.from(Transform, ResourceAccessKind.Write)
20
+ ];
23
21
 
24
- /**
25
- *
26
- * @type {number[]}
27
- */
28
- this.waiting = [];
22
+ /**
23
+ *
24
+ * @type {number[]}
25
+ */
26
+ waiting = [];
29
27
 
30
- /**
31
- *
32
- * @type {Map<number,AttachmentBinding>}
33
- */
34
- this.bindings = new Map();
28
+ /**
29
+ *
30
+ * @type {Map<number,AttachmentBinding>}
31
+ */
32
+ bindings = new Map();
35
33
 
36
- /**
37
- *
38
- * @type {Map<number, AttachmentBinding[]>}
39
- */
40
- this.parentBindingIndex = new Map();
41
- }
34
+ /**
35
+ *
36
+ * @type {Map<number, AttachmentBinding[]>}
37
+ */
38
+ parentBindingIndex = new Map();
42
39
 
43
40
 
44
41
  /**
@@ -12,15 +12,12 @@ const pPosition = new Vector3();
12
12
  const attachmentM4 = new Matrix4();
13
13
 
14
14
  export class BoneAttachmentBinding extends AttachmentBinding {
15
- constructor() {
16
- super();
17
-
18
- /**
19
- *
20
- * @type {Bone}
21
- */
22
- this.bone = null;
23
- }
15
+
16
+ /**
17
+ *
18
+ * @type {Bone}
19
+ */
20
+ bone = null;
24
21
 
25
22
  update() {
26
23
  const socketTransform = this.socket.transform;
@@ -6,9 +6,6 @@ const scratch_m4_1 = new Float32Array(16);
6
6
  const scratch_m4_2 = new Float32Array(16);
7
7
 
8
8
  export class TransformAttachmentBinding extends AttachmentBinding {
9
- constructor() {
10
- super();
11
- }
12
9
 
13
10
  /**
14
11
  * TODO make use of Transform.multiplyTransforms for better readability and performance
@@ -1,25 +1,31 @@
1
1
  /**
2
- * User: Alex Goldring
3
- * Date: 7/4/2014
4
- * Time: 09:04
2
+ * FPS-style character controller
3
+ * @author Alex Goldring
4
+ * @copyright Alex Goldring 7/4/2014
5
5
  */
6
-
7
-
8
- function CharacterController(options) {
9
- this.height = 4;
10
- this.onSolidSurface = false;
11
- this.lockedTimeout = 0;
6
+ class CharacterController {
7
+ height = 4;
8
+ onSolidSurface = false;
9
+ lockedTimeout = 0;
12
10
  //
13
- this.forward = false;
14
- this.back = false;
15
- this.left = false;
16
- this.right = false;
17
- this.sprinting = false;
18
- this.attacking = false;
19
- this.aim = null;
11
+ forward = false;
12
+ back = false;
13
+ left = false;
14
+ right = false;
15
+ sprinting = false;
16
+ attacking = false;
17
+ aim = null;
20
18
  //
21
- this.movementSpeed = options.movementSpeed || 0;
22
- this.sprintingMultiplier = options.sprintingMultiplier || 1;
19
+ movementSpeed = 1;
20
+ sprintingMultiplier = 1;
21
+
22
+ constructor({
23
+ movementSpeed = 1,
24
+ sprintingMultiplier = 1.2
25
+ } = {}) {
26
+ this.movementSpeed = movementSpeed;
27
+ this.sprintingMultiplier = sprintingMultiplier;
28
+ }
23
29
  }
24
30
 
25
31
  export default CharacterController;
@@ -3,7 +3,7 @@ import { AbstractContextSystem } from "../system/AbstractContextSystem.js";
3
3
  import { SystemEntityContext } from "../system/SystemEntityContext.js";
4
4
  import { DataScope } from "../../../../../model/game/unit/actions/data/DataScope.js";
5
5
  import { Blackboard } from "../../intelligence/blackboard/Blackboard.js";
6
- import { compareNumbersDescending, returnTrue } from "../../../core/function/Functions.js";
6
+ import { returnTrue } from "../../../core/function/Functions.js";
7
7
  import { EntityProxyScope } from "../binding/EntityProxyScope.js";
8
8
  import EntityBuilder from "../EntityBuilder.js";
9
9
  import { BehaviorComponent } from "../../intelligence/behavior/ecs/BehaviorComponent.js";
@@ -23,6 +23,7 @@ import { randomMultipleFromArray } from "../../../core/collection/array/randomMu
23
23
  import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
24
24
  import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
25
25
  import { EntityBuilderFlags } from "../EntityBuilderFlags.js";
26
+ import { number_compare_descending } from "../../../core/primitives/numbers/number_compare_descending.js";
26
27
 
27
28
  /**
28
29
  * In seconds
@@ -503,7 +504,7 @@ export class DynamicActorSystem extends AbstractContextSystem {
503
504
 
504
505
  }
505
506
 
506
- scores.sort(compareNumbersDescending);
507
+ scores.sort(number_compare_descending);
507
508
 
508
509
  for (let i = 0; i < scores.length && result.length < count; i++) {
509
510
  const score = scores[i];
@@ -1,9 +1,8 @@
1
1
  import Vector1 from "../../../core/geom/Vector1.js";
2
2
 
3
3
  export class FogOfWarRevealer {
4
- constructor() {
5
- this.radius = new Vector1(1);
6
- }
4
+
5
+ radius = new Vector1(1);
7
6
 
8
7
  toJSON() {
9
8
  return {
@@ -9,7 +9,12 @@
9
9
  * @param {number} directionY
10
10
  * @param {number} directionZ
11
11
  */
12
- export function v3_computeOffsetVector(result, distance, sourceX, sourceY, sourceZ, directionX, directionY, directionZ) {
12
+ export function v3_computeOffsetVector(
13
+ result,
14
+ distance,
15
+ sourceX, sourceY, sourceZ,
16
+ directionX, directionY, directionZ
17
+ ) {
13
18
  if (distance === 0) {
14
19
  result.set(sourceX, sourceY, sourceZ);
15
20
  return;
@@ -2,23 +2,23 @@ import { ObjectPoolFactory } from "../../../core/model/object/ObjectPoolFactory.
2
2
  import { noop } from "../../../core/function/Functions.js";
3
3
 
4
4
  export class IKProblem {
5
- constructor() {
6
- /**
7
- *
8
- * @type {IKConstraint}
9
- */
10
- this.constraint = null;
11
- /**
12
- *
13
- * @type {Skeleton}
14
- */
15
- this.skeleton = null;
16
- /**
17
- *
18
- * @type {Terrain}
19
- */
20
- this.terrain = null;
21
- }
5
+
6
+ /**
7
+ *
8
+ * @type {IKConstraint}
9
+ */
10
+ constraint = null;
11
+ /**
12
+ *
13
+ * @type {Skeleton}
14
+ */
15
+ skeleton = null;
16
+ /**
17
+ *
18
+ * @type {Terrain}
19
+ */
20
+ terrain = null;
21
+
22
22
  }
23
23
 
24
24
  /**
@@ -2,13 +2,12 @@ import { IKConstraint } from "./IKConstraint.js";
2
2
 
3
3
 
4
4
  export class InverseKinematics {
5
- constructor() {
6
- /**
7
- *
8
- * @type {IKConstraint[]}
9
- */
10
- this.constraints = [];
11
- }
5
+
6
+ /**
7
+ * @readonly
8
+ * @type {IKConstraint[]}
9
+ */
10
+ constraints = [];
12
11
 
13
12
  /**
14
13
  *
@@ -11,32 +11,30 @@ import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
11
11
 
12
12
 
13
13
  export class InverseKinematicsSystem extends System {
14
- constructor() {
15
- super();
16
-
17
- this.dependencies = [InverseKinematics, Mesh];
18
-
19
- this.components_used = [
20
- ResourceAccessSpecification.from(Mesh,ResourceAccessKind.Read|ResourceAccessSpecification.Write)
21
- ];
22
-
23
- /**
24
- *
25
- * @type {{"2BIK": TwoBoneInverseKinematicsSolver}}
26
- */
27
- this.solvers = {
28
- "2BIK": new TwoBoneInverseKinematicsSolver(),
29
- "1BSA": new OneBoneSurfaceAlignmentSolver()
30
- };
31
-
32
- this.problems = {};
33
-
34
- /**
35
- *
36
- * @type {Terrain}
37
- */
38
- this.__terrain = null;
39
- }
14
+
15
+ dependencies = [InverseKinematics, Mesh];
16
+
17
+ components_used = [
18
+ ResourceAccessSpecification.from(Mesh, ResourceAccessKind.Read | ResourceAccessSpecification.Write)
19
+ ];
20
+
21
+ /**
22
+ *
23
+ * @type {{"2BIK": TwoBoneInverseKinematicsSolver}}
24
+ */
25
+ solvers = {
26
+ "2BIK": new TwoBoneInverseKinematicsSolver(),
27
+ "1BSA": new OneBoneSurfaceAlignmentSolver()
28
+ };
29
+
30
+ problems = {};
31
+
32
+ /**
33
+ *
34
+ * @type {Terrain}
35
+ */
36
+ __terrain = null;
37
+
40
38
 
41
39
  get componentClass() {
42
40
  return InverseKinematics;
@@ -2,9 +2,9 @@ import { SerializationFlags, SerializationMetadata } from "../components/Seriali
2
2
  import { assert } from "../../../core/assert.js";
3
3
  import { BinaryCollectionSerializer } from "./binary/collection/BinaryCollectionSerializer.js";
4
4
  import { COMPONENT_SERIALIZATION_TRANSIENT_FIELD } from "./COMPONENT_SERIALIZATION_TRANSIENT_FIELD.js";
5
- import { currentTimeInSeconds } from "../../Clock.js";
6
5
  import { BinaryObjectSerializationAdapter } from "./binary/object/BinaryObjectSerializationAdapter.js";
7
6
  import { logger } from "../../logging/GlobalLogger.js";
7
+ import { current_time_in_seconds } from "../../../core/time/current_time_in_seconds.js";
8
8
 
9
9
  /**
10
10
  * @template T
@@ -136,7 +136,7 @@ class BinaryBufferSerializer {
136
136
  continue;
137
137
  }
138
138
 
139
- const __start_time = currentTimeInSeconds();
139
+ const __start_time = current_time_in_seconds();
140
140
 
141
141
  let lastEntity = 0;
142
142
 
@@ -158,7 +158,7 @@ class BinaryBufferSerializer {
158
158
 
159
159
  const numComponentsWritten = collectionSerializer.getElementCount();
160
160
 
161
- const __end_time = currentTimeInSeconds();
161
+ const __end_time = current_time_in_seconds();
162
162
 
163
163
  collectionSerializer.finalize();
164
164
 
@@ -6,13 +6,8 @@ import Tag from '../components/Tag.js';
6
6
 
7
7
 
8
8
  class TagSystem extends System {
9
- constructor() {
10
- super();
11
9
 
12
- this.dependencies = [Tag];
13
-
14
- this.entityManager = null;
15
- }
10
+ dependencies = [Tag];
16
11
 
17
12
  /**
18
13
  *
@@ -2,10 +2,10 @@ import Vector2 from "../../../../../core/geom/Vector2.js";
2
2
  import { GameAssetType } from "../../../../asset/GameAssetType.js";
3
3
  import { Sampler2D } from "../../../../graphics/texture/sampler/Sampler2D.js";
4
4
  import { Cache } from "../../../../../core/cache/Cache.js";
5
- import { computeUTF8StringByteSize } from "../../../../../core/primitives/strings/StringUtils.js";
6
5
  import Signal from "../../../../../core/events/signal/Signal.js";
7
6
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
8
7
  import { copy_Sampler2D_channel_data } from "../../../../graphics/texture/sampler/copy_Sampler2D_channel_data.js";
8
+ import { string_compute_byte_size } from "../../../../../core/primitives/strings/string_compute_byte_size.js";
9
9
 
10
10
  /**
11
11
  *
@@ -14,7 +14,7 @@ import { copy_Sampler2D_channel_data } from "../../../../graphics/texture/sample
14
14
  const cache = new Cache({
15
15
  maxWeight: 304857600,
16
16
  keyHashFunction: computeStringHash,
17
- keyWeigher: computeUTF8StringByteSize,
17
+ keyWeigher: string_compute_byte_size,
18
18
  /**
19
19
  *
20
20
  * @param {Sampler2D} sampler
@@ -1,7 +1,7 @@
1
- import { computeCommonPrefix } from "../../../../../core/primitives/strings/StringUtils.js";
2
1
  import { HumanoidBoneType } from "./HumanoidBoneType.js";
3
2
  import { distance as levenshtein_distance } from "fastest-levenshtein";
4
3
  import { assert } from "../../../../../core/assert.js";
4
+ import { string_compute_common_prefix } from "../../../../../core/primitives/strings/string_compute_common_prefix.js";
5
5
 
6
6
 
7
7
  /**
@@ -25,7 +25,7 @@ export class BoneMapping {
25
25
  */
26
26
  build(names) {
27
27
  //strip common prefix
28
- const commonPrefix = computeCommonPrefix(names);
28
+ const commonPrefix = string_compute_common_prefix(names);
29
29
  const commonPrefixLength = commonPrefix.length;
30
30
 
31
31
  const conditionedNames = names.map(function (name) {
@@ -1,5 +1,19 @@
1
1
  import { ShadedGeometry } from "./ShadedGeometry.js";
2
+ import { BufferGeometry, MeshBasicMaterial } from "three";
2
3
 
3
4
  test("constructor does not throw", () => {
4
5
  expect(() => new ShadedGeometry()).not.toThrow()
5
6
  });
7
+
8
+ test("hash", () => {
9
+ const mesh = new ShadedGeometry();
10
+
11
+ mesh.geometry = new BufferGeometry();
12
+ mesh.material = new MeshBasicMaterial();
13
+
14
+ const hash = mesh.hash();
15
+
16
+ expect(typeof hash).toBe("number")
17
+ expect(Number.isInteger(hash)).toBe(true);
18
+ expect(mesh.hash()).toEqual(hash);
19
+ });