@woosh/meep-engine 2.119.3 → 2.119.5

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.
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.119.3",
8
+ "version": "2.119.5",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1,4 +1,11 @@
1
1
  export class EntityReference {
2
+ /**
3
+ *
4
+ * @param {number} id
5
+ * @param {number} generation
6
+ * @return {EntityReference}
7
+ */
8
+ static from(id: number, generation: number): EntityReference;
2
9
  /**
3
10
  * Entity ID
4
11
  * @type {number}
@@ -9,5 +16,16 @@ export class EntityReference {
9
16
  * @type {number}
10
17
  */
11
18
  generation: number;
19
+ /**
20
+ *
21
+ * @return {number}
22
+ */
23
+ hash(): number;
24
+ /**
25
+ *
26
+ * @param {EntityReference} other
27
+ * @return {boolean}
28
+ */
29
+ equals(other: EntityReference): boolean;
12
30
  }
13
31
  //# sourceMappingURL=EntityReference.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityReference.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityReference.js"],"names":[],"mappings":"AAAA;IACI;;;OAGG;IACH,IAFU,MAAM,CAET;IACP;;;OAGG;IACH,YAFU,MAAM,CAED;CAClB"}
1
+ {"version":3,"file":"EntityReference.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityReference.js"],"names":[],"mappings":"AAEA;IAgCI;;;;;OAKG;IACH,gBAJW,MAAM,cACN,MAAM,GACL,eAAe,CAa1B;IAhDD;;;OAGG;IACH,IAFU,MAAM,CAET;IACP;;;OAGG;IACH,YAFU,MAAM,CAED;IAGf;;;OAGG;IACH,QAFY,MAAM,CAIjB;IAED;;;;OAIG;IACH,cAHW,eAAe,GACd,OAAO,CAMlB;CAoBJ"}
@@ -1,3 +1,5 @@
1
+ import { assert } from "../../core/assert.js";
2
+
1
3
  export class EntityReference {
2
4
  /**
3
5
  * Entity ID
@@ -9,4 +11,43 @@ export class EntityReference {
9
11
  * @type {number}
10
12
  */
11
13
  generation = -1
14
+
15
+
16
+ /**
17
+ *
18
+ * @return {number}
19
+ */
20
+ hash() {
21
+ return this.id ^ this.generation;
22
+ }
23
+
24
+ /**
25
+ *
26
+ * @param {EntityReference} other
27
+ * @return {boolean}
28
+ */
29
+ equals(other) {
30
+ return this.id === other.id
31
+ && this.generation === other.generation
32
+ ;
33
+ }
34
+
35
+ /**
36
+ *
37
+ * @param {number} id
38
+ * @param {number} generation
39
+ * @return {EntityReference}
40
+ */
41
+ static from(id, generation) {
42
+
43
+ assert.isNonNegativeInteger(id, 'id');
44
+ assert.isNonNegativeInteger(generation, 'generation');
45
+
46
+ const r = new EntityReference();
47
+
48
+ r.id = id;
49
+ r.generation = generation;
50
+
51
+ return r;
52
+ }
12
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IncrementalDeltaSet.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/visibility/IncrementalDeltaSet.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH;IACI;;;OAGG;IACH,4BAFoB,CAAC,QAAC,CAAC,KAAE,MAAM,EA0E9B;IArEG;;;;OAIG;IACH,mBAAoB;IAEpB;;;;OAIG;IACH,0BAA0B;IAE1B;;;;OAIG;IACH,wBAAyB;IACzB;;;;OAIG;IACH,8BAA8B;IAE9B;;;;OAIG;IACH,kBAAwB;IAExB;;;OAGG;IACH,SAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,kBAFU,MAAM,CAEoB;IAEpC;;;OAGG;IACH,SAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,WAFU,MAAM,CAEa;IAE7B;;;OAGG;IACH,OAFU,wBAAwB,GAAC,MAAM,CAEE;IAG/C;;;OAGG;IACH,oBAEC;IAED;;;;OAIG;IACH,6BAHgB,GAAG,8BAYlB;IAGD;;;;;OAKG;IACH,kCAJuB,MAAM,wBAEhB,IAAI,CAIhB;IAED;;;;OAIG;IACH,kBAHW,CAAC,GACC,OAAO,CAInB;IAED;;;;;OAKG;IACH,kBAQC;IAED;;;;;OAKG;IACH,wBAEC;IAED;;;;OAIG;IACH,qBAHW,CAAC,GACC,OAAO,CAmBnB;IAED,cAWC;IAED,mBAEC;IAED,yBAeC;IAED,uBAwDC;IAED;;;OAGG;IACH,cAFW,CAAC,QAMX;IAED;;;OAGG;IACH,iBAFW,oBAAoB,CAAC,CAAC,QAWhC;IAIL;;;OAGG;IACH,gCAFU,OAAO,CAEkC;CAPlD;mBAtTkB,0CAA0C;gCAQnD,MAAM"}
1
+ {"version":3,"file":"IncrementalDeltaSet.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/render/visibility/IncrementalDeltaSet.js"],"names":[],"mappings":"AAgBA;;;;GAIG;AACH;IACI;;;OAGG;IACH,4BAFoB,CAAC,QAAC,CAAC,KAAE,MAAM,EA0E9B;IArEG;;;;OAIG;IACH,mBAAoB;IAEpB;;;;OAIG;IACH,0BAA0B;IAE1B;;;;OAIG;IACH,wBAAyB;IACzB;;;;OAIG;IACH,8BAA8B;IAE9B;;;;OAIG;IACH,kBAAwB;IAExB;;;OAGG;IACH,SAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,kBAFU,MAAM,CAEoB;IAEpC;;;OAGG;IACH,SAFU,MAAM,CAEW;IAE3B;;;OAGG;IACH,WAFU,MAAM,CAEa;IAE7B;;;OAGG;IACH,OAFU,wBAAwB,GAAC,MAAM,CAEE;IAG/C;;;OAGG;IACH,oBAEC;IAED;;;;OAIG;IACH,6BAHgB,GAAG,8BAYlB;IAGD;;;;;OAKG;IACH,kCAJuB,MAAM,wBAEhB,IAAI,CAIhB;IAED;;;;OAIG;IACH,kBAHW,CAAC,GACC,OAAO,CAInB;IAED;;;;;OAKG;IACH,kBAQC;IAED;;;;;OAKG;IACH,wBAEC;IAED;;;;OAIG;IACH,kBAHW,CAAC,GACA,OAAO,CAelB;IAED;;;;OAIG;IACH,qBAHW,CAAC,GACC,OAAO,CAmBnB;IAED,cAWC;IAED,mBAEC;IAED,yBAeC;IAED,uBAwDC;IAED;;;OAGG;IACH,cAFW,CAAC,QAMX;IAED;;;OAGG;IACH,iBAFW,oBAAoB,CAAC,CAAC,QAWhC;IAIL;;;OAGG;IACH,gCAFU,OAAO,CAEkC;CAPlD;mBAvUkB,0CAA0C;gCAKnD,MAAM"}
@@ -1,8 +1,8 @@
1
- import Signal from "../../../../core/events/signal/Signal.js";
2
1
  import { assert } from "../../../../core/assert.js";
3
- import { IllegalStateException } from "../../../../core/fsm/exceptions/IllegalStateException.js";
4
- import { binarySearchHighIndex } from "../../../../core/collection/array/binarySearchHighIndex.js";
5
2
  import { array_shrink_to_size } from "../../../../core/collection/array/array_shrink_to_size.js";
3
+ import { binarySearchHighIndex } from "../../../../core/collection/array/binarySearchHighIndex.js";
4
+ import Signal from "../../../../core/events/signal/Signal.js";
5
+ import { IllegalStateException } from "../../../../core/fsm/exceptions/IllegalStateException.js";
6
6
 
7
7
  /**
8
8
  * @readonly
@@ -168,6 +168,26 @@ export class IncrementalDeltaSet {
168
168
  return binarySearchHighIndex(this.__elements, element, this.__compare, 0, this.size - 1);
169
169
  }
170
170
 
171
+ /**
172
+ *
173
+ * @param {V} element
174
+ * @return {boolean}
175
+ */
176
+ forceAdd(element) {
177
+ const i = this.__indexExpected(element);
178
+
179
+ if (this.elements[i] === element) {
180
+ return false;
181
+ }
182
+
183
+ this.__elements.splice(i, 0, element);
184
+
185
+ this.size++;
186
+ this.version++;
187
+
188
+ return true;
189
+ }
190
+
171
191
  /**
172
192
  *
173
193
  * @param {V} element
@@ -94,7 +94,14 @@ export class SoundEmitterSystem extends System<any, any, any, any, any> {
94
94
  * @param {number} entity
95
95
  */
96
96
  unlink(emitter: SoundEmitter, transform: Transform, entity: number): void;
97
+ /**
98
+ *
99
+ * @param {SoundEmitterComponentContext} emitter
100
+ * @returns {boolean}
101
+ */
102
+ emitter_in_hearing_range(emitter: SoundEmitterComponentContext): boolean;
97
103
  update(timeDelta: any): void;
104
+ #private;
98
105
  }
99
106
  import { System } from '../../../ecs/System.js';
100
107
  import { Transform } from '../../../ecs/transform/Transform.js';
@@ -1 +1 @@
1
- {"version":3,"file":"SoundEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterSystem.js"],"names":[],"mappings":"mCAkBU,MAAM;;;;;;AAchB;IACI;;;;;;;OAOG;IACH,yDALW,SAAS,WACT,YAAY,EA0DtB;IAnDG,yDAA6C;IAG7C,2BAAsC;IACtC;;;OAGG;IACH,iBAFU,YAAY,CAEQ;IAC9B,2BAAgC;IAEhC;;;OAGG;IACH,cAAkB;IAWlB;;;OAGG;IACH,MAFU,4BAA4B,EAAE,CAE1B;IAEd;;;OAGG;IACH,WAFU,oBAAoB,4BAA4B,CAAC,CAEE;IAE7D;;;;OAIG;IACH,cAAsB;IAEtB;;;;OAIG;IACH,sBAAsB;IAG1B,0EAKC;IAED,2EAKC;IAED;;;OAGG;IACH,6BAFW,4BAA4B,QAItC;IAED;;;OAGG;IACH,+BAFW,4BAA4B,QAItC;IAED;;;;OAIG;IACH,gCAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,sCAFW,MAAM,QAIhB;IAED,4BAeC;IAED;;;;OAIG;IACH,0BAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,cAJW,YAAY,aACZ,SAAS,UACT,MAAM,QA0ChB;IAED;;;;;OAKG;IACH,gBAJW,YAAY,aACZ,SAAS,UACT,MAAM,QAmBhB;IAED,6BA6GC;CAGJ;uBA9VsB,wBAAwB;0BACrB,qCAAqC;6BAGlC,mBAAmB;6CAEH,mCAAmC;oCAJ5C,4DAA4D"}
1
+ {"version":3,"file":"SoundEmitterSystem.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/sound/ecs/emitter/SoundEmitterSystem.js"],"names":[],"mappings":"mCAmBU,MAAM;;;;;;AAchB;IACI;;;;;;;OAOG;IACH,yDALW,SAAS,WACT,YAAY,EA0DtB;IAnDG,yDAA6C;IAG7C,2BAAsC;IACtC;;;OAGG;IACH,iBAFU,YAAY,CAEQ;IAC9B,2BAAgC;IAEhC;;;OAGG;IACH,cAAkB;IAWlB;;;OAGG;IACH,MAFU,4BAA4B,EAAE,CAE1B;IAEd;;;OAGG;IACH,WAFU,oBAAoB,4BAA4B,CAAC,CAEE;IAE7D;;;;OAIG;IACH,cAAsB;IAEtB;;;;OAIG;IACH,sBAAsB;IAG1B,0EAKC;IAED,2EAKC;IAED;;;OAGG;IACH,6BAFW,4BAA4B,QAItC;IAED;;;OAGG;IACH,+BAFW,4BAA4B,QAItC;IAED;;;;OAIG;IACH,gCAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,sCAFW,MAAM,QAIhB;IAED,4BAeC;IAED;;;;OAIG;IACH,0BAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,cAJW,YAAY,aACZ,SAAS,UACT,MAAM,QA6DhB;IAED;;;;;OAKG;IACH,gBAJW,YAAY,aACZ,SAAS,UACT,MAAM,QAmBhB;IAED;;;;OAIG;IACH,kCAHW,4BAA4B,GAC1B,OAAO,CAKnB;IAQD,6BA6GC;;CAGJ;uBAjYsB,wBAAwB;0BACrB,qCAAqC;6BAGlC,mBAAmB;6CAEH,mCAAmC;oCAJ5C,4DAA4D"}
@@ -1,6 +1,7 @@
1
1
  import { BVH } from "../../../../core/bvh2/bvh3/BVH.js";
2
2
  import { bvh_query_user_data_generic } from "../../../../core/bvh2/bvh3/query/bvh_query_user_data_generic.js";
3
3
  import { BVHQueryIntersectsSphere } from "../../../../core/bvh2/bvh3/query/BVHQueryIntersectsSphere.js";
4
+ import Vector3 from "../../../../core/geom/Vector3.js";
4
5
  import { invokeObjectCompare } from "../../../../core/model/object/invokeObjectCompare.js";
5
6
  import { GameAssetType } from "../../../asset/GameAssetType.js";
6
7
  import { SoundAssetLoader } from "../../../asset/loaders/SoundAssetLoader.js";
@@ -208,10 +209,29 @@ export class SoundEmitterSystem extends System {
208
209
 
209
210
  ctx.targetNode = targetNode;
210
211
 
211
- ctx.link();
212
+ {
213
+ // wire context if it's in hearing range
214
+ const distance = ctx.transform.position.distanceTo(this.#cached_listener_position);
215
+
216
+
217
+ if (distance <= ctx.emitter.distanceMax) {
218
+
219
+ // add immediately
220
+ this.activeSet.forceAdd(ctx);
221
+
222
+ if (ctx.emitter.getFlag(SoundEmitterFlags.Attenuation)) {
223
+ // is attenuated
224
+ ctx.emitter.writeAttenuationVolume(distance);
225
+ }
226
+
227
+ ctx.connect();
228
+ }
229
+ }
212
230
 
213
231
  ctx.update();
214
232
 
233
+ ctx.link();
234
+
215
235
  this.data[entity] = ctx;
216
236
 
217
237
  this.__linkedCount++;
@@ -242,6 +262,22 @@ export class SoundEmitterSystem extends System {
242
262
  this.__linkedCount--;
243
263
  }
244
264
 
265
+ /**
266
+ *
267
+ * @param {SoundEmitterComponentContext} emitter
268
+ * @returns {boolean}
269
+ */
270
+ emitter_in_hearing_range(emitter) {
271
+
272
+
273
+ }
274
+
275
+ /**
276
+ * Used to decide whether emitter is in hearing range when it is being added
277
+ * @type {Vector3}
278
+ */
279
+ #cached_listener_position = new Vector3();
280
+
245
281
  update(timeDelta) {
246
282
  const entityManager = this.entityManager;
247
283
  const ecd = entityManager.dataset;
@@ -255,13 +291,13 @@ export class SoundEmitterSystem extends System {
255
291
 
256
292
  const soundListener = ecd.getAnyComponent(SoundListener);
257
293
 
258
- let listenerTransform;
259
-
260
294
  if (soundListener.entity !== -1) {
261
- listenerTransform = ecd.getComponent(soundListener.entity, Transform);
295
+ const listenerTransform = ecd.getComponent(soundListener.entity, Transform);
262
296
 
263
297
  const listenerPosition = listenerTransform.position;
264
298
 
299
+ this.#cached_listener_position.copy(listenerPosition);
300
+
265
301
  const query = BVHQueryIntersectsSphere.from([listenerPosition.x, listenerPosition.y, listenerPosition.z, 0]);
266
302
 
267
303
  const matchCount = bvh_query_user_data_generic(