@woosh/meep-engine 2.85.10 → 2.85.11

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 (46) hide show
  1. package/package.json +1 -1
  2. package/src/core/geom/Quaternion.d.ts.map +1 -1
  3. package/src/core/geom/Quaternion.js +3 -0
  4. package/src/core/geom/Vector3.d.ts.map +1 -1
  5. package/src/core/geom/Vector3.js +9 -4
  6. package/src/engine/EngineHarness.js +1 -1
  7. package/src/engine/animation/curve/Keyframe.d.ts.map +1 -1
  8. package/src/engine/animation/curve/Keyframe.js +14 -0
  9. package/src/engine/animation/curve/ecd_bind_animation_curve.d.ts +14 -4
  10. package/src/engine/animation/curve/ecd_bind_animation_curve.d.ts.map +1 -1
  11. package/src/engine/animation/curve/ecd_bind_animation_curve.js +309 -2
  12. package/src/engine/animation/curve/prototypeGLTF.d.ts +2 -0
  13. package/src/engine/animation/curve/prototypeGLTF.d.ts.map +1 -0
  14. package/src/engine/animation/curve/prototypeGLTF.js +81 -0
  15. package/src/engine/asset/Asset.d.ts.map +1 -1
  16. package/src/engine/asset/Asset.js +16 -0
  17. package/src/engine/asset/STATIC_ASSET_CACHE.d.ts +7 -0
  18. package/src/engine/asset/STATIC_ASSET_CACHE.d.ts.map +1 -0
  19. package/src/engine/asset/STATIC_ASSET_CACHE.js +19 -0
  20. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  21. package/src/engine/ecs/EntityManager.js +7 -2
  22. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.d.ts.map +1 -1
  23. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.js +13 -4
  24. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationController.d.ts +19 -0
  25. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationController.d.ts.map +1 -0
  26. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationController.js +23 -0
  27. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts +24 -0
  28. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.d.ts.map +1 -0
  29. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.js +132 -0
  30. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.d.ts.map +1 -1
  31. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.js +34 -24
  32. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/AnimatedValueBinding.d.ts +27 -0
  33. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/AnimatedValueBinding.d.ts.map +1 -0
  34. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/AnimatedValueBinding.js +61 -0
  35. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundQuaternionWriter.d.ts +7 -0
  36. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundQuaternionWriter.d.ts.map +1 -0
  37. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundQuaternionWriter.js +20 -0
  38. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundValueWriter.d.ts +8 -0
  39. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundValueWriter.d.ts.map +1 -0
  40. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundValueWriter.js +10 -0
  41. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundVector3Writer.d.ts +7 -0
  42. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundVector3Writer.d.ts.map +1 -0
  43. package/src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundVector3Writer.js +19 -0
  44. package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +4 -0
  45. package/src/generation/filtering/numeric/CellFilterCache.d.ts +0 -1
  46. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.85.10",
8
+ "version": "2.85.11",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
@@ -1565,6 +1565,9 @@ class Quaternion {
1565
1565
  }
1566
1566
  }
1567
1567
 
1568
+ Quaternion.prototype.fromArray = Quaternion.prototype.readFromArray;
1569
+ Quaternion.prototype.toArray = Quaternion.prototype.writeToArray;
1570
+
1568
1571
  /**
1569
1572
  * @readonly
1570
1573
  * @type {Quaternion}
@@ -1 +1 @@
1
- {"version":3,"file":"Vector3.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Vector3.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Vector3.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Vector3.js"],"names":[],"mappings":"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"}
@@ -564,9 +564,9 @@ class Vector3 {
564
564
 
565
565
  const w = 1 / (m4[3] * x + m4[7] * y + m4[11] * z + m4[15]);
566
566
 
567
- const _x = (m4[0] * x + m4[4] * y + m4[8] * z + m4[12])* w;
568
- const _y = (m4[1] * x + m4[5] * y + m4[9] * z + m4[13])* w;
569
- const _z = (m4[2] * x + m4[6] * y + m4[10] * z + m4[14])* w;
567
+ const _x = (m4[0] * x + m4[4] * y + m4[8] * z + m4[12]) * w;
568
+ const _y = (m4[1] * x + m4[5] * y + m4[9] * z + m4[13]) * w;
569
+ const _z = (m4[2] * x + m4[6] * y + m4[10] * z + m4[14]) * w;
570
570
 
571
571
  this.set(_x, _y, _z);
572
572
  }
@@ -575,7 +575,7 @@ class Vector3 {
575
575
  * Assume current vector holds a direction, transform using a matrix to produce a new directional unit vector
576
576
  * @param {ArrayLike<number>|number[]|Float32Array} m4
577
577
  */
578
- applyDirectionMatrix4(m4){
578
+ applyDirectionMatrix4(m4) {
579
579
  const x = this.x, y = this.y, z = this.z;
580
580
 
581
581
  const _x = m4[0] * x + m4[4] * y + m4[8] * z;
@@ -967,7 +967,12 @@ class Vector3 {
967
967
  }
968
968
  }
969
969
 
970
+ // Aliases
971
+
970
972
  Vector3.prototype.lengthSq = Vector3.prototype.lengthSqr;
973
+ Vector3.prototype.fromArray = Vector3.prototype.readFromArray;
974
+ Vector3.prototype.toArray = Vector3.prototype.writeToArray;
975
+
971
976
 
972
977
  /**
973
978
  * @readonly
@@ -174,7 +174,7 @@ export class EngineHarness {
174
174
  pitch = 1.4,
175
175
  yaw = 0,
176
176
  autoClip = false,
177
- distanceMin = 0,
177
+ distanceMin = 0.01,
178
178
  distanceMax = 1000,
179
179
  fieldOfView = 45
180
180
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Keyframe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/Keyframe.js"],"names":[],"mappings":"AAAA;IA2BI;;;;;;;OAOG;IACH,kBANW,MAAM,SACN,MAAM,cACN,MAAM,eACN,MAAM,GACL,QAAQ,CAWnB;IA1CG;;;OAGG;IACH,OAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,WAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,YAFU,MAAM,CAEG;IAsBvB;;;;;MAOC;IAED;;;;;aAQC;CAEJ"}
1
+ {"version":3,"file":"Keyframe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/Keyframe.js"],"names":[],"mappings":"AAEA;IA2BI;;;;;;;OAOG;IACH,kBANW,MAAM,SACN,MAAM,cACN,MAAM,eACN,MAAM,GACL,QAAQ,CAuBnB;IAtDG;;;OAGG;IACH,OAFU,MAAM,CAEF;IAEd;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,WAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,YAFU,MAAM,CAEG;IAkCvB;;;;;MAOC;IAED;;;;;aAQC;CAEJ"}
@@ -1,3 +1,5 @@
1
+ import { assert } from "../../../core/assert.js";
2
+
1
3
  export class Keyframe {
2
4
  constructor() {
3
5
  /**
@@ -34,6 +36,18 @@ export class Keyframe {
34
36
  * @return {Keyframe}
35
37
  */
36
38
  static from(time, value, inTangent = 0, outTangent = 0) {
39
+ assert.isNumber(time,'time');
40
+ assert.notNaN(time,'time');
41
+
42
+ assert.isNumber(value,'value');
43
+ assert.notNaN(value,'value');
44
+
45
+ assert.isNumber(inTangent,'inTangent');
46
+ assert.notNaN(inTangent,'inTangent');
47
+
48
+ assert.isNumber(outTangent,'outTangent');
49
+ assert.notNaN(outTangent,'outTangent');
50
+
37
51
  const r = new Keyframe();
38
52
 
39
53
  r.time = time;
@@ -1,8 +1,18 @@
1
1
  /**
2
- * Given a root node, bind animation curve to it
2
+ * Three.js clip to internal representation
3
3
  * @param {EntityNode} node
4
- * @param {string} path
5
- * @param {AnimationCurve} curve
4
+ * @param {AnimationClip} clip
6
5
  */
7
- export function entity_node_bind_animation_curve(node: EntityNode, path: string, curve: AnimationCurve): void;
6
+ export function convert_three_clip(node: EntityNode, clip: AnimationClip): EntityNodeAnimationClip;
7
+ export class EntityNodeAnimationClip {
8
+ name: string;
9
+ /**
10
+ *
11
+ * @type {AnimatedValueBinding[]}
12
+ */
13
+ tracks: AnimatedValueBinding[];
14
+ duration: number;
15
+ writeAt(time: any): void;
16
+ }
17
+ import { AnimatedValueBinding } from "../../graphics/ecs/mesh-v2/aggregate/animation/AnimatedValueBinding.js";
8
18
  //# sourceMappingURL=ecd_bind_animation_curve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecd_bind_animation_curve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/ecd_bind_animation_curve.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,yEAHW,MAAM,+BAKhB"}
1
+ {"version":3,"file":"ecd_bind_animation_curve.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/ecd_bind_animation_curve.js"],"names":[],"mappings":"AAySA;;;;GAIG;AACH,mGAaC;AApCD;IACI,aAAS;IACT;;;OAGG;IACH,QAFU,oBAAoB,EAAE,CAErB;IACX,iBAAY;IAEZ,yBAMC;CACJ;qCAtSoC,wEAAwE"}
@@ -1,9 +1,316 @@
1
+ import Name from "../../../../../model/game/ecs/component/Name.js";
2
+ import { AnimatedValueBinding } from "../../graphics/ecs/mesh-v2/aggregate/animation/AnimatedValueBinding.js";
3
+ import { BoundQuaternionWriter } from "../../graphics/ecs/mesh-v2/aggregate/animation/BoundQuaternionWriter.js";
4
+ import { BoundValueWriter } from "../../graphics/ecs/mesh-v2/aggregate/animation/BoundValueWriter.js";
5
+ import { BoundVector3Writer } from "../../graphics/ecs/mesh-v2/aggregate/animation/BoundVector3Writer.js";
6
+ import { AnimationCurve } from "./AnimationCurve.js";
7
+ import { Keyframe } from "./Keyframe.js";
8
+
9
+ /**
10
+ *
11
+ * @param {EntityNode} root
12
+ * @param {string[]} path_parts
13
+ */
14
+ function entity_node_resolve_path(root, path_parts) {
15
+
16
+ let node = root;
17
+
18
+ main:for (let i = 0; i < path_parts.length; i++) {
19
+
20
+ const part = path_parts[i];
21
+
22
+ const children = node.children;
23
+
24
+ const child_count = children.length;
25
+
26
+
27
+ for (let j = 0; j < child_count; j++) {
28
+ /**
29
+ * @type {EntityNode}
30
+ */
31
+ const child = children[j];
32
+
33
+ const name = child.entity.getComponentSafe(Name);
34
+
35
+ if (name.getValue() === part) {
36
+ node = child;
37
+ continue main;
38
+ }
39
+ }
40
+
41
+ throw new Error(`Child '${part}' not found, at index ${i} of [${path_parts.join(', ')}]`);
42
+ }
43
+
44
+ return node;
45
+ }
46
+
1
47
  /**
2
- * Given a root node, bind animation curve to it
48
+ *
3
49
  * @param {EntityNode} node
4
50
  * @param {string} path
51
+ * @returns {BoundValueWriter}
52
+ */
53
+ function bind_property_writer(node, path) {
54
+ const path_parts = path.split('.');
55
+
56
+ const property_name = path_parts[path_parts.length - 1];
57
+
58
+ const parent = entity_node_resolve_path(node, path_parts.slice(0, path_parts.length - 1));
59
+
60
+ let writer;
61
+
62
+ switch (property_name) {
63
+ case "position":
64
+ writer = new BoundVector3Writer(parent.transform.position);
65
+ break;
66
+ case "quaternion":
67
+ writer = new BoundQuaternionWriter(parent.transform.rotation);
68
+ break;
69
+ case "scale":
70
+ writer = new BoundVector3Writer(parent.transform.scale);
71
+ break;
72
+ default:
73
+ console.log(`Unsupported property name: ${property_name}`);
74
+ // NO-OP
75
+ writer = new BoundValueWriter();
76
+ }
77
+
78
+ return writer;
79
+ }
80
+
81
+ const INTERPOLATION = {
82
+ DISCRETE: 0,
83
+ LINEAR: 1,
84
+ CUBIC_TANGENTS: 2
85
+ };
86
+
87
+ /**
88
+ *
89
+ * @param {THREE.KeyframeTrack} track
90
+ */
91
+ function track_to_interpolation(track) {
92
+ const name = track.createInterpolant.name;
93
+
94
+ switch (name) {
95
+ case "InterpolantFactoryMethodDiscrete":
96
+ return INTERPOLATION.DISCRETE;
97
+ case "InterpolantFactoryMethodLinear":
98
+ return INTERPOLATION.LINEAR;
99
+ case "InterpolantFactoryMethodGLTFCubicSpline":
100
+ return INTERPOLATION.CUBIC_TANGENTS;
101
+
102
+ default:
103
+
104
+ if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true) {
105
+ // second attempt
106
+ return INTERPOLATION.CUBIC_TANGENTS;
107
+ }
108
+
109
+ // unsupported, default to linear
110
+ console.warn(`Unsupported interpolation type, defaulting to linear`);
111
+ return INTERPOLATION.LINEAR;
112
+ }
113
+ }
114
+
115
+ /**
116
+ *
117
+ * @param {THREE.KeyframeTrack} track
118
+ * @returns {AnimationCurve[]}
119
+ */
120
+ function convert_three_track_to_curves(track) {
121
+
122
+ const values = track.values;
123
+ const times = track.times;
124
+
125
+ const key_count = times.length;
126
+
127
+ const curves = [];
128
+
129
+ // figure out interpolation type
130
+ const interpolation = track_to_interpolation(track);
131
+
132
+ const values_per_key = values.length / key_count;
133
+
134
+ const component_count = interpolation === INTERPOLATION.CUBIC_TANGENTS ? values_per_key / 3 : values_per_key;
135
+
136
+ for (let component_index = 0; component_index < component_count; component_index++) {
137
+
138
+ const curve = new AnimationCurve();
139
+
140
+ component_curve_from_track(
141
+ curve,
142
+ interpolation,
143
+ values,
144
+ times,
145
+ component_count,
146
+ component_index
147
+ );
148
+
149
+ curves.push(curve);
150
+
151
+ }
152
+ return curves;
153
+ }
154
+
155
+ /**
156
+ *
157
+ * @param {AnimationCurve} curve
158
+ * @param {number[]} values
159
+ * @param {number[]} times
160
+ * @param {number} component_count
161
+ * @param {number} component_index
162
+ */
163
+ function curve_from_track_linear(curve, values, times, component_count, component_index) {
164
+
165
+ const key_count = times.length;
166
+
167
+ for (let k = 0; k < key_count; k++) {
168
+ const value = values[k * component_count + component_index];
169
+ const time = times[k];
170
+
171
+ curve.add(Keyframe.from(time, value));
172
+ }
173
+
174
+ for (let k = 0; k < key_count; k++) {
175
+ curve.alignTangents(k);
176
+ }
177
+ }
178
+
179
+ /**
180
+ *
181
+ * @param {AnimationCurve} curve
182
+ * @param {number[]} values
183
+ * @param {number[]} times
184
+ * @param {number} component_count
185
+ * @param {number} component_index
186
+ */
187
+ function curve_from_track_discrete(curve, values, times, component_count, component_index) {
188
+
189
+ const key_count = times.length;
190
+
191
+ for (let k = 0; k < key_count; k++) {
192
+ const value = values[k * component_count + component_index];
193
+ const time = times[k];
194
+
195
+ curve.add(Keyframe.from(time, value));
196
+ }
197
+
198
+ const keys = curve.keys;
199
+
200
+ for (let i = key_count - 1; i > 0; i--) {
201
+ const key = keys[i];
202
+ const prev = keys[i - 1];
203
+
204
+ keys.splice(i, 0, Keyframe.from(key.time, prev.value));
205
+ }
206
+ }
207
+
208
+ /**
209
+ *
210
+ * @param {AnimationCurve} curve
211
+ * @param {number[]} values
212
+ * @param {number[]} times
213
+ * @param {number} component_count
214
+ * @param {number} component_index
215
+ */
216
+ function curve_from_track_cubic_gltf(curve, values, times, component_count, component_index) {
217
+
218
+ const key_count = times.length;
219
+
220
+ for (let k = 0; k < key_count; k++) {
221
+ const component_position = k * component_count;
222
+
223
+ const base_offset = 3 * component_position;
224
+
225
+ // Layout of keyframe output values for CUBICSPLINE animations:
226
+ // [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]
227
+
228
+ const inTangent = values[base_offset + component_index];
229
+ const value = values[base_offset + component_count + component_index];
230
+ const outTangent = values[base_offset + component_count * 2 + component_index];
231
+
232
+ const time = times[k];
233
+
234
+ curve.add(Keyframe.from(time, value, inTangent, outTangent));
235
+ }
236
+
237
+ }
238
+
239
+
240
+ /**
241
+ *
5
242
  * @param {AnimationCurve} curve
243
+ * @param {INTERPOLATION} type
244
+ * @param {number[]} values
245
+ * @param {number[]} times
246
+ * @param {number} component_count
247
+ * @param {number} component_index
248
+ */
249
+ function component_curve_from_track(curve, type, values, times, component_count, component_index) {
250
+ switch (type) {
251
+ case INTERPOLATION.DISCRETE:
252
+ return curve_from_track_discrete(curve, values, times, component_count, component_index);
253
+ case INTERPOLATION.LINEAR:
254
+ return curve_from_track_linear(curve, values, times, component_count, component_index);
255
+ case INTERPOLATION.CUBIC_TANGENTS:
256
+ return curve_from_track_cubic_gltf(curve, values, times, component_count, component_index);
257
+ default:
258
+ throw new Error(`Unsupported type '${type}'`);
259
+ }
260
+
261
+ }
262
+
263
+ /**
264
+ *
265
+ * @param {THREE.KeyframeTrack} track
266
+ * @param {EntityNode} node
267
+ */
268
+ function convert_three_track(track, node) {
269
+
270
+
271
+ const track_name = track.name;
272
+
273
+ const writer = bind_property_writer(node, track_name);
274
+ // last part is the property
275
+ const curves = convert_three_track_to_curves(track);
276
+
277
+ return AnimatedValueBinding.from(writer, curves);
278
+ }
279
+
280
+ export class EntityNodeAnimationClip {
281
+ name = ""
282
+ /**
283
+ *
284
+ * @type {AnimatedValueBinding[]}
285
+ */
286
+ tracks = []
287
+ duration = 0
288
+
289
+ writeAt(time) {
290
+ for (let i = 0; i < this.tracks.length; i++) {
291
+ const track = this.tracks[i];
292
+
293
+ track.writeAt(time);
294
+ }
295
+ }
296
+ }
297
+
298
+ /**
299
+ * Three.js clip to internal representation
300
+ * @param {EntityNode} node
301
+ * @param {AnimationClip} clip
6
302
  */
7
- export function entity_node_bind_animation_curve(node, path, curve) {
303
+ export function convert_three_clip(node, clip) {
304
+ const three_tracks = clip.tracks;
305
+
306
+ const tracks = three_tracks.map(t => convert_three_track(t, node));
307
+
308
+
309
+ const r = new EntityNodeAnimationClip();
310
+
311
+ r.name = clip.name;
312
+ r.tracks = tracks;
313
+ r.duration = clip.duration;
8
314
 
315
+ return r;
9
316
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=prototypeGLTF.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prototypeGLTF.d.ts","sourceRoot":"","sources":["../../../../../src/engine/animation/curve/prototypeGLTF.js"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { initializeEditor } from "../../../../../model/game/initializeEditor.js";
2
+ import { enableEditor } from "../../../../editor/enableEditor.js";
3
+ import { GameAssetType } from "../../asset/GameAssetType.js";
4
+ import { GLTFAssetLoader } from "../../asset/loaders/GLTFAssetLoader.js";
5
+ import Entity from "../../ecs/Entity.js";
6
+ import { Transform } from "../../ecs/transform/Transform.js";
7
+ import { EngineHarness } from "../../EngineHarness.js";
8
+ import { SGMesh } from "../../graphics/ecs/mesh-v2/aggregate/SGMesh.js";
9
+ import {
10
+ AnimationPlayback,
11
+ SGMeshAnimationController
12
+ } from "../../graphics/ecs/mesh-v2/aggregate/SGMeshAnimationController.js";
13
+ import {
14
+ SGMeshAnimationControllerSystem
15
+ } from "../../graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.js";
16
+ import { SGMeshSystem } from "../../graphics/ecs/mesh-v2/aggregate/SGMeshSystem.js";
17
+ import { ShadedGeometrySystem } from "../../graphics/ecs/mesh-v2/ShadedGeometrySystem.js";
18
+
19
+ const harness = new EngineHarness();
20
+
21
+ /**
22
+ *
23
+ * @param {Engine} engine
24
+ * @returns {Promise<void>}
25
+ */
26
+ async function main(engine) {
27
+
28
+ enableEditor(engine, initializeEditor);
29
+
30
+ await EngineHarness.buildBasics({
31
+ engine,
32
+ enableTerrain: false,
33
+ cameraFarDistance: 100,
34
+ focus: {
35
+ "x": 0,
36
+ "y": 4,
37
+ "z": 10.244190535355157
38
+ },
39
+ cameraAutoClip: false,
40
+ pitch: 0.030000000000008027,
41
+ yaw: 3.123185307179593,
42
+ });
43
+
44
+ const controller = new SGMeshAnimationController();
45
+
46
+ [
47
+ 'Step Scale',
48
+ 'Linear Scale',
49
+ 'CubicSpline Scale',
50
+ 'Step Rotation',
51
+ 'CubicSpline Rotation',
52
+ 'Linear Rotation',
53
+ 'Step Translation',
54
+ 'CubicSpline Translation',
55
+ 'Linear Translation'
56
+ ].forEach(name => {
57
+
58
+ const playback = new AnimationPlayback();
59
+ playback.clip_name = name;
60
+ playback.loop = true;
61
+
62
+ controller.active.push(playback)
63
+
64
+ })
65
+
66
+ new Entity()
67
+ .add(SGMesh.fromURL('data/models/samples/InterpolationTest.glb'))
68
+ .add(controller)
69
+ .add(new Transform())
70
+ .build(engine.entityManager.dataset);
71
+
72
+ }
73
+
74
+ harness.initialize({
75
+ configuration(config, engine) {
76
+ config.addLoader(GameAssetType.ModelGLTF, new GLTFAssetLoader());
77
+ config.addSystem(new SGMeshAnimationControllerSystem(engine));
78
+ config.addSystem(new SGMeshSystem(engine));
79
+ config.addSystem(new ShadedGeometrySystem(engine));
80
+ }
81
+ }).then(main);
@@ -1 +1 @@
1
- {"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/Asset.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH;IACI;;;;;OAKG;IACH,0CAHW,MAAM,EA2BhB;IAvBG;;;OAGG;IACH,iBAAsB;IAEtB;;;OAGG;IACH,UAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,cAFU,uBAAuB,CAEX;IAEtB;;;OAGG;IACH,8BAAuB;IAG3B;;;OAGG;IACH,YAEC;CACJ"}
1
+ {"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/Asset.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH;IACI;;;;;OAKG;IACH,0CAHW,MAAM,EA2BhB;IAvBG;;;OAGG;IACH,iBAAsB;IAEtB;;;OAGG;IACH,UAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,cAFU,uBAAuB,CAEX;IAEtB;;;OAGG;IACH,8BAAuB;IAG3B;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAOnB;IAED,YAEC;IAED;;;OAGG;IACH,YAEC;CACJ"}
@@ -39,6 +39,22 @@ export class Asset {
39
39
  this.description = null;
40
40
  }
41
41
 
42
+ /**
43
+ *
44
+ * @param {Asset} other
45
+ * @returns {boolean}
46
+ */
47
+ equals(other) {
48
+ return this === other
49
+ || this.description === other.description
50
+ || this.description.equals(other.description)
51
+ ;
52
+ }
53
+
54
+ hash() {
55
+ return this.description.hash();
56
+ }
57
+
42
58
  /**
43
59
  *
44
60
  * @returns {T}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Asset instance objects for read-only usage, so we can just keep 1 copy instead of calling {@link Asset#create} every time
3
+ * @type {Cache<Asset, any>}
4
+ */
5
+ export const STATIC_ASSET_CACHE: Cache<Asset, any>;
6
+ import { Cache } from "../../core/cache/Cache.js";
7
+ //# sourceMappingURL=STATIC_ASSET_CACHE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"STATIC_ASSET_CACHE.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/STATIC_ASSET_CACHE.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,iCAFU,aAAa,GAAG,CAAC,CAYxB;sBAlBmB,2BAA2B"}
@@ -0,0 +1,19 @@
1
+ import { Cache } from "../../core/cache/Cache.js";
2
+ import { invokeObjectEquals } from "../../core/model/object/invokeObjectEquals.js";
3
+ import { invokeObjectHash } from "../../core/model/object/invokeObjectHash.js";
4
+
5
+ /**
6
+ * Asset instance objects for read-only usage, so we can just keep 1 copy instead of calling {@link Asset#create} every time
7
+ * @type {Cache<Asset, any>}
8
+ */
9
+ export const STATIC_ASSET_CACHE = new Cache({
10
+ maxWeight: 128 * 1024 * 1024, //128 Mb,
11
+ keyEqualityFunction: invokeObjectEquals,
12
+ keyHashFunction: invokeObjectHash,
13
+ keyWeigher(asset) {
14
+ return asset.byteSize + 64;
15
+ },
16
+ valueWeigher(v) {
17
+ return 1;
18
+ }
19
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityManager.js"],"names":[],"mappings":";;;wBAkBU,MAAM;;;;;;iCAWN,MAAM;;;;;;;;;AAWhB;IAEI;;;OAGG;IACH,kBAFU,iCAAQ,CAEL;IAEb;;;OAGG;IACH,gCAFU,iCAAQ,CAES;IAE3B;;;OAGG;IACH,0BAFU,cAAc,EAAE,CAEL;IAErB;;OAEG;IACH;;;QAGI;;WAEG;qBADO,uCAAc;;MAI1B;IAEF;;;OAGG;IACH,OAFU,kBAAkB,CAEO;IAEnC;;;;OAIG;IACH,gDAA2C;IAE3C;;;;OAIG;IACH,qBAFU,MAAM,CAEY;IAE5B;;;OAGG;IACH,gCAAe;IAEf;;;;OAIG;IACH,uCAAsC;IAEtC;;;OAGG;IACH,6BA8EC;IAED,sBAcC;IAED;;;OAGG;IACH,uBAFa,OAAO,CAuBnB;IAED;;;;;OAKG;IACH,qDAsBC;IAED;;;;OAIG;IACH,qCAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,6CAcC;IAED;;;;;OAKG;IACH,wCAHW,MAAM,GACJ,IAAI,aAAS,CAezB;IAED;;;OAGG;IACH,oBAFW,MAAM,QA6DhB;IAED;;;;;OAKG;IACH,iEAmEC;IAED;;;;OAIG;IACH,uDAFa,QAAQ,OAAO,CAAC,CA2C5B;IAED;;;;;OAKG;IACH,mBA6BC;IAED;;;;;OAKG;IACH,oBAwCC;IAED;;;;OAIG;IACH,gEAwEC;IAED;;;;OAIG;IACH,mCAFa,wCAAgB,CA0B5B;IAED;;;;;OAKG;IACH,8DAFa,wCAAgB,CAsB5B;IAED;;;;OAIG;IACH,iEAkEC;CACJ;uBAjxBsD,aAAa;+BADrC,qBAAqB;mBALjC,oCAAoC"}
1
+ {"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityManager.js"],"names":[],"mappings":";;;wBAkBU,MAAM;;;;;;iCAWN,MAAM;;;;;;;;;AAWhB;IAEI;;;OAGG;IACH,kBAFU,iCAAQ,CAEL;IAEb;;;OAGG;IACH,gCAFU,iCAAQ,CAES;IAE3B;;;OAGG;IACH,0BAFU,cAAc,EAAE,CAEL;IAErB;;OAEG;IACH;;;QAGI;;WAEG;qBADO,uCAAc;;MAI1B;IAEF;;;OAGG;IACH,OAFU,kBAAkB,CAEO;IAEnC;;;;OAIG;IACH,gDAA2C;IAE3C;;;;OAIG;IACH,qBAFU,MAAM,CAEY;IAE5B;;;OAGG;IACH,gCAAe;IAEf;;;;OAIG;IACH,uCAAsC;IAEtC;;;OAGG;IACH,6BA8EC;IAED,sBAcC;IAED;;;OAGG;IACH,uBAFa,OAAO,CAuBnB;IAED;;;;;OAKG;IACH,qDAsBC;IAED;;;;OAIG;IACH,qCAFa,OAAO,CAInB;IAED;;;;OAIG;IACH,6CAcC;IAED;;;;;OAKG;IACH,wCAHW,MAAM,GACJ,IAAI,aAAS,CAezB;IAED;;;OAGG;IACH,oBAFW,MAAM,QA6DhB;IAED;;;;;OAKG;IACH,iEA0EC;IAED;;;;OAIG;IACH,uDAFa,QAAQ,OAAO,CAAC,CAyC5B;IAED;;;;;OAKG;IACH,mBA6BC;IAED;;;;;OAKG;IACH,oBAwCC;IAED;;;;OAIG;IACH,gEAwEC;IAED;;;;OAIG;IACH,mCAFa,wCAAgB,CA0B5B;IAED;;;;;OAKG;IACH,8DAFa,wCAAgB,CAsB5B;IAED;;;;OAIG;IACH,iEAkEC;CACJ;uBAtxBsD,aAAa;+BADrC,qBAAqB;mBALjC,oCAAoC"}
@@ -437,6 +437,13 @@ export class EntityManager {
437
437
  startup_promise = Promise.resolve();
438
438
  }
439
439
 
440
+ // Link EntityManager
441
+ if(system.entityManager === null){
442
+ system.entityManager = this;
443
+ }else if(system.entityManager !== this){
444
+ throw new Error(`System is bound to another EntityManager`);
445
+ }
446
+
440
447
  if (this.dataset !== null) {
441
448
 
442
449
  // link dependency components
@@ -461,7 +468,6 @@ export class EntityManager {
461
468
  assert.defined(system, "system");
462
469
  assert.isInstanceOf(system, System, 'system', 'System');
463
470
 
464
-
465
471
  const systemIndex = this.systems.indexOf(system);
466
472
 
467
473
  if (systemIndex === -1) {
@@ -475,7 +481,6 @@ export class EntityManager {
475
481
 
476
482
  assert.notEqual(systemObserver, undefined, "System observer is undefined, it was possibly removed illegally or was not created");
477
483
 
478
-
479
484
  //shutdown system
480
485
  this.systems.splice(systemIndex, 1);
481
486
 
@@ -1 +1 @@
1
- {"version":3,"file":"SGMesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.js"],"names":[],"mappings":";;;;;AAmBA;IAmOI;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAUlB;IAzOD;;;OAGG;IACH,OAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,OAFU,MAAM,GAAC,IAAI,CAER;IAEb;;;;OAIG;IACH,eAAc;IAEd;;;;OAIG;IACH,yBAA+B;IAE/B;;;;OAIG;IACH,cAHW,MAAM,GACJ,OAAO,CAUnB;IAED,eAEC;IAED;;;OAGG;IACH,YAFW,MAAM,QAOhB;IAED;;;OAGG;IACH,SAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,oCAYC;IAED,iCAEC;IAED,8BAYC;IAUD;;;OAGG;IACH,qBAOC;IAnBD;;;OAGG;IACH,kBAEC;IAeD;;;;OAIG;IACH,4BAHW,KAAK,GACH,OAAO,CAUnB;IAED;;;OAGG;IACH,yCAFW,KAAK,QAIf;IAED;;;;OAIG;IACH,cAHW,MAAM;;;;KAAY,GAChB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM;;;;KAAY,GAChB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM;;;;KAAY,SAClB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM;;;;KAAY,GAChB,OAAO,CAInB;IAUD;;;OAGG;IACH,6BAEC;IAdD;;;OAGG;IACH,0BAEC;IAkBD;;;OAGG;IACH,gCAEC;IAdD;;;OAGG;IACH,6BAEC;;CAwBJ;;;;sBApQmB,2CAA2C"}
1
+ {"version":3,"file":"SGMesh.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.js"],"names":[],"mappings":";;;;;AAmBA;IA4OI;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAUlB;IAlPD;;;OAGG;IACH,OAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,OAFU,MAAM,GAAC,IAAI,CAER;IAEb;;;;OAIG;IACH,eAAc;IAEd;;;;OAIG;IACH,yBAA+B;IAE/B;;;;OAIG;IACH,gBAEC;IAED;;;;OAIG;IACH,cAHW,MAAM,GACJ,OAAO,CAUnB;IAED,eAEC;IAED;;;OAGG;IACH,YAFW,MAAM,QAOhB;IAED;;;OAGG;IACH,SAFa,MAAM,CAQlB;IAED;;;OAGG;IACH,oCAYC;IAED,iCAEC;IAED,8BAYC;IAUD;;;OAGG;IACH,qBAOC;IAnBD;;;OAGG;IACH,kBAEC;IAeD;;;;OAIG;IACH,4BAHW,KAAK,GACH,OAAO,CAUnB;IAED;;;OAGG;IACH,yCAFW,KAAK,QAIf;IAED;;;;OAIG;IACH,cAHW,MAAM;;;;KAAY,GAChB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM;;;;KAAY,GAChB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM;;;;KAAY,SAClB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM;;;;KAAY,GAChB,OAAO,CAInB;IAUD;;;OAGG;IACH,6BAEC;IAdD;;;OAGG;IACH,0BAEC;IAkBD;;;OAGG;IACH,gCAEC;IAdD;;;OAGG;IACH,6BAEC;;CAwBJ;;;;sBA7QqB,2CAA2C"}
@@ -1,7 +1,7 @@
1
- import {AABB3} from "../../../../../core/geom/3d/aabb/AABB3.js";
2
- import {computeStringHash} from "../../../../../core/primitives/strings/computeStringHash.js";
3
- import {entity_node_compute_bounding_box} from "../../../../ecs/parent/entity_node_compute_bounding_box.js";
4
- import {ShadedGeometry} from "../ShadedGeometry.js";
1
+ import { AABB3 } from "../../../../../core/geom/3d/aabb/AABB3.js";
2
+ import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
3
+ import { entity_node_compute_bounding_box } from "../../../../ecs/parent/entity_node_compute_bounding_box.js";
4
+ import { ShadedGeometry } from "../ShadedGeometry.js";
5
5
 
6
6
  export const SGMeshFlags = {
7
7
  CastShadow: 1,
@@ -50,6 +50,15 @@ export class SGMesh {
50
50
  */
51
51
  __initial_bounds = new AABB3();
52
52
 
53
+ /**
54
+ * Contents are generated by the system
55
+ * Do not modify contents unless you know exactly what you're doing
56
+ * @returns {EntityNode|null}
57
+ */
58
+ get node(){
59
+ return this.__node;
60
+ }
61
+
53
62
  /**
54
63
  *
55
64
  * @param {SGMesh} other
@@ -0,0 +1,19 @@
1
+ export class SGMeshAnimationController {
2
+ /**
3
+ *
4
+ * @type {AnimationPlayback[]}
5
+ */
6
+ active: AnimationPlayback[];
7
+ /**
8
+ *
9
+ * @type {EntityNodeAnimationClip[]}
10
+ */
11
+ bound: EntityNodeAnimationClip[];
12
+ getBoundByName(name: any): EntityNodeAnimationClip;
13
+ }
14
+ export class AnimationPlayback {
15
+ clip_name: string;
16
+ time: number;
17
+ loop: boolean;
18
+ }
19
+ //# sourceMappingURL=SGMeshAnimationController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SGMeshAnimationController.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationController.js"],"names":[],"mappings":"AAAA;IACI;;;OAGG;IACH,QAFU,iBAAiB,EAAE,CAElB;IAEX;;;OAGG;IACH,OAFU,yBAAyB,CAEzB;IAEV,mDAEC;CACJ;AAED;IACI,kBAAc;IACd,aAAQ;IACR,cAAY;CACf"}
@@ -0,0 +1,23 @@
1
+ export class SGMeshAnimationController {
2
+ /**
3
+ *
4
+ * @type {AnimationPlayback[]}
5
+ */
6
+ active = []
7
+
8
+ /**
9
+ *
10
+ * @type {EntityNodeAnimationClip[]}
11
+ */
12
+ bound = []
13
+
14
+ getBoundByName(name) {
15
+ return this.bound.find(b => b.name === name);
16
+ }
17
+ }
18
+
19
+ export class AnimationPlayback {
20
+ clip_name = ""
21
+ time = 0
22
+ loop = false
23
+ }
@@ -0,0 +1,24 @@
1
+ export class SGMeshAnimationControllerSystem extends System<any, any, any, any, any> {
2
+ /**
3
+ *
4
+ * @param {Engine} engine
5
+ */
6
+ constructor(engine: Engine);
7
+ engine: Engine;
8
+ dependencies: (typeof SGMesh | typeof SGMeshAnimationController)[];
9
+ components_used: (ResourceAccessSpecification<typeof SGMesh> | ResourceAccessSpecification<typeof SGMeshAnimationController>)[];
10
+ /**
11
+ *
12
+ * @param {SGMeshAnimationController} anim
13
+ * @param {SGMesh} mesh
14
+ * @param {number} entity
15
+ */
16
+ link(anim: SGMeshAnimationController, mesh: SGMesh, entity: number): Promise<void>;
17
+ update(td: any): void;
18
+ #private;
19
+ }
20
+ import { System } from "../../../../ecs/System.js";
21
+ import { SGMesh } from "./SGMesh.js";
22
+ import { SGMeshAnimationController } from "./SGMeshAnimationController.js";
23
+ import { ResourceAccessSpecification } from "../../../../../core/model/ResourceAccessSpecification.js";
24
+ //# sourceMappingURL=SGMeshAnimationControllerSystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SGMeshAnimationControllerSystem.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshAnimationControllerSystem.js"],"names":[],"mappings":"AAQA;IAII;;;OAGG;IACH,4BAeC;IAZG,eAAoB;IAEpB,mEAGC;IAED,gIAGC;IAuCL;;;;;OAKG;IACH,WAJW,yBAAyB,QACzB,MAAM,UACN,MAAM,iBAUhB;IAED,sBA8CC;;CACJ;uBAhIsB,2BAA2B;uBAE3B,aAAa;0CACM,gCAAgC;4CAL9B,0DAA0D"}
@@ -0,0 +1,132 @@
1
+ import { ResourceAccessKind } from "../../../../../core/model/ResourceAccessKind.js";
2
+ import { ResourceAccessSpecification } from "../../../../../core/model/ResourceAccessSpecification.js";
3
+ import { convert_three_clip } from "../../../../animation/curve/ecd_bind_animation_curve.js";
4
+ import { System } from "../../../../ecs/System.js";
5
+ import { assetTypeByPath } from "../../mesh/assetTypeByPath.js";
6
+ import { SGMesh } from "./SGMesh.js";
7
+ import { SGMeshAnimationController } from "./SGMeshAnimationController.js";
8
+
9
+ export class SGMeshAnimationControllerSystem extends System {
10
+
11
+ #queue = [];
12
+
13
+ /**
14
+ *
15
+ * @param {Engine} engine
16
+ */
17
+ constructor(engine) {
18
+ super();
19
+
20
+ this.engine = engine;
21
+
22
+ this.dependencies = [
23
+ SGMeshAnimationController,
24
+ SGMesh
25
+ ];
26
+
27
+ this.components_used = [
28
+ ResourceAccessSpecification.from(SGMesh, ResourceAccessKind.Read | ResourceAccessKind.Write),
29
+ ResourceAccessSpecification.from(SGMeshAnimationController, ResourceAccessKind.Read)
30
+ ];
31
+
32
+ }
33
+
34
+ async #process(entity) {
35
+ const em = this.entityManager;
36
+
37
+ const ecd = em.dataset;
38
+
39
+ const mesh = ecd.getComponent(entity, SGMesh);
40
+
41
+ if (mesh.node === null) {
42
+ // requeue
43
+ this.#enqueue(entity);
44
+ return;
45
+ }
46
+
47
+ const assetType = assetTypeByPath(mesh.url);
48
+
49
+ const asset = await this.engine.assetManager.promise(mesh.url, assetType);
50
+
51
+ const three_animations = asset.animations ?? [];
52
+
53
+ const animations = three_animations.map(three_animation => {
54
+
55
+ return convert_three_clip(mesh.node, three_animation)
56
+ });
57
+
58
+ const controller = ecd.getComponent(entity, SGMeshAnimationController);
59
+
60
+ controller.bound = animations;
61
+
62
+ console.log(asset, animations);
63
+ }
64
+
65
+ #enqueue(entity) {
66
+ this.#queue.push(entity);
67
+ }
68
+
69
+ /**
70
+ *
71
+ * @param {SGMeshAnimationController} anim
72
+ * @param {SGMesh} mesh
73
+ * @param {number} entity
74
+ */
75
+ async link(anim, mesh, entity) {
76
+
77
+ if (mesh.node === null) {
78
+ this.#enqueue(entity);
79
+ return;
80
+ }
81
+
82
+ await this.#process(entity);
83
+ }
84
+
85
+ update(td) {
86
+
87
+ for (let i = 0; i < 1000; i++) {
88
+ if (this.#queue.length === 0) {
89
+ break;
90
+ }
91
+
92
+ const entity = this.#queue.pop();
93
+
94
+ this.#process(entity);
95
+ }
96
+
97
+ const ecd = this.entityManager.dataset;
98
+
99
+ if (ecd === null) {
100
+ return;
101
+ }
102
+
103
+ ecd.traverseComponents(SGMeshAnimationController, (controller) => {
104
+
105
+ const active = controller.active;
106
+
107
+ for (let i = 0; i < active.length; i++) {
108
+ const playback = active[i];
109
+
110
+ playback.time += td;
111
+
112
+ const clip = controller.getBoundByName(playback.clip_name);
113
+
114
+ if (clip !== undefined) {
115
+ let t= playback.time;
116
+
117
+ if (t > clip.duration) {
118
+ if (playback.loop) {
119
+ t = t%clip.duration;
120
+ }else{
121
+ t = clip.duration;
122
+ }
123
+ }
124
+
125
+ clip.writeAt(t);
126
+ }
127
+
128
+ }
129
+
130
+ });
131
+ }
132
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"SGMeshSystem.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.js"],"names":[],"mappings":"AA8BA;IACI;;;OAGG;IACH,4BA4CC;IAzCG;;;;OAIG;IACH,iBAAsB;IAEtB;;;;OAIG;IACH,uBAAyC;IAEzC,mDAAuC;IACvC,+NAKC;IAED;;;;OAIG;IACH,qBAAsB;IACtB;;;;OAIG;IACH,mCAAmC;IAEnC;;;;OAIG;IACH,6BAAqC;IAGzC,0EAOC;IAED;;;;;OAKG;IACH,gBAJW,MAAM,QACN,MAAM,aACN,SAAS,iBA8GnB;IAED;;;;;OAKG;IACH,WAJW,MAAM,aACN,SAAS,UACT,MAAM,QAiBhB;IAED;;;;;OAKG;IACH,aAJW,MAAM,aACN,SAAS,UACT,MAAM,QAehB;IAED,8BAqDC;CACJ;uBA3SoB,2BAA2B;0BAGxB,wCAAwC;uBAK3C,aAAa;4CAXQ,0DAA0D;oCAIlE,6DAA6D;+BAIlE,sBAAsB"}
1
+ {"version":3,"file":"SGMeshSystem.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshSystem.js"],"names":[],"mappings":"AA8CA;IACI;;;OAGG;IACH,4BAsCC;IAnCG;;;;OAIG;IACH,iBAAsB;IAEtB;;;;OAIG;IACH,uBAAyC;IAEzC,mDAAuC;IACvC,+NAKC;IAED;;;;OAIG;IACH,qBAAsB;IACtB;;;;OAIG;IACH,mCAAmC;IAIvC,0EAOC;IAED;;;;;OAKG;IACH,gBAJW,MAAM,QACN,MAAM,aACN,SAAS,iBA8GnB;IAED;;;;;OAKG;IACH,WAJW,MAAM,aACN,SAAS,UACT,MAAM,QAiBhB;IAED;;;;;OAKG;IACH,aAJW,MAAM,aACN,SAAS,UACT,MAAM,QAehB;IAED,8BAqDC;CACJ;uBApTsB,2BAA2B;0BAGxB,wCAAwC;uBAK3C,aAAa;4CAZQ,0DAA0D;oCAKlE,6DAA6D;+BAIlE,sBAAsB"}
@@ -1,18 +1,19 @@
1
- import {min2} from "../../../../../core/math/min2.js";
2
- import {ResourceAccessKind} from "../../../../../core/model/ResourceAccessKind.js";
3
- import {ResourceAccessSpecification} from "../../../../../core/model/ResourceAccessSpecification.js";
4
- import {EntityNode} from "../../../../ecs/parent/EntityNode.js";
5
- import {ParentEntity} from "../../../../ecs/parent/ParentEntity.js";
6
- import {System} from "../../../../ecs/System.js";
7
- import {TransformAttachment} from "../../../../ecs/transform-attachment/TransformAttachment.js";
8
- import {TransformAttachmentSystem} from "../../../../ecs/transform-attachment/TransformAttachmentSystem.js";
9
- import {Transform} from "../../../../ecs/transform/Transform.js";
10
- import {assetTypeByPath} from "../../mesh/assetTypeByPath.js";
11
- import {ShadedGeometry} from "../ShadedGeometry.js";
12
- import {ShadedGeometryFlags} from "../ShadedGeometryFlags.js";
13
- import {three_object_to_entity_composition} from "../three_object_to_entity_composition.js";
14
- import {SGMesh} from "./SGMesh.js";
15
- import {SGMeshEvents} from "./SGMeshEvents.js";
1
+ import { min2 } from "../../../../../core/math/min2.js";
2
+ import { ResourceAccessKind } from "../../../../../core/model/ResourceAccessKind.js";
3
+ import { ResourceAccessSpecification } from "../../../../../core/model/ResourceAccessSpecification.js";
4
+ import { STATIC_ASSET_CACHE } from "../../../../asset/STATIC_ASSET_CACHE.js";
5
+ import { EntityNode } from "../../../../ecs/parent/EntityNode.js";
6
+ import { ParentEntity } from "../../../../ecs/parent/ParentEntity.js";
7
+ import { System } from "../../../../ecs/System.js";
8
+ import { TransformAttachment } from "../../../../ecs/transform-attachment/TransformAttachment.js";
9
+ import { TransformAttachmentSystem } from "../../../../ecs/transform-attachment/TransformAttachmentSystem.js";
10
+ import { Transform } from "../../../../ecs/transform/Transform.js";
11
+ import { assetTypeByPath } from "../../mesh/assetTypeByPath.js";
12
+ import { ShadedGeometry } from "../ShadedGeometry.js";
13
+ import { ShadedGeometryFlags } from "../ShadedGeometryFlags.js";
14
+ import { three_object_to_entity_composition } from "../three_object_to_entity_composition.js";
15
+ import { SGMesh } from "./SGMesh.js";
16
+ import { SGMeshEvents } from "./SGMeshEvents.js";
16
17
 
17
18
 
18
19
  /**
@@ -28,6 +29,21 @@ const MAX_CYCLE_COUNT = 128;
28
29
  */
29
30
  const MAX_CYCLE_TIME = 40;
30
31
 
32
+
33
+ /**
34
+ *
35
+ * @param {string} url
36
+ * @param {AssetManager} assetManager
37
+ * @returns {Promise<THREE.Object3D>}
38
+ */
39
+ async function getAsset(url, assetManager) {
40
+
41
+ const assetType = assetTypeByPath(url);
42
+
43
+ const asset = await assetManager.promise(url, assetType);
44
+ }
45
+
46
+
31
47
  export class SGMeshSystem extends System {
32
48
  /**
33
49
  *
@@ -71,12 +87,6 @@ export class SGMeshSystem extends System {
71
87
  */
72
88
  this.__wait_queue_process_index = 0;
73
89
 
74
- /**
75
- * Cache THREE.js objects as we don't use them directly, so we can just keep 1 copy instead of calling {@link Asset#create} every time
76
- * @type {Map<Asset, THREE.Object3D>}
77
- * @private
78
- */
79
- this.__asset_object_cache = new Map();
80
90
  }
81
91
 
82
92
  async startup(em, ready_callback, error_callback) {
@@ -132,14 +142,14 @@ export class SGMeshSystem extends System {
132
142
  }
133
143
 
134
144
  let object;
135
- const cached_object = this.__asset_object_cache.get(asset);
145
+ const cached_object = STATIC_ASSET_CACHE.get(asset);
136
146
 
137
- if (cached_object !== undefined) {
147
+ if (cached_object !== null) {
138
148
  object = cached_object;
139
149
  } else {
140
150
  object = asset.create();
141
151
 
142
- this.__asset_object_cache.set(asset, object);
152
+ STATIC_ASSET_CACHE.set(asset, object);
143
153
  }
144
154
 
145
155
  let entity_node = three_object_to_entity_composition(object);
@@ -0,0 +1,27 @@
1
+ export class AnimatedValueBinding {
2
+ /**
3
+ *
4
+ * @param {BoundValueWriter} writer
5
+ * @param {AnimationCurve[]} curves
6
+ * @returns {AnimatedValueBinding}
7
+ */
8
+ static from(writer: BoundValueWriter, curves: AnimationCurve[]): AnimatedValueBinding;
9
+ constructor(itemSize: any);
10
+ /**
11
+ *
12
+ * @type {BoundValueWriter|null}
13
+ */
14
+ writer: BoundValueWriter | null;
15
+ /**
16
+ *
17
+ * @type {AnimationCurve[]}
18
+ */
19
+ curves: AnimationCurve[];
20
+ /**
21
+ *
22
+ * @param {number} time
23
+ */
24
+ writeAt(time: number): void;
25
+ #private;
26
+ }
27
+ //# sourceMappingURL=AnimatedValueBinding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnimatedValueBinding.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/animation/AnimatedValueBinding.js"],"names":[],"mappings":"AAAA;IAoBI;;;;;OAKG;IACH,8CAHW,gBAAgB,GACd,oBAAoB,CAWhC;IArBD,2BAIC;IAjBD;;;OAGG;IACH,QAFU,mBAAiB,IAAI,CAElB;IAEb;;;OAGG;IACH,QAFU,gBAAgB,CAEf;IAkCX;;;OAGG;IACH,cAFW,MAAM,QAYhB;;CACJ"}
@@ -0,0 +1,61 @@
1
+ export class AnimatedValueBinding {
2
+ /**
3
+ *
4
+ * @type {BoundValueWriter|null}
5
+ */
6
+ writer = null
7
+
8
+ /**
9
+ *
10
+ * @type {AnimationCurve[]}
11
+ */
12
+ curves = []
13
+
14
+
15
+ constructor(itemSize) {
16
+ this.#itemSize = itemSize;
17
+
18
+ this.#sample = new Float32Array(itemSize);
19
+ }
20
+
21
+ /**
22
+ *
23
+ * @param {BoundValueWriter} writer
24
+ * @param {AnimationCurve[]} curves
25
+ * @returns {AnimatedValueBinding}
26
+ */
27
+ static from(writer, curves) {
28
+
29
+ const r = new AnimatedValueBinding(curves.length);
30
+
31
+ r.writer = writer;
32
+ r.curves = curves;
33
+
34
+ return r;
35
+
36
+ }
37
+
38
+ #itemSize = 1;
39
+
40
+ /**
41
+ *
42
+ * @type {Float32Array|null}
43
+ */
44
+ #sample = null;
45
+
46
+ /**
47
+ *
48
+ * @param {number} time
49
+ */
50
+ writeAt(time) {
51
+
52
+ for (let i = 0; i < this.#itemSize; i++) {
53
+ const curve = this.curves[i];
54
+
55
+ this.#sample[i] = curve.evaluate(time)
56
+ }
57
+
58
+
59
+ this.writer.write(this.#sample);
60
+ }
61
+ }
@@ -0,0 +1,7 @@
1
+ export class BoundQuaternionWriter extends BoundValueWriter {
2
+ constructor(quaternion: any);
3
+ write(data: any): void;
4
+ #private;
5
+ }
6
+ import { BoundValueWriter } from "./BoundValueWriter.js";
7
+ //# sourceMappingURL=BoundQuaternionWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoundQuaternionWriter.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundQuaternionWriter.js"],"names":[],"mappings":"AAEA;IAOI,6BAIC;IAED,uBAGC;;CACJ;iCAnBgC,uBAAuB"}
@@ -0,0 +1,20 @@
1
+ import { BoundValueWriter } from "./BoundValueWriter.js";
2
+
3
+ export class BoundQuaternionWriter extends BoundValueWriter {
4
+ /**
5
+ *
6
+ * @type {Quaternion|null}
7
+ */
8
+ #quaternion = null
9
+
10
+ constructor(quaternion) {
11
+ super();
12
+
13
+ this.#quaternion = quaternion;
14
+ }
15
+
16
+ write(data) {
17
+ this.#quaternion.fromArray(data);
18
+ this.#quaternion.normalize();
19
+ }
20
+ }
@@ -0,0 +1,8 @@
1
+ export class BoundValueWriter {
2
+ /**
3
+ *
4
+ * @param {number[]} data
5
+ */
6
+ write(data: number[]): void;
7
+ }
8
+ //# sourceMappingURL=BoundValueWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoundValueWriter.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundValueWriter.js"],"names":[],"mappings":"AAAA;IAEI;;;OAGG;IACH,YAFW,MAAM,EAAE,QAIlB;CACJ"}
@@ -0,0 +1,10 @@
1
+ export class BoundValueWriter {
2
+
3
+ /**
4
+ *
5
+ * @param {number[]} data
6
+ */
7
+ write(data) {
8
+
9
+ }
10
+ }
@@ -0,0 +1,7 @@
1
+ export class BoundVector3Writer extends BoundValueWriter {
2
+ constructor(vector: any);
3
+ write(data: any): void;
4
+ #private;
5
+ }
6
+ import { BoundValueWriter } from "./BoundValueWriter.js";
7
+ //# sourceMappingURL=BoundVector3Writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoundVector3Writer.d.ts","sourceRoot":"","sources":["../../../../../../../../src/engine/graphics/ecs/mesh-v2/aggregate/animation/BoundVector3Writer.js"],"names":[],"mappings":"AAEA;IAOI,yBAIC;IAED,uBAEC;;CACJ;iCAlBgC,uBAAuB"}
@@ -0,0 +1,19 @@
1
+ import { BoundValueWriter } from "./BoundValueWriter.js";
2
+
3
+ export class BoundVector3Writer extends BoundValueWriter {
4
+ /**
5
+ *
6
+ * @type {Vector3|null}
7
+ */
8
+ #vector = null
9
+
10
+ constructor(vector) {
11
+ super();
12
+
13
+ this.#vector = vector;
14
+ }
15
+
16
+ write(data) {
17
+ this.#vector.fromArray(data);
18
+ }
19
+ }
@@ -10,6 +10,10 @@ export class Sampler2D {
10
10
 
11
11
  writeChannel(x: number, y: number, channel: number, value: number): void
12
12
 
13
+ sampleBilinear(x: number, y: number, result: ArrayLike<number>, result_offset?: number): void
14
+
15
+ sampleChannelBilinear(x: number, y: number, channel: number): number
16
+
13
17
  static uint8clamped(itemSize: number, width: number, height: number): Sampler2D
14
18
 
15
19
  static uint8(itemSize: number, width: number, height: number): Sampler2D
@@ -17,7 +17,6 @@ export class CellFilterCache extends CellFilterUnaryOperation {
17
17
  * @type {number}
18
18
  */
19
19
  scale: number;
20
- execute(grid: any, x: any, y: any, rotation: any): any;
21
20
  }
22
21
  import { CellFilterUnaryOperation } from "../core/CellFilterUnaryOperation.js";
23
22
  //# sourceMappingURL=CellFilterCache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CellFilterCache.d.ts","sourceRoot":"","sources":["../../../../../src/generation/filtering/numeric/CellFilterCache.js"],"names":[],"mappings":"AAIA;IAeI;;;;;OAKG;IACH,wCAHW,MAAM,GACJ,eAAe,CAU3B;IA3BD;;;;OAIG;IACH,gBAAqC;IAErC;;;OAGG;IACH,OAFU,MAAM,CAEN;IAsDV,uDAEC;CACJ;yCA1EwC,qCAAqC"}
1
+ {"version":3,"file":"CellFilterCache.d.ts","sourceRoot":"","sources":["../../../../../src/generation/filtering/numeric/CellFilterCache.js"],"names":[],"mappings":"AAIA;IAeI;;;;;OAKG;IACH,wCAHW,MAAM,GACJ,eAAe,CAU3B;IA3BD;;;;OAIG;IACH,gBAAqC;IAErC;;;OAGG;IACH,OAFU,MAAM,CAEN;CAyDb;yCA1EwC,qCAAqC"}