@woosh/meep-engine 2.48.12 → 2.48.14

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 (68) hide show
  1. package/package.json +1 -1
  2. package/src/core/collection/queue/Deque.d.ts +9 -0
  3. package/src/core/collection/queue/Deque.js +3 -0
  4. package/src/core/collection/queue/Deque.spec.js +51 -0
  5. package/src/core/font/FontAssetLoader.js +2 -2
  6. package/src/core/math/bessel_3.js +3 -1
  7. package/src/core/math/noise/create_noise_2d.js +193 -0
  8. package/src/core/path/computeFileExtension.js +3 -2
  9. package/src/engine/Engine.js +14 -8
  10. package/src/engine/achievements/AchievementManager.js +16 -16
  11. package/src/engine/asset/AssetManager.d.ts +10 -5
  12. package/src/engine/asset/AssetManager.js +79 -24
  13. package/src/engine/asset/AssetManager.spec.js +1 -1
  14. package/src/engine/asset/AssetRequest.js +19 -1
  15. package/src/engine/asset/AssetRequestScope.d.ts +3 -0
  16. package/src/engine/asset/AssetRequestScope.js +64 -0
  17. package/src/engine/asset/PendingAsset.js +7 -7
  18. package/src/engine/asset/loaders/ArrayBufferLoader.js +1 -1
  19. package/src/engine/asset/loaders/AssetLoader.d.ts +9 -2
  20. package/src/engine/asset/loaders/AssetLoader.js +19 -16
  21. package/src/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
  22. package/src/engine/asset/loaders/GLTFAssetLoader.js +2 -2
  23. package/src/engine/asset/loaders/JavascriptAssetLoader.js +17 -12
  24. package/src/engine/asset/loaders/JsonAssetLoader.js +1 -1
  25. package/src/engine/asset/loaders/LegacyThreeJSONAssetLoader.js +4 -1
  26. package/src/engine/asset/loaders/SVGAssetLoader.js +1 -1
  27. package/src/engine/asset/loaders/SoundAssetLoader.js +4 -6
  28. package/src/engine/asset/loaders/TextAssetLoader.js +1 -1
  29. package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +24 -17
  30. package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts +1 -1
  31. package/src/engine/asset/loaders/texture/TextureAssetLoader.js +1 -1
  32. package/src/engine/asset/preloader/Preloader.js +1 -1
  33. package/src/engine/development/performance/MetricStatistics.js +7 -5
  34. package/src/engine/development/performance/RingBufferMetric.js +2 -2
  35. package/src/engine/ecs/foliage/ecs/Foliage2System.js +7 -5
  36. package/src/engine/ecs/foliage/ecs/InstancedMeshUtils.js +14 -1
  37. package/src/engine/ecs/gui/GUIElementSystem.d.ts +1 -1
  38. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +2 -2
  39. package/src/engine/ecs/terrain/ecs/PromiseSamplerHeight.js +16 -9
  40. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +3 -21
  41. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +16 -11
  42. package/src/engine/ecs/terrain/serialization/TerrainSerializationAdapter.js +1 -1
  43. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +18 -15
  44. package/src/engine/graphics/ecs/camera/pp/PerfectPanner.js +4 -2
  45. package/src/engine/graphics/ecs/mesh/MeshSystem.js +1 -1
  46. package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +6 -4
  47. package/src/engine/graphics/material/getTextureImmediate.js +5 -3
  48. package/src/engine/graphics/texture/3d/SingleChannelSampler3D.js +146 -0
  49. package/src/engine/graphics/texture/3d/scs3d_read_2d_slice.js +26 -0
  50. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +1 -1
  51. package/src/engine/graphics/texture/sampler/Sampler2D.js +22 -13
  52. package/src/engine/graphics/texture/sampler/filter/box.js +3 -3
  53. package/src/engine/graphics/texture/sampler/filter/kaiser_bessel_window.js +2 -1
  54. package/src/engine/graphics/texture/sampler/genericResampleSampler2D.js +9 -8
  55. package/src/engine/graphics/texture/sampler/loadSampler2D.js +18 -16
  56. package/src/engine/graphics/texture/sampler/sampler2d_scale_down_linear.js +8 -11
  57. package/src/engine/graphics/texture/virtual/tile/TileLoader.js +1 -1
  58. package/src/engine/graphics/trail/x/RibbonXPlugin.js +5 -3
  59. package/src/engine/knowledge/database/StaticKnowledgeDataTable.js +1 -1
  60. package/src/engine/physics/fluid/FluidField.js +153 -1
  61. package/src/engine/physics/fluid/prototype.js +201 -0
  62. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +67 -0
  63. package/src/engine/sound/ecs/emitter/loadSoundTrackAsset.js +1 -1
  64. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +17 -12
  65. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +14 -10
  66. package/src/view/elements/MeshPreview.js +66 -64
  67. package/src/view/elements/image/SvgImageView.js +8 -6
  68. package/src/view/renderModel.js +1 -1
@@ -38,7 +38,13 @@ export class AssetRequest {
38
38
  * Higher priority requests should be handled first
39
39
  * @type {number}
40
40
  */
41
- this.priority = 0;
41
+ this.priority = 1;
42
+
43
+ /**
44
+ *
45
+ * @type {AssetRequestScope}
46
+ */
47
+ this.scope = null;
42
48
 
43
49
  /**
44
50
  *
@@ -47,6 +53,18 @@ export class AssetRequest {
47
53
  this.flags = 0;
48
54
  }
49
55
 
56
+ get scoped_priority() {
57
+ const _p = this.priority;
58
+
59
+ const scope = this.scope;
60
+
61
+ if (scope === null) {
62
+ return _p;
63
+ }
64
+
65
+ return _p * scope.final_priority;
66
+ }
67
+
50
68
  /**
51
69
  *
52
70
  * @param {number|AssetRequestFlags} flag
@@ -0,0 +1,3 @@
1
+ export declare class AssetRequestScope{
2
+
3
+ }
@@ -0,0 +1,64 @@
1
+ let id_counter = 0;
2
+
3
+ export class AssetRequestScope {
4
+ id = id_counter++;
5
+
6
+ priority = 1
7
+
8
+ /**
9
+ *
10
+ * @type {AssetRequestScope[]}
11
+ */
12
+ sources = []
13
+
14
+
15
+ get final_priority() {
16
+ const sources = this.sources;
17
+ const n = sources.length;
18
+
19
+ if (n === 0) {
20
+ return this.priority;
21
+ }
22
+
23
+
24
+ let max = sources[0].final_priority;
25
+
26
+ for (let i = 0; i < n; i++) {
27
+ const source = sources[i];
28
+
29
+ const source_priority = source.final_priority;
30
+
31
+ if (source_priority > max) {
32
+ max = source_priority;
33
+ }
34
+ }
35
+
36
+ return this.priority * max;
37
+ }
38
+
39
+ /**
40
+ *
41
+ * @param {AssetRequestScope[]} sources
42
+ * @return {AssetRequestScope}
43
+ */
44
+ static from(sources) {
45
+ const r = new AssetRequestScope();
46
+
47
+ r.sources = sources;
48
+
49
+ return r;
50
+ }
51
+
52
+ toString() {
53
+ const sources = this.sources.length > 0 ? `[ ${this.sources.join(', ')} ]` : 'none';
54
+ return `Scope{ id:${this.id}, sources:${sources} }`;
55
+ }
56
+
57
+ }
58
+
59
+
60
+ /**
61
+ * @readonly
62
+ * @type {Readonly<AssetRequestScope>}
63
+ */
64
+ AssetRequestScope.GLOBAL = Object.freeze(new AssetRequestScope());
@@ -38,18 +38,18 @@ export class PendingAsset {
38
38
  * @return {number}
39
39
  */
40
40
  get priority() {
41
- let max_priority = 0;
42
-
43
41
  const requests = this.requests;
44
- const n = requests.length;
42
+ const request_count = requests.length;
45
43
 
46
- if (n > 0) {
47
- max_priority = requests[0].priority;
44
+ if (request_count === 0) {
45
+ return 0;
48
46
  }
49
47
 
50
- for (let i = 1; i < n; i++) {
48
+ let max_priority = requests[0].priority;
49
+
50
+ for (let i = 1; i < request_count; i++) {
51
51
  const request = requests[i];
52
- const priority = request.priority;
52
+ const priority = request.scoped_priority;
53
53
 
54
54
  if (priority > max_priority) {
55
55
  max_priority = request;
@@ -22,7 +22,7 @@ export class ArrayBufferLoader extends AssetLoader {
22
22
  this.__fetch_priority = fetch_priority;
23
23
  }
24
24
 
25
- load(path, success, failure = console.error, progress = noop) {
25
+ load(scope, path, success, failure = console.error, progress = noop) {
26
26
  const coc = this.assetManager !== null ? this.assetManager.crossOriginConfig : CrossOriginConfig.default;
27
27
 
28
28
  const headers = new Headers();
@@ -1,5 +1,12 @@
1
1
  import {Asset} from "../Asset";
2
+ import {AssetRequestScope} from "../AssetRequestScope";
2
3
 
3
- export class AssetLoader<T> {
4
- public load(path: string, success: (asset: Asset<T>) => void, failure: (reason: any) => void, progress: (current: number, total: number) => void)
4
+ export declare class AssetLoader<T, CTX> {
5
+ public load(
6
+ scope: AssetRequestScope,
7
+ path: string,
8
+ success: (asset: Asset<T>) => void,
9
+ failure: (reason: any) => void,
10
+ progress: (current: number, total: number) => void
11
+ )
5
12
  }
@@ -1,26 +1,28 @@
1
+ /**
2
+ * @template CTX
3
+ * @template Asset
4
+ */
1
5
  export class AssetLoader {
2
- constructor() {
3
- /**
4
- *
5
- * @type {AssetManager}
6
- */
7
- this.assetManager = null;
6
+ /**
7
+ *
8
+ * @type {AssetManager}
9
+ */
10
+ assetManager = null;
8
11
 
9
- /**
10
- *
11
- * @type {Engine}
12
- */
13
- this.engine = null;
14
- }
12
+ /**
13
+ *
14
+ * @type {CTX}
15
+ */
16
+ context = null;
15
17
 
16
18
  /**
17
19
  *
18
20
  * @param {AssetManager} assetManager
19
- * @param {Engine} engine
21
+ * @param {CTX} context
20
22
  */
21
- async link(assetManager, engine) {
23
+ async link(assetManager, context) {
22
24
  this.assetManager = assetManager;
23
- this.engine = engine;
25
+ this.context = context;
24
26
  }
25
27
 
26
28
  /**
@@ -32,12 +34,13 @@ export class AssetLoader {
32
34
 
33
35
  /**
34
36
  *
37
+ * @param {AssetRequestScope} scope
35
38
  * @param {string} path
36
39
  * @param {function(Asset)} success
37
40
  * @param {function} failure
38
41
  * @param {function(current:number, total:number)} progress
39
42
  */
40
- load(path, success, failure, progress) {
43
+ load(scope, path, success, failure, progress) {
41
44
  failure('Not Implemented');
42
45
  }
43
46
  }
@@ -1,6 +1,6 @@
1
1
  import {AssetLoader} from "./AssetLoader";
2
2
  import {Object3D} from "three";
3
3
 
4
- export class GLTFAssetLoader extends AssetLoader<Object3D> {
4
+ export class GLTFAssetLoader extends AssetLoader<Object3D, any> {
5
5
  setDracoDecoderPath(path: string): void
6
6
  }
@@ -241,7 +241,7 @@ export class GLTFAssetLoader extends AssetLoader {
241
241
  *
242
242
  * @type {GraphicsEngine}
243
243
  */
244
- const graphics = this.engine.graphics;
244
+ const graphics = this.context.graphics;
245
245
 
246
246
  /**
247
247
  *
@@ -273,7 +273,7 @@ export class GLTFAssetLoader extends AssetLoader {
273
273
  }
274
274
 
275
275
 
276
- load(path, success, failure, progress) {
276
+ load(scope, path, success, failure, progress) {
277
277
  const loader = this.loader;
278
278
  const texture_cache = this.__texture_cache;
279
279
 
@@ -21,22 +21,27 @@ class JavascriptAsset extends Asset {
21
21
 
22
22
  export class JavascriptAssetLoader extends AssetLoader {
23
23
 
24
- load(path, success, failure, progress) {
25
- this.assetManager.get(path, GameAssetType.Text, (textAsset) => {
24
+ load(scope, path, success, failure, progress) {
25
+ this.assetManager.get({
26
+ path: path,
27
+ scope,
28
+ type: GameAssetType.Text,
29
+ callback: (textAsset) => {
26
30
 
27
- const text = textAsset.create();
31
+ const text = textAsset.create();
28
32
 
29
- let asset;
33
+ let asset;
30
34
 
31
- try {
32
- asset = new JavascriptAsset(text);
33
- } catch (e) {
34
- failure(e);
35
- return;
36
- }
35
+ try {
36
+ asset = new JavascriptAsset(text);
37
+ } catch (e) {
38
+ failure(e);
39
+ return;
40
+ }
37
41
 
38
- success(asset);
42
+ success(asset);
39
43
 
40
- }, failure, progress);
44
+ }, failure: failure, progress: progress
45
+ });
41
46
  }
42
47
  }
@@ -2,7 +2,7 @@ import xhr from "../../network/xhr.js";
2
2
  import { AssetLoader } from "./AssetLoader.js";
3
3
 
4
4
  export class JsonAssetLoader extends AssetLoader {
5
- load(path, callback, failure, progress) {
5
+ load(scope, path, callback, failure, progress) {
6
6
  xhr(path, function (data) {
7
7
  let object;
8
8
  try {
@@ -20,8 +20,11 @@ const placeholderTexture = checkerTexture.create();
20
20
 
21
21
  const placeholderMaterial = new ThreeMeshLambertMaterial({ map: placeholderTexture });
22
22
 
23
+ /**
24
+ * @deprecated
25
+ */
23
26
  export class LegacyThreeJSONAssetLoader extends AssetLoader {
24
- load(path, success, failure, progress) {
27
+ load(scope, path, success, failure, progress) {
25
28
 
26
29
  console.warn(`JSON loader is deprecated. Attempting to load model '${path}'`);
27
30
 
@@ -2,7 +2,7 @@ import { AssetLoader } from "./AssetLoader.js";
2
2
 
3
3
  export class SVGAssetLoader extends AssetLoader {
4
4
 
5
- load(url, callback, failure, progress) {
5
+ load(scope,url, callback, failure, progress) {
6
6
  const xhr = new XMLHttpRequest();
7
7
  xhr.open('GET', url, true);
8
8
 
@@ -13,10 +13,10 @@ export class SoundAssetLoader extends AssetLoader {
13
13
  *
14
14
  * @type {AudioContext}
15
15
  */
16
- this.context = context;
16
+ this.audioContext = context;
17
17
  }
18
18
 
19
- load(path, success, failure, progress) {
19
+ load(scope, path, success, failure, progress) {
20
20
  // Load a sound file using an ArrayBuffer XMLHttpRequest.
21
21
  const request = new XMLHttpRequest();
22
22
 
@@ -24,16 +24,14 @@ export class SoundAssetLoader extends AssetLoader {
24
24
 
25
25
  request.responseType = "arraybuffer";
26
26
 
27
- const context = this.context;
27
+ const context = this.audioContext;
28
28
 
29
29
  request.onload = function (e) {
30
30
  //decode works asynchronously, this is important to prevent lag in main thread
31
31
  context.decodeAudioData(request.response, function (buffer) {
32
32
  const byteSize = e.total;
33
33
 
34
- const asset = new Asset(function () {
35
- return buffer;
36
- }, byteSize);
34
+ const asset = new Asset(() => buffer, byteSize);
37
35
 
38
36
  success(asset);
39
37
  }, failure);
@@ -2,7 +2,7 @@ import xhr from "../../network/xhr.js";
2
2
  import { AssetLoader } from "./AssetLoader.js";
3
3
 
4
4
  export class TextAssetLoader extends AssetLoader {
5
- load(path, callback, failure, progress) {
5
+ load(scope,path, callback, failure, progress) {
6
6
  xhr(path, function (data) {
7
7
  const asset = {
8
8
  create: function () {
@@ -32,11 +32,12 @@ export class ImageRGBADataLoader extends AssetLoader {
32
32
  /**
33
33
  *
34
34
  * @param {string} path
35
+ * @param {AssetRequestScope} scope
35
36
  * @returns {Promise<{data:ArrayBuffer, width: number, height:number, itemSize: number, bitDepth:number}>}
36
37
  * @private
37
38
  */
38
- async __decode_via_worker(path) {
39
- const asset = await this.assetManager.promise(path, ASSET_TYPE_ARRAY_BUFFER);
39
+ async __decode_via_worker(path, scope) {
40
+ const asset = await this.assetManager.promise(path, ASSET_TYPE_ARRAY_BUFFER, { scope });
40
41
 
41
42
  /**
42
43
  * @type {ArrayBuffer}
@@ -49,12 +50,13 @@ export class ImageRGBADataLoader extends AssetLoader {
49
50
  /**
50
51
  *
51
52
  * @param {String} path
53
+ * @param {AssetRequestScope} scope
52
54
  * @return {Promise<ImageRGBADataAsset>}
53
55
  * @private
54
56
  */
55
- async __standard(path) {
57
+ async __standard(path, scope) {
56
58
 
57
- const bitmap = await this.__decode_via_worker(path);
59
+ const bitmap = await this.__decode_via_worker(path, scope);
58
60
 
59
61
 
60
62
  let data;
@@ -75,32 +77,37 @@ export class ImageRGBADataLoader extends AssetLoader {
75
77
  return new ImageRGBADataAsset(data, bitmap.width, bitmap.height, bitmap.itemSize);
76
78
  }
77
79
 
78
- load(path, success, failure, progress) {
80
+ load(scope, path, success, failure, progress) {
79
81
  const extension = computeFileExtension(path);
80
82
 
81
83
  if (extension === 'dds') {
82
84
  //compressed texture
83
- this.assetManager.get(path, GameAssetType.Texture, asset => {
85
+ this.assetManager.get({
86
+ path: path,
87
+ scope,
88
+ type: GameAssetType.Texture,
89
+ callback: asset => {
84
90
 
85
- /**
86
- *
87
- * @type {Texture}
88
- */
89
- const texture = asset.create();
91
+ /**
92
+ *
93
+ * @type {Texture}
94
+ */
95
+ const texture = asset.create();
90
96
 
91
- const sampler2D = convertTexture2Sampler2D(texture);
97
+ const sampler2D = convertTexture2Sampler2D(texture);
92
98
 
93
- texture.dispose();
99
+ texture.dispose();
94
100
 
95
- const f = new ImageRGBADataAsset(sampler2D.data, sampler2D.width, sampler2D.height, sampler2D.itemSize);
101
+ const f = new ImageRGBADataAsset(sampler2D.data, sampler2D.width, sampler2D.height, sampler2D.itemSize);
96
102
 
97
- success(f);
103
+ success(f);
98
104
 
99
- }, failure, progress);
105
+ }, failure: failure, progress: progress
106
+ });
100
107
 
101
108
  } else {
102
109
 
103
- this.__standard(path).then(success, failure);
110
+ this.__standard(path, scope).then(success, failure);
104
111
 
105
112
  }
106
113
  }
@@ -1,6 +1,6 @@
1
1
  import {AssetLoader} from "../AssetLoader";
2
2
  import {Texture} from "three";
3
3
 
4
- export class TextureAssetLoader extends AssetLoader<Texture> {
4
+ export class TextureAssetLoader extends AssetLoader<Texture, any> {
5
5
 
6
6
  }
@@ -4,7 +4,7 @@ import { loadStandardImageTexture } from "./loadStandardImageTexture.js";
4
4
  import { computeFileExtension } from "../../../../core/path/computeFileExtension.js";
5
5
 
6
6
  export class TextureAssetLoader extends AssetLoader {
7
- load(path, success, failure, progress) {
7
+ load(scope, path, success, failure, progress) {
8
8
  //figure out what kind of a texture it is
9
9
  let fileExtension = computeFileExtension(path);
10
10
 
@@ -158,7 +158,7 @@ Preloader.prototype.load = function (assetManager) {
158
158
  });
159
159
 
160
160
  batch.forEach(function (def) {
161
- assetManager.get(def.uri, def.type, assetLoadSuccess, assetLoadFailed);
161
+ assetManager.get({ path: def.uri, type: def.type, callback: assetLoadSuccess, failure: assetLoadFailed });
162
162
  });
163
163
  }
164
164
 
@@ -1,8 +1,10 @@
1
1
  export class MetricStatistics {
2
- constructor() {
3
- this.mean = 0;
4
- this.meadian = 0;
5
- this.max = 0;
6
- this.min = 0;
2
+ mean = 0;
3
+ median = 0;
4
+ max = 0;
5
+ min = 0;
6
+
7
+ toString() {
8
+ return `{min:${this.min}, max:${this.max}, mean:${this.mean}, median:${this.median}`;
7
9
  }
8
10
  }
@@ -49,7 +49,7 @@ export class RingBufferMetric extends AbstractMetric {
49
49
 
50
50
  // no data
51
51
  result.mean = 0;
52
- result.meadian = 0;
52
+ result.median = 0;
53
53
  result.min = 0;
54
54
  result.max = 0;
55
55
 
@@ -58,7 +58,7 @@ export class RingBufferMetric extends AbstractMetric {
58
58
  } else {
59
59
 
60
60
  result.mean = computeStatisticalMean(array, 0, data_count);
61
- result.meadian = computeStatisticalPartialMedian(array, 0, data_count);
61
+ result.median = computeStatisticalPartialMedian(array, 0, data_count);
62
62
  result.max = computeArrayMax(array, 0, data_count);
63
63
  result.min = computeArrayMin(array, 0, data_count);
64
64
 
@@ -38,12 +38,14 @@ export function loadFoliageLayer(layer, assetManager) {
38
38
  reject(`Undetermined asset type for url='${modelURL}'`);
39
39
  }
40
40
 
41
- assetManager.get(modelURL, assetType, function (asset) {
42
- const mesh = asset.create();
43
- instancedFoliage.setInstance(mesh.geometry, mesh.material);
41
+ assetManager.get({
42
+ path: modelURL, type: assetType, callback: function (asset) {
43
+ const mesh = asset.create();
44
+ instancedFoliage.setInstance(mesh.geometry, mesh.material);
44
45
 
45
- resolve();
46
- }, reject);
46
+ resolve();
47
+ }, failure: reject
48
+ });
47
49
  });
48
50
 
49
51
  const result = mesh.then(function () {
@@ -78,6 +78,7 @@ export function convertInstancedMeshComponents2Entities(dataset, assetManager) {
78
78
  export function optimizeIndividualMeshesEntitiesToInstances(dataset, threshold = 30) {
79
79
  //get all entities that have a translation and mesh only
80
80
  const candidates = {};
81
+ const not_loaded = {};
81
82
 
82
83
  /**
83
84
  *
@@ -99,7 +100,14 @@ export function optimizeIndividualMeshesEntitiesToInstances(dataset, threshold =
99
100
  }
100
101
 
101
102
  if (!mesh.getFlag(MeshFlags.Loaded)) {
102
- console.warn(`Mesh[${entity}] not loaded - '${model_url}'`);
103
+ let misses = not_loaded[model_url];
104
+
105
+ if (misses === undefined) {
106
+ misses = not_loaded[model_url] = [];
107
+ }
108
+
109
+ misses.push(entity);
110
+
103
111
  return;
104
112
  }
105
113
 
@@ -125,6 +133,11 @@ export function optimizeIndividualMeshesEntitiesToInstances(dataset, threshold =
125
133
  // traverse entities that have only Mesh and a Transform
126
134
  dataset.traverseEntitiesExact([Mesh, Transform], visitMeshTransformEntity);
127
135
 
136
+ for (const mesh_url in not_loaded) {
137
+
138
+ console.warn(`Mesh[${mesh_url}] not loaded, ${not_loaded[mesh_url].length} entities affected`);
139
+ }
140
+
128
141
  const tasks = [];
129
142
 
130
143
  const foliage2 = new InstancedMeshComponent();
@@ -1,7 +1,7 @@
1
1
  import {System} from "../System";
2
2
  import Engine from "../../Engine";
3
3
  import View from "../../../view/View";
4
- import {GUIElement} from "./GUIElement";
4
+ import GUIElement from "./GUIElement";
5
5
 
6
6
  export default class GUIElementSystem extends System<GUIElement> {
7
7
  constructor(container: View, engine: Engine)
@@ -4,9 +4,9 @@ import { AttachmentSockets } from "../AttachmentSockets.js";
4
4
  import { Asset } from "../../../asset/Asset.js";
5
5
 
6
6
  export class AttachmentSocketsAssetLoader extends AssetLoader {
7
- load(path, success, failure, progress) {
7
+ load(scope, path, success, failure, progress) {
8
8
 
9
- this.assetManager.promise(path, GameAssetType.JSON)
9
+ this.assetManager.promise(path, GameAssetType.JSON, { scope })
10
10
  .then(asset => {
11
11
 
12
12
  const json = asset.create();
@@ -41,19 +41,26 @@ export function promiseSamplerHeight(zRange, heightMapURL, assetManager) {
41
41
  fulfill(defaultSampler);
42
42
  } else if (heightMapURL.endsWith('.bin')) {
43
43
  //load texture from a binary file
44
- assetManager.get(heightMapURL, GameAssetType.ArrayBuffer, assetObtained, reject);
44
+ assetManager.get({
45
+ path: heightMapURL,
46
+ type: GameAssetType.ArrayBuffer,
47
+ callback: assetObtained,
48
+ failure: reject
49
+ });
45
50
  } else {
46
- assetManager.get(heightMapURL, GameAssetType.Image, function (asset) {
47
- const image = asset.create();
51
+ assetManager.get({
52
+ path: heightMapURL, type: GameAssetType.Image, callback: function (asset) {
53
+ const image = asset.create();
48
54
 
49
- // plane
50
- const imgWidth = image.width;
51
- const imgHeight = image.height;
55
+ // plane
56
+ const imgWidth = image.width;
57
+ const imgHeight = image.height;
52
58
 
53
- const samplerHeight = rgbaData2valueSampler2D(image.data, imgWidth, imgHeight, zRange, -zRange / 2);
59
+ const samplerHeight = rgbaData2valueSampler2D(image.data, imgWidth, imgHeight, zRange, -zRange / 2);
54
60
 
55
- fulfill(samplerHeight);
56
- }, reject);
61
+ fulfill(samplerHeight);
62
+ }, failure: reject
63
+ });
57
64
  }
58
65
  });
59
66
  }