@woosh/meep-engine 2.29.0 → 2.30.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 (27) hide show
  1. package/core/process/worker/WorkerBuilder.js +5 -1
  2. package/engine/Engine.d.ts +5 -1
  3. package/engine/Engine.js +35 -17
  4. package/engine/EngineHarness.js +9 -1
  5. package/engine/asset/loaders/image/codec/CodecWithFallback.js +1 -1
  6. package/engine/asset/loaders/image/png/PNGReader.js +19 -21
  7. package/engine/ecs/EntityManager.js +10 -0
  8. package/engine/graphics/ecs/camera/topdown/ComputeCameraFacingVector.js +21 -0
  9. package/engine/graphics/ecs/camera/topdown/TopDownCameraController.js +10 -14
  10. package/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +4 -24
  11. package/engine/graphics/particles/particular/engine/ParticularEngine.js +1 -0
  12. package/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +3 -0
  13. package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +27 -15
  14. package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +30 -10
  15. package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +4 -6
  16. package/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +6 -3
  17. package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +271 -1
  18. package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +164 -0
  19. package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +10 -555
  20. package/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +6 -0
  21. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +16 -1
  22. package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +41 -0
  23. package/engine/graphics/render/buffer/FrameBufferManager.js +2 -0
  24. package/engine/graphics/render/visibility/IncrementalDeltaSet.js +5 -0
  25. package/engine/graphics/render/visibility/VisibilityComputer.js +6 -6
  26. package/engine/graphics/render/visibility/VisibilityFilter.js +10 -0
  27. package/package.json +1 -1
@@ -0,0 +1,41 @@
1
+ import { ParticleParameters } from "../emitter/ParticleParameters.js";
2
+ import {
3
+ PARTICLE_ATTRIBUTE_COLOR,
4
+ PARTICLE_ATTRIBUTE_SIZE,
5
+ PARTICLE_ATTRIBUTE_SIZE_INITIAL
6
+ } from "../emitter/PARTICLE_ATTRIBUTES.js";
7
+
8
+ const v4 = new Float32Array(4);
9
+
10
+ /**
11
+ *
12
+ * @param {number} particle_index
13
+ * @param {ParticlePool} particles
14
+ * @param {ParticleLayer} layer
15
+ * @param {number} normalized_age
16
+ */
17
+ export function update_parameters(particle_index, particles, layer, normalized_age) {
18
+ const tracks = layer.parameterTracks;
19
+
20
+ // update color
21
+ const param_color = tracks.getTrackByName(ParticleParameters.Color);
22
+
23
+ if (param_color !== undefined) {
24
+ param_color.track.sample(normalized_age, v4);
25
+ particles.writeAttributeVector4(particle_index, PARTICLE_ATTRIBUTE_COLOR, v4[0], v4[1], v4[2], v4[3]);
26
+ }
27
+
28
+ // update size
29
+ const param_scale = tracks.getTrackByName(ParticleParameters.Scale);
30
+
31
+ const initial_size = particles.readAttributeScalar(particle_index, PARTICLE_ATTRIBUTE_SIZE_INITIAL);
32
+
33
+ if (param_scale !== undefined) {
34
+ param_scale.track.sample(normalized_age, v4);
35
+
36
+ const scale = v4[0];
37
+ particles.writeAttributeScalar(particle_index, PARTICLE_ATTRIBUTE_SIZE, scale * initial_size);
38
+ } else {
39
+ particles.writeAttributeScalar(particle_index, PARTICLE_ATTRIBUTE_SIZE, initial_size);
40
+ }
41
+ }
@@ -125,6 +125,8 @@ FrameBufferManager.prototype.computeRenderOrder = function () {
125
125
  * @returns {FrameBuffer|undefined}
126
126
  */
127
127
  FrameBufferManager.prototype.getById = function (id) {
128
+ assert.isString(id, 'id');
129
+
128
130
  return this.buffers.find(function (buffer) {
129
131
  return buffer.id === id;
130
132
  });
@@ -102,6 +102,11 @@ export class IncrementalDeltaSet {
102
102
  }
103
103
 
104
104
  clear() {
105
+ if (this.size === 0) {
106
+ // already empty
107
+ return;
108
+ }
109
+
105
110
  this.elements.splice(0, this.size);
106
111
  this.size = 0;
107
112
  this.flags.reset();
@@ -3,6 +3,11 @@ import { frustumFromCamera } from "../../ecs/camera/CameraSystem.js";
3
3
  import { assert } from "../../../../core/assert.js";
4
4
 
5
5
  const frustum = new Frustum();
6
+ /**
7
+ *
8
+ * @type {VisibilityFilter[]}
9
+ */
10
+ const objectFilters = [];
6
11
 
7
12
  export class VisibilityComputer {
8
13
  constructor() {
@@ -104,11 +109,6 @@ export class VisibilityComputer {
104
109
  //clear visible set
105
110
  layer.visibleSet.initializeUpdate();
106
111
 
107
- /**
108
- *
109
- * @type {VisibilityFilter[]}
110
- */
111
- const objectFilters = [];
112
112
  /**
113
113
  *
114
114
  * @type {function[]}
@@ -124,7 +124,7 @@ export class VisibilityComputer {
124
124
  const f = filters[i];
125
125
 
126
126
  if (f.enabled && f.layerPredicate(layer)) {
127
- objectFilters.push(f);
127
+ objectFilters[objectFilterCount] = f;
128
128
  objectFilterExecutors.push(f.objectPredicateExecute);
129
129
 
130
130
  objectFilterCount++;
@@ -1,4 +1,5 @@
1
1
  import { noop, returnTrue } from "../../../../core/function/Functions.js";
2
+ import { assert } from "../../../../core/assert.js";
2
3
 
3
4
  export class VisibilityFilter {
4
5
  constructor({
@@ -9,12 +10,21 @@ export class VisibilityFilter {
9
10
  layerPredicate = returnTrue
10
11
  }) {
11
12
 
13
+ assert.isString(name, 'name');
14
+
15
+ /**
16
+ * @type {string}
17
+ */
12
18
  this.name = name;
13
19
 
14
20
  this.objectPredicateExecute = objectPredicateExecute;
15
21
  this.objectPredicateInitialize = objectPredicateInitialize;
16
22
  this.objectPredicateFinalize = objectPredicateFinalize;
17
23
 
24
+ /**
25
+ *
26
+ * @type {function(RenderLayer): boolean}
27
+ */
18
28
  this.layerPredicate = layerPredicate;
19
29
 
20
30
  /**
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "productName": "Meep",
5
5
  "description": "production-ready JavaScript game engine based on Entity Component System Architecture",
6
6
  "author": "Alexander Goldring",
7
- "version": "2.29.0",
7
+ "version": "2.30.0",
8
8
  "dependencies": {
9
9
  "fast-levenshtein": "2.0.6",
10
10
  "opentype.js": "1.3.3",