@woosh/meep-engine 2.54.0 → 2.55.0

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 (139) hide show
  1. package/package.json +1 -1
  2. package/src/core/__module.js +1 -1
  3. package/src/core/cache/Cache.js +1 -1
  4. package/src/core/collection/Stack.js +11 -14
  5. package/src/core/collection/array/array_contains_duplicates.js +5 -2
  6. package/src/core/collection/array/array_contains_duplicates.spec.js +14 -0
  7. package/src/core/collection/array/array_copy_entire.js +6 -11
  8. package/src/core/collection/array/array_get_index_in_range.js +5 -0
  9. package/src/core/collection/array/array_get_index_in_range.spec.js +16 -0
  10. package/src/core/collection/array/groupArrayBy.js +1 -1
  11. package/src/core/collection/array/isArrayEqual.js +4 -1
  12. package/src/core/collection/array/randomizeArrayElementOrder.js +1 -0
  13. package/src/core/collection/array/randomizeArrayElementOrder.spec.js +27 -0
  14. package/src/core/collection/heap/Uin32Heap.spec.js +64 -0
  15. package/src/core/collection/heap/Uint32Heap.js +6 -2
  16. package/src/core/collection/list/List.js +1 -0
  17. package/src/core/collection/{HashMap.js → map/HashMap.js} +10 -10
  18. package/src/core/collection/{HashMap.spec.js → map/HashMap.spec.js} +1 -1
  19. package/src/core/collection/{ObservedMap.js → map/ObservedMap.js} +1 -1
  20. package/src/core/collection/{HashSet.js → set/HashSet.js} +4 -3
  21. package/src/core/collection/{Set.d.ts → set/Set.d.ts} +1 -1
  22. package/src/core/collection/{Set.js → set/Set.js} +17 -14
  23. package/src/core/geom/2d/aabb/AABB2.js +1 -1
  24. package/src/core/geom/3d/aabb/AABB3.js +3 -1
  25. package/src/core/geom/3d/topology/struct/binary/io/bt_mesh_calc_edges.js +1 -1
  26. package/src/core/model/ObservedInteger.js +12 -7
  27. package/src/core/model/ObservedString.js +10 -8
  28. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +1 -1
  29. package/src/core/model/object/ImmutableObjectPool.js +1 -1
  30. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.js +1 -1
  31. package/src/engine/asset/AssetManager.js +3 -3
  32. package/src/engine/asset/loaders/GLTFAssetLoader.js +1 -1
  33. package/src/engine/ecs/EntityBlueprint.js +8 -10
  34. package/src/engine/ecs/animation/AnimationSerializationAdapter.js +2 -5
  35. package/src/engine/ecs/components/Motion.js +0 -27
  36. package/src/engine/ecs/components/MotionSerializationAdapter.js +26 -0
  37. package/src/engine/ecs/components/PropertySet.js +0 -29
  38. package/src/engine/ecs/components/PropertySetSerializationAdapter.js +29 -0
  39. package/src/engine/ecs/components/SerializationMetadata.js +0 -28
  40. package/src/engine/ecs/components/SerializationMetadataSerializationAdapter.js +26 -0
  41. package/src/engine/ecs/components/Steering.js +0 -35
  42. package/src/engine/ecs/components/SteeringSerializationAdapter.js +34 -0
  43. package/src/engine/ecs/components/Tag.js +6 -102
  44. package/src/engine/ecs/components/TagSerializationAdapter.js +44 -0
  45. package/src/engine/ecs/components/TagSerializationUpgrader_0_1.js +18 -0
  46. package/src/engine/ecs/components/Timer.js +1 -1
  47. package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +1 -1
  48. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleCooldownDescription.js +10 -14
  49. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +31 -39
  50. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -1
  51. package/src/engine/ecs/dynamic_actions/{DynamicRuleDescriptionTable.spec.js → rules/DynamicRuleDescriptionTable.spec.js} +12 -12
  52. package/src/engine/ecs/foliage/ecs/InstancedMeshSerializationAdapter.js +2 -5
  53. package/src/engine/ecs/fow/serialization/FogOfWarRevealerSerializationAdapter.js +2 -5
  54. package/src/engine/ecs/fow/serialization/FogOfWarSerializationAdapter.js +5 -8
  55. package/src/engine/ecs/gui/GUIElementSerializationAdapter.js +2 -5
  56. package/src/engine/ecs/gui/hud/HeadsUpDisplaySerializationAdapter.js +3 -6
  57. package/src/engine/ecs/gui/position/ViewportPosition.js +2 -5
  58. package/src/engine/ecs/ik/IKConstraint.js +95 -0
  59. package/src/engine/ecs/ik/InverseKinematics.js +10 -169
  60. package/src/engine/ecs/ik/InverseKinematicsSerializationAdapter.js +72 -0
  61. package/src/engine/ecs/speaker/Voice.js +5 -8
  62. package/src/engine/ecs/speaker/VoiceSystem.js +15 -19
  63. package/src/engine/ecs/speaker/lines/LineDescription.js +20 -25
  64. package/src/engine/ecs/speaker/lines/sets/LineSetDescription.js +15 -19
  65. package/src/engine/ecs/storage/binary/BinaryClassSerializationAdapter.js +7 -0
  66. package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerializer.js +1 -1
  67. package/src/engine/ecs/storage/binary/object/ObjectBasedClassSerializationAdapter.js +6 -9
  68. package/src/engine/ecs/team/TeamSerializationAdapter.js +2 -5
  69. package/src/engine/ecs/terrain/ecs/Terrain.spec.js +5 -0
  70. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrain.js +23 -21
  71. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSerializationAdapter.js +2 -5
  72. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +2 -40
  73. package/src/engine/ecs/terrain/serialization/TerrainSerializationAdapter.js +7 -10
  74. package/src/engine/ecs/tooltip/TooltipComponent.spec.js +47 -0
  75. package/src/engine/ecs/tooltip/TooltipComponentSerializationAdapter.js +2 -5
  76. package/src/engine/ecs/transform/Transform.spec.js +52 -0
  77. package/src/engine/ecs/transform/TransformSerializationAdapter.js +2 -5
  78. package/src/engine/ecs/transform-attachment/TransformAttachment.js +18 -19
  79. package/src/engine/graphics/ecs/animation/AnimationController.js +20 -129
  80. package/src/engine/graphics/ecs/animation/AnimationControllerSerializationAdapter.js +27 -0
  81. package/src/engine/graphics/ecs/animation/AnimationRule.js +79 -0
  82. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraphSerializationAdapter.js +9 -11
  83. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionSerializationAdapter.js +3 -5
  84. package/src/engine/graphics/ecs/camera/serialization/CameraSerializationAdapter.js +2 -5
  85. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSerializationAdapter.js +2 -6
  86. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraLander.js +3 -15
  87. package/src/engine/graphics/ecs/decal/v2/DecalSerializationAdapter.js +2 -4
  88. package/src/engine/graphics/ecs/highlight/HighlightSerializationAdapter.js +2 -5
  89. package/src/engine/graphics/ecs/highlight/renderer/OutlineRenderer.js +1 -1
  90. package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +2 -5
  91. package/src/engine/graphics/ecs/mesh/serialization/MeshSerializationAdapter.js +2 -5
  92. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +3 -0
  93. package/src/engine/graphics/ecs/mesh-v2/render/adapters/InstancedRendererAdapter.js +1 -1
  94. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +2 -5
  95. package/src/engine/graphics/geometry/optimization/merge/merge_geometry_hierarchy.js +1 -1
  96. package/src/engine/graphics/impostors/octahedral/ImpostorBaker.js +1 -1
  97. package/src/engine/graphics/material/manager/MaterialManager.js +1 -1
  98. package/src/engine/graphics/material/optimization/MaterialOptimizationContext.js +1 -1
  99. package/src/engine/graphics/particles/node-based/codegen/CodeContext.js +1 -1
  100. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +2 -5
  101. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +2 -5
  102. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +1 -1
  103. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +1 -1
  104. package/src/engine/graphics/texture/sampler/serialization/Sampler2DSerializationAdapter.js +2 -5
  105. package/src/engine/grid/grid2transform/GridPosition2Transform.js +11 -13
  106. package/src/engine/grid/grid2transform/GridPosition2TransformSerializationAdapter.js +3 -5
  107. package/src/engine/grid/obstacle/GridObstacleSerializationAdapter.js +2 -5
  108. package/src/engine/grid/position/GridPositionSerializationAdapter.js +2 -5
  109. package/src/engine/grid/transform2grid/Transform2GridPosition.js +10 -13
  110. package/src/engine/input/devices/KeyboardDevice.js +5 -2
  111. package/src/engine/input/devices/KeyboardDevice.spec.js +12 -0
  112. package/src/engine/input/devices/PointerDevice.js +5 -1
  113. package/src/engine/input/ecs/components/Input.js +37 -11
  114. package/src/engine/input/ecs/ism/InputBinding.js +30 -12
  115. package/src/engine/intelligence/behavior/ecs/BehaviorComponentSerializationAdapter.js +7 -10
  116. package/src/engine/intelligence/behavior/ecs/WaitForEventBehaviorSerializationAdapter.js +2 -5
  117. package/src/engine/intelligence/behavior/primitive/FailingBehaviorSerializationAdapter.js +2 -6
  118. package/src/engine/intelligence/behavior/primitive/SucceedingBehaviorSerializationAdapter.js +2 -5
  119. package/src/engine/intelligence/blackboard/BlackboardSerializationAdapter.js +2 -5
  120. package/src/engine/knowledge/database/StaticKnowledgeDatabase.js +12 -13
  121. package/src/engine/knowledge/database/StaticKnowledgeDatabase.spec.js +23 -0
  122. package/src/engine/navigation/ecs/components/PathSerializationAdapter.js +2 -5
  123. package/src/engine/navigation/ecs/path_following/PathFollowerSerializationAdapter.js +2 -5
  124. package/src/engine/navigation/grid/find_path_on_grid_astar.spec.js +25 -0
  125. package/src/engine/options/OptionAbstract.js +6 -5
  126. package/src/engine/options/OptionGroup.js +13 -25
  127. package/src/engine/options/OptionGroup.spec.js +61 -0
  128. package/src/engine/save/storage/InMemoryStorage.js +3 -2
  129. package/src/engine/sound/ecs/SoundController.js +2 -6
  130. package/src/engine/sound/ecs/SoundListener.js +3 -21
  131. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.js +2 -6
  132. package/src/generation/theme/ThemeEngine.js +1 -1
  133. package/src/core/collection/LazyStream.js +0 -23
  134. package/src/core/collection/LazyStream.spec.js +0 -13
  135. package/src/core/collection/heap/BinaryHeap.js +0 -153
  136. package/src/engine/ecs/components/GeometryBVH.js +0 -44
  137. package/src/engine/ecs/systems/GeometryBVHSystem.js +0 -36
  138. /package/src/core/collection/{HashMap.d.ts → map/HashMap.d.ts} +0 -0
  139. /package/src/core/collection/{HashSet.d.ts → set/HashSet.d.ts} +0 -0
@@ -2,12 +2,9 @@ import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSe
2
2
  import Team from "./Team.js";
3
3
 
4
4
  export class TeamSerializationAdapter extends BinaryClassSerializationAdapter {
5
- constructor() {
6
- super();
7
5
 
8
- this.klass = Team;
9
- this.version = 0;
10
- }
6
+ klass = Team;
7
+ version = 0;
11
8
 
12
9
  /**
13
10
  *
@@ -0,0 +1,5 @@
1
+ import Terrain from "./Terrain.js";
2
+
3
+ test("constructor does not throw", () => {
4
+ new Terrain();
5
+ });
@@ -5,28 +5,30 @@ import Vector3 from "../../../../../core/geom/Vector3.js";
5
5
  import Quaternion from "../../../../../core/geom/Quaternion.js";
6
6
 
7
7
  class ClingToTerrain {
8
- constructor({ normalAlign = false } = {}) {
9
- /**
10
- * @type {boolean}
11
- */
12
- this.normalAlign = normalAlign;
13
-
14
- /**
15
- * Used internally for caching updates
16
- * @type {Vector3}
17
- */
18
- this.__lastPosition = new Vector3(0, 0, 0);
19
- /**
20
- *
21
- * @type {Quaternion}
22
- */
23
- this.__lastRotation = new Quaternion(0, 0, 0, 1);
8
+ /**
9
+ * @type {boolean}
10
+ */
11
+ normalAlign = false;
12
+ /**
13
+ * Used internally for caching updates
14
+ * @type {Vector3}
15
+ */
16
+ __lastPosition=new Vector3(0, 0, 0);
17
+ /**
18
+ *
19
+ * @type {Quaternion}
20
+ */
21
+ __lastRotation=new Quaternion(0, 0, 0, 1);
22
+ /**
23
+ * Speed in Rad/s (Radians/second) by which rotation can change
24
+ * @type {number}
25
+ */
26
+ rotationSpeed = 3;
24
27
 
25
- /**
26
- * Speed in Rad/s (Radians/second) by which rotation can change
27
- * @type {number}
28
- */
29
- this.rotationSpeed = 3;
28
+ constructor(opt) {
29
+ if(opt !== undefined){
30
+ throw new Error("constructor options deprecated");
31
+ }
30
32
  }
31
33
 
32
34
  toJSON() {
@@ -2,12 +2,9 @@ import { BinaryClassSerializationAdapter } from "../../../storage/binary/BinaryC
2
2
  import ClingToTerrain from "./ClingToTerrain.js";
3
3
 
4
4
  export class ClingToTerrainSerializationAdapter extends BinaryClassSerializationAdapter {
5
- constructor() {
6
- super();
7
5
 
8
- this.klass = ClingToTerrain;
9
- this.version = 0;
10
- }
6
+ klass = ClingToTerrain;
7
+ version = 0;
11
8
 
12
9
  /**
13
10
  *
@@ -19,18 +19,15 @@ import { Sampler2D } from "../../../../graphics/texture/sampler/Sampler2D.js";
19
19
  import { sampler2d_scale } from "../../../../graphics/texture/sampler/resize/sampler2d_scale.js";
20
20
  import List from "../../../../../core/collection/list/List.js";
21
21
  import { Cache } from "../../../../../core/cache/Cache.js";
22
- import { BinaryClassSerializationAdapter } from "../../../storage/binary/BinaryClassSerializationAdapter.js";
23
22
  import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
24
23
  import { invokeObjectEquals } from "../../../../../core/model/object/invokeObjectEquals.js";
25
24
  import { invokeObjectHash } from "../../../../../core/model/object/invokeObjectHash.js";
26
25
  import { typed_array_copy } from "../../../../../core/collection/array/typed/typed_array_copy.js";
27
26
 
28
27
  class ScaledTextureKey {
29
- constructor() {
30
- this.uri = '';
28
+ uri = '';
31
29
 
32
- this.size = new Vector2();
33
- }
30
+ size = new Vector2();
34
31
 
35
32
  /**
36
33
  *
@@ -58,41 +55,6 @@ class ScaledTextureKey {
58
55
  }
59
56
  }
60
57
 
61
- class ScaledTextureKeySerializationAdapter extends BinaryClassSerializationAdapter {
62
- constructor() {
63
- super();
64
- this.klass = ScaledTextureKey;
65
- this.version = 0;
66
- }
67
-
68
- /**
69
- *
70
- * @param {BinaryBuffer} buffer
71
- * @param {ScaledTextureKey} value
72
- */
73
- serialize(buffer, value) {
74
- // serialize uri
75
- buffer.writeUTF8String(value.uri);
76
- // serialize size
77
- buffer.writeFloat64(value.size.x);
78
- buffer.writeFloat64(value.size.y);
79
- }
80
-
81
- /**
82
- *
83
- * @param {BinaryBuffer} buffer
84
- * @param {ScaledTextureKey} value
85
- */
86
- deserialize(buffer, value) {
87
- value.uri = buffer.readUTF8String();
88
-
89
- const size_x = buffer.readFloat64();
90
- const size_y = buffer.readFloat64();
91
-
92
- value.size.set(size_x, size_y);
93
- }
94
- }
95
-
96
58
  /**
97
59
  *
98
60
  * @type {Cache<ScaledTextureKey,Sampler2D>}
@@ -7,18 +7,15 @@ import { objectKeyByValue } from "../../../../core/model/object/objectKeyByValue
7
7
  import { TerrainFlags } from "../ecs/TerrainFlags.js";
8
8
 
9
9
  export class TerrainSerializationAdapter extends BinaryClassSerializationAdapter {
10
- constructor() {
11
- super();
12
10
 
13
- this.klass = Terrain;
14
- this.version = 2;
11
+ klass = Terrain;
12
+ version = 2;
15
13
 
16
- /**
17
- *
18
- * @type {TerrainSystem}
19
- */
20
- this.system = null;
21
- }
14
+ /**
15
+ *
16
+ * @type {TerrainSystem}
17
+ */
18
+ system = null;
22
19
 
23
20
  initialize(system) {
24
21
  this.system = system;
@@ -0,0 +1,47 @@
1
+ import { TooltipComponent } from "./TooltipComponent.js";
2
+
3
+ test("constructor does not throw", () => {
4
+ new TooltipComponent()
5
+ });
6
+
7
+ test("to/from JSON", () => {
8
+
9
+ const source = new TooltipComponent();
10
+
11
+ source.key = "x";
12
+
13
+ const destination = new TooltipComponent();
14
+
15
+ destination.fromJSON(source.toJSON());
16
+
17
+ expect(destination.equals(source)).toBe(true);
18
+ });
19
+
20
+ test("equals", () => {
21
+
22
+ const a = new TooltipComponent();
23
+
24
+ a.key = "x";
25
+
26
+ const b = new TooltipComponent();
27
+
28
+ b.key = "a";
29
+
30
+ expect(a.equals(b)).toBe(false);
31
+
32
+ b.key = "x";
33
+
34
+ expect(a.equals(b)).toBe(true);
35
+ });
36
+
37
+ test("hash", () => {
38
+ const tip = new TooltipComponent();
39
+
40
+ tip.key = "x";
41
+
42
+ const hash = tip.hash();
43
+
44
+ expect(tip.hash()).toEqual(hash);
45
+ expect(typeof hash).toEqual("number");
46
+ expect(Number.isInteger(hash)).toBe(true);
47
+ });
@@ -2,12 +2,9 @@ import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSe
2
2
  import { TooltipComponent } from "./TooltipComponent.js";
3
3
 
4
4
  export class TooltipComponentSerializationAdapter extends BinaryClassSerializationAdapter {
5
- constructor() {
6
- super();
7
5
 
8
- this.klass = TooltipComponent;
9
- this.version = 0;
10
- }
6
+ klass = TooltipComponent;
7
+ version = 0;
11
8
 
12
9
  /**
13
10
  *
@@ -173,3 +173,55 @@ test("hash", () => {
173
173
  expect(t.hash()).toEqual(hash);
174
174
 
175
175
  });
176
+
177
+ test("multiplyTransforms with identities", () => {
178
+
179
+ const result = new Transform();
180
+
181
+ const a = new Transform();
182
+ a.makeIdentity();
183
+
184
+ const b = new Transform();
185
+ b.makeIdentity();
186
+
187
+ result.multiplyTransforms(a, b);
188
+
189
+ expect(result.position.equals(Vector3.zero)).toBe(true);
190
+ expect(result.scale.equals(Vector3.one)).toBe(true);
191
+ expect(result.rotation.equals(Quaternion.identity)).toBe(true);
192
+ });
193
+
194
+ test("copy", () => {
195
+ const source = new Transform();
196
+
197
+ source.position.set(1, 3, 7);
198
+ source.scale.set(11, 13, 17);
199
+ source.rotation.set(23, 27, 31, 37);
200
+
201
+ const destination = new Transform();
202
+
203
+ destination.copy(source);
204
+
205
+ expect(destination.equals(source)).toBe(true);
206
+ });
207
+
208
+ test("lookAt", () => {
209
+ const t = new Transform();
210
+ const original = t.clone();
211
+
212
+ const target = new Vector3(7, 13, -17);
213
+
214
+ t.lookAt(target);
215
+
216
+ expect(t.position.equals(original.position)).toBe(true);
217
+ expect(t.scale.equals(original.scale)).toBe(true);
218
+
219
+ const direction = new Vector3(0, 0, 1);
220
+
221
+ direction.applyQuaternion(t.rotation);
222
+
223
+ const expected_direction = target.clone();
224
+ expected_direction.normalize();
225
+
226
+ expect(direction.roughlyEquals(expected_direction)).toBe(true);
227
+ });
@@ -2,12 +2,9 @@ import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSe
2
2
  import { Transform } from "./Transform.js";
3
3
 
4
4
  export class TransformSerializationAdapter extends BinaryClassSerializationAdapter {
5
- constructor() {
6
- super();
7
5
 
8
- this.klass = Transform;
9
- this.version = 1;
10
- }
6
+ klass = Transform;
7
+ version = 1;
11
8
 
12
9
  /**
13
10
  *
@@ -12,25 +12,24 @@ export const TransformAttachmentFlags = {
12
12
  const DEFAULT_FLAGS = TransformAttachmentFlags.Immediate;
13
13
 
14
14
  export class TransformAttachment {
15
- constructor() {
16
- /**
17
- * transform relative to the attachment target
18
- * @type {Transform}
19
- */
20
- this.transform = new Transform();
21
-
22
- /**
23
- * Which entity to attach to
24
- * @type {number}
25
- */
26
- this.parent = -1;
27
-
28
- /**
29
- *
30
- * @type {number}
31
- */
32
- this.flags = DEFAULT_FLAGS;
33
- }
15
+
16
+ /**
17
+ * transform relative to the attachment target
18
+ * @type {Transform}
19
+ */
20
+ transform = new Transform();
21
+
22
+ /**
23
+ * Which entity to attach to
24
+ * @type {number}
25
+ */
26
+ parent = -1;
27
+
28
+ /**
29
+ *
30
+ * @type {number}
31
+ */
32
+ flags = DEFAULT_FLAGS;
34
33
 
35
34
  toString() {
36
35
  return JSON.stringify(this.toJSON());
@@ -4,149 +4,40 @@
4
4
 
5
5
 
6
6
  import List from '../../../../core/collection/list/List.js';
7
- import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
7
+ import { AnimationRule } from "./AnimationRule.js";
8
8
 
9
- function AnimationRule(startEvent, animationName, speed, transitionTime, loop = false) {
10
- this.startEvent = startEvent;
11
- this.stopEvent = null;
12
- this.animation = animationName;
13
- this.speed = speed;
14
- this.transition = transitionTime;
15
- this.weight = 1;
16
- this.loop = loop;
17
- }
18
-
19
- AnimationRule.prototype.toJSON = function () {
20
- return {
21
- startEvent: this.startEvent,
22
- stopEvent: this.stopEvent,
23
- animation: this.animation,
24
- speed: this.speed,
25
- transition: this.transition,
26
- loop: this.loop,
27
- weight: this.weight
28
- };
29
- };
30
-
31
- AnimationRule.prototype.fromJSON = function (json) {
32
-
33
- this.startEvent = json.startEvent;
34
- this.stopEvent = json.stopEvent;
35
-
36
- this.animation = json.animation;
37
-
38
- if (typeof json.speed === "number") {
39
- this.speed = json.speed;
40
- } else {
41
- this.speed = 1;
42
- }
9
+ class AnimationController {
43
10
 
44
- this.transition = json.transition;
11
+ /**
12
+ *
13
+ * @type {List<AnimationRule>}
14
+ */
15
+ rules = new List();
45
16
 
46
- if (typeof json.loop === "boolean") {
47
- this.loop = json.loop;
48
- } else {
49
- this.loop = false;
17
+ fromJSON(json) {
18
+ this.rules.fromJSON(json, AnimationRule);
50
19
  }
51
20
 
52
- if (typeof json.weight === "number") {
53
- this.weight = json.weight;
54
- } else {
55
- this.weight = 1;
21
+ toJSON() {
22
+ return this.rules.toJSON();
56
23
  }
57
- };
58
24
 
59
- /**
60
- *
61
- * @param {BinaryBuffer} buffer
62
- */
63
- AnimationRule.prototype.toBinaryBuffer = function (buffer) {
64
- buffer.writeUTF8String(this.animation);
65
- buffer.writeUTF8String(this.startEvent);
66
- buffer.writeUTF8String(this.stopEvent);
67
-
68
- buffer.writeUint8(this.loop ? 1 : 0);
69
- buffer.writeFloat64(this.weight);
70
- buffer.writeFloat64(this.transition);
71
- buffer.writeFloat64(this.speed);
72
-
73
- };
74
-
75
- /**
76
- *
77
- * @param {BinaryBuffer} buffer
78
- */
79
- AnimationRule.prototype.fromBinaryBuffer = function (buffer) {
80
- this.animation = buffer.readUTF8String();
81
- this.startEvent = buffer.readUTF8String();
82
- this.stopEvent = buffer.readUTF8String();
83
-
84
- this.loop = buffer.readUint8() !== 0;
85
- this.weight = buffer.readFloat64();
86
- this.transition = buffer.readFloat64();
87
- this.speed = buffer.readFloat64();
88
- };
89
-
90
- /**
91
- *
92
- * @constructor
93
- */
94
- function AnimationController() {
95
25
  /**
96
26
  *
97
- * @type {List<AnimationRule>}
27
+ * @param json
28
+ * @returns {AnimationController}
98
29
  */
99
- this.rules = new List();
100
- }
101
-
102
- AnimationController.typeName = "AnimationController";
103
-
104
- /**
105
- *
106
- * @param json
107
- * @returns {AnimationController}
108
- */
109
- AnimationController.fromJSON = function (json) {
110
- const r = new AnimationController();
30
+ static fromJSON(json) {
31
+ const r = new AnimationController();
111
32
 
112
- r.fromJSON(json);
33
+ r.fromJSON(json);
113
34
 
114
- return r;
115
- };
35
+ return r;
36
+ }
37
+ }
116
38
 
117
- AnimationController.prototype.fromJSON = function (json) {
118
- this.rules.fromJSON(json, AnimationRule);
119
- };
120
- AnimationController.prototype.toJSON = function () {
121
- return this.rules.toJSON();
122
- };
39
+ AnimationController.typeName = "AnimationController";
123
40
 
124
41
  export default AnimationController;
125
42
 
126
43
 
127
- export class AnimationControllerSerializationAdapter extends BinaryClassSerializationAdapter{
128
- constructor(){
129
- super();
130
-
131
- this.klass = AnimationController;
132
- this.version = 0;
133
- }
134
-
135
- /**
136
- *
137
- * @param {BinaryBuffer} buffer
138
- * @param {AnimationController} value
139
- */
140
- serialize(buffer, value) {
141
- value.rules.toBinaryBuffer(buffer);
142
- }
143
-
144
- /**
145
- *
146
- * @param {BinaryBuffer} buffer
147
- * @param {AnimationController} value
148
- */
149
- deserialize(buffer, value) {
150
- value.rules.fromBinaryBuffer(buffer, AnimationRule);
151
- }
152
- }
@@ -0,0 +1,27 @@
1
+ import { BinaryClassSerializationAdapter } from "../../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import { AnimationRule } from "./AnimationRule.js";
3
+ import AnimationController from "./AnimationController.js";
4
+
5
+ export class AnimationControllerSerializationAdapter extends BinaryClassSerializationAdapter {
6
+
7
+ klass = AnimationController;
8
+ version = 0;
9
+
10
+ /**
11
+ *
12
+ * @param {BinaryBuffer} buffer
13
+ * @param {AnimationController} value
14
+ */
15
+ serialize(buffer, value) {
16
+ value.rules.toBinaryBuffer(buffer);
17
+ }
18
+
19
+ /**
20
+ *
21
+ * @param {BinaryBuffer} buffer
22
+ * @param {AnimationController} value
23
+ */
24
+ deserialize(buffer, value) {
25
+ value.rules.fromBinaryBuffer(buffer, AnimationRule);
26
+ }
27
+ }
@@ -0,0 +1,79 @@
1
+ export function AnimationRule(startEvent, animationName, speed, transitionTime, loop = false) {
2
+ this.startEvent = startEvent;
3
+ this.stopEvent = null;
4
+ this.animation = animationName;
5
+ this.speed = speed;
6
+ this.transition = transitionTime;
7
+ this.weight = 1;
8
+ this.loop = loop;
9
+ }
10
+ AnimationRule.prototype.toJSON = function () {
11
+ return {
12
+ startEvent: this.startEvent,
13
+ stopEvent: this.stopEvent,
14
+ animation: this.animation,
15
+ speed: this.speed,
16
+ transition: this.transition,
17
+ loop: this.loop,
18
+ weight: this.weight
19
+ };
20
+ };
21
+
22
+ AnimationRule.prototype.fromJSON = function (json) {
23
+
24
+ this.startEvent = json.startEvent;
25
+ this.stopEvent = json.stopEvent;
26
+
27
+ this.animation = json.animation;
28
+
29
+ if (typeof json.speed === "number") {
30
+ this.speed = json.speed;
31
+ } else {
32
+ this.speed = 1;
33
+ }
34
+
35
+ this.transition = json.transition;
36
+
37
+ if (typeof json.loop === "boolean") {
38
+ this.loop = json.loop;
39
+ } else {
40
+ this.loop = false;
41
+ }
42
+
43
+ if (typeof json.weight === "number") {
44
+ this.weight = json.weight;
45
+ } else {
46
+ this.weight = 1;
47
+ }
48
+ };
49
+
50
+ /**
51
+ *
52
+ * @param {BinaryBuffer} buffer
53
+ */
54
+ AnimationRule.prototype.toBinaryBuffer = function (buffer) {
55
+ buffer.writeUTF8String(this.animation);
56
+ buffer.writeUTF8String(this.startEvent);
57
+ buffer.writeUTF8String(this.stopEvent);
58
+
59
+ buffer.writeUint8(this.loop ? 1 : 0);
60
+ buffer.writeFloat64(this.weight);
61
+ buffer.writeFloat64(this.transition);
62
+ buffer.writeFloat64(this.speed);
63
+
64
+ };
65
+
66
+ /**
67
+ *
68
+ * @param {BinaryBuffer} buffer
69
+ */
70
+ AnimationRule.prototype.fromBinaryBuffer = function (buffer) {
71
+ this.animation = buffer.readUTF8String();
72
+ this.startEvent = buffer.readUTF8String();
73
+ this.stopEvent = buffer.readUTF8String();
74
+
75
+ this.loop = buffer.readUint8() !== 0;
76
+ this.weight = buffer.readFloat64();
77
+ this.transition = buffer.readFloat64();
78
+ this.speed = buffer.readFloat64();
79
+ };
@@ -6,19 +6,17 @@ import {
6
6
  import { AnimationGraphDefinition } from "./definition/AnimationGraphDefinition.js";
7
7
 
8
8
  export class AnimationGraphSerializationAdapter extends BinaryClassSerializationAdapter {
9
- constructor() {
10
- super();
11
9
 
12
- this.klass = AnimationGraph;
13
- this.version = 0;
10
+ klass = AnimationGraph;
11
+ version = 0;
12
+
13
+ /**
14
+ *
15
+ * @type {AnimationGraphDefinitionSerializationAdapter}
16
+ * @private
17
+ */
18
+ __definitionAdapter = new AnimationGraphDefinitionSerializationAdapter();
14
19
 
15
- /**
16
- *
17
- * @type {AnimationGraphDefinitionSerializationAdapter}
18
- * @private
19
- */
20
- this.__definitionAdapter = new AnimationGraphDefinitionSerializationAdapter();
21
- }
22
20
 
23
21
  /**
24
22
  *
@@ -10,12 +10,10 @@ import { AnimationStateDefinition } from "../AnimationStateDefinition.js";
10
10
  import { AnimationTransitionDefinition } from "../AnimationTransitionDefinition.js";
11
11
 
12
12
  export class AnimationGraphDefinitionSerializationAdapter extends BinaryClassSerializationAdapter {
13
- constructor() {
14
- super();
15
13
 
16
- this.klass = AnimationGraphDefinition;
17
- this.version = 0;
18
- }
14
+ klass = AnimationGraphDefinition;
15
+ version = 0;
16
+
19
17
 
20
18
  /**
21
19
  *