@woosh/meep-engine 2.123.11 → 2.124.2

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 (23) hide show
  1. package/package.json +2 -2
  2. package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +1 -1
  3. package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
  4. package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
  5. package/src/engine/graphics/ecs/trail2d/Trail2D.js +1 -0
  6. package/src/engine/graphics/render/forward_plus/cluster/compute_cluster_planes_from_points.js +3 -3
  7. package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts +10 -0
  8. package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts.map +1 -0
  9. package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.js +65 -0
  10. package/src/engine/intelligence/behavior/selector/WeightedElement.d.ts +2 -2
  11. package/src/engine/intelligence/behavior/selector/WeightedElement.d.ts.map +1 -1
  12. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  13. package/src/engine/intelligence/behavior/util/BranchBehavior.d.ts +3 -3
  14. package/src/engine/intelligence/behavior/util/BranchBehavior.d.ts.map +1 -1
  15. package/src/engine/intelligence/behavior/util/BranchBehavior.js +19 -20
  16. package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts.map +1 -1
  17. package/src/engine/intelligence/behavior/util/ConditionalBehavior.js +15 -13
  18. package/src/engine/intelligence/behavior/util/DelayBehavior.d.ts +3 -3
  19. package/src/engine/intelligence/behavior/util/DelayBehavior.d.ts.map +1 -1
  20. package/src/engine/intelligence/behavior/util/DelayBehavior.js +6 -3
  21. package/src/engine/intelligence/behavior/util/LogMessageBehavior.d.ts +5 -1
  22. package/src/engine/intelligence/behavior/util/LogMessageBehavior.d.ts.map +1 -1
  23. package/src/engine/intelligence/behavior/util/LogMessageBehavior.js +8 -1
package/package.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "name": "@woosh/meep-engine",
3
3
  "license": "UNLICENSED",
4
4
  "productName": "Meep",
5
- "description": "Fully featured ECS game engine written in JavaScript",
5
+ "description": "Pure JavaScript game engine. Fully featured and production ready.",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.123.11",
8
+ "version": "2.124.2",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -52,7 +52,7 @@ export function slice_frustum_linear_to_points(
52
52
  const z_slice_stride = x_plane_count * y_plane_count;
53
53
 
54
54
  for (let i_z = 0; i_z < z_plane_count; i_z++) {
55
- const r_0 = i_z / (tr_z);
55
+ const r_0 = i_z / tr_z;
56
56
  const r_1 = 1 - r_0;
57
57
 
58
58
  const z_offset = i_z * z_slice_stride;
@@ -1 +1 @@
1
- {"version":3,"file":"AssetRequestScope.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/AssetRequestScope.js"],"names":[],"mappings":"AAEA;IAoCI;;;;OAIG;IACH,qBAHW,iBAAiB,EAAE,GAClB,iBAAiB,CAQ5B;IA9CD,WAAkB;IAElB,iBAAY;IAEZ;;;OAGG;IACH,SAFU,iBAAiB,EAAE,CAEjB;IAGZ,6BAsBC;IAeD,mBAGC;CAEJ;;gBAKS,QAAQ,CAAC,iBAAiB,CAAC"}
1
+ {"version":3,"file":"AssetRequestScope.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/AssetRequestScope.js"],"names":[],"mappings":"AAEA;IAoCI;;;;OAIG;IACH,qBAHW,iBAAiB,EAAE,GAClB,iBAAiB,CAQ5B;IA9CD,WAAkB;IAElB,iBAAY;IAEZ;;;OAGG;IACH,SAFU,iBAAiB,EAAE,CAEjB;IAGZ,0BAsBC;IAeD,mBAGC;CAEJ;;gBAKS,QAAQ,CAAC,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Trail2D.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/trail2d/Trail2D.js"],"names":[],"mappings":";AAmBA;IAkJI,oCAMC;IAtJD;;;OAGG;IACH,QAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,OAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,gBAFU,OAAO,CAEe;IAEhC;;;;OAIG;IACH,iBAFU,OAAO,CAEM;IAEvB;;;OAGG;IACH,QAFU,OAAO,GAAC,IAAI,CAER;IAEd;;;OAGG;IACH,UAFU,mBAAmB,CAEQ;IAErC;;;OAGG;IACH,cAFU,SAAS,CAEG;IAEtB;;;OAGG;IACH,cAAsB;IAEtB,gBAQC;IAMD,0BAEC;IAND,yBAEC;IAMD;;;;OAIG;IACH,cAHW,MAAM,GAAC,YAAY,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,YAAY,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,YAAY,SACnB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,YAAY,GACjB,OAAO,CAInB;IAED;;;OAGG;IACH,qBAFW,MAAM,QAehB;IADG,kHAAgB;IAWpB;;;;;;;;;;;aAcC;IAGD;;;;;;;;;;;;;;;MAQC;IAED;;;OAGG;IACH,cAFW,OAAO,WASjB;IAED;;;;;;;OAOG;IACH,cANW,MAAM,KACN,MAAM,KACN,MAAM,YACN,MAAM,GACJ,OAAO,CA0CnB;CAEJ;;;;;;oBArQmB,kCAAkC;oBADlC,kCAAkC;wBAK9B,0BAA0B;oCACd,sCAAsC;0BAPhD,yCAAyC;6BAStC,mBAAmB;kCADd,wBAAwB"}
1
+ {"version":3,"file":"Trail2D.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/ecs/trail2d/Trail2D.js"],"names":[],"mappings":";AAmBA;IAkJI,oCAMC;IAtJD;;;OAGG;IACH,QAFU,MAAM,CAES;IAEzB;;;OAGG;IACH,OAFU,MAAM,CAEM;IAEtB;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,eAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,qBAFU,MAAM,CAEQ;IAExB;;;OAGG;IACH,gBAFU,OAAO,CAEe;IAEhC;;;;OAIG;IACH,iBAFU,OAAO,CAEM;IAEvB;;;OAGG;IACH,QAFU,OAAO,GAAC,IAAI,CAER;IAEd;;;OAGG;IACH,UAFU,mBAAmB,CAEQ;IAErC;;;OAGG;IACH,cAFU,SAAS,CAEG;IAEtB;;;OAGG;IACH,cAAsB;IAEtB,gBAQC;IAMD,0BAEC;IAND,yBAEC;IAMD;;;;OAIG;IACH,cAHW,MAAM,GAAC,YAAY,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,YAAY,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,YAAY,SACnB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,YAAY,GACjB,OAAO,CAInB;IAED;;;OAGG;IACH,qBAFW,MAAM,QAehB;IADG,kHAAgB;IAWpB;;;;;;;;;;;aAcC;IAGD;;;;;;;;;;;;;;;MAQC;IAED;;;OAGG;IACH,cAFW,OAAO,WASjB;IAED;;;;;;;OAOG;IACH,cANW,MAAM,KACN,MAAM,KACN,MAAM,YACN,MAAM,GACJ,OAAO,CA2CnB;CAEJ;;;;;;oBAtQmB,kCAAkC;oBADlC,kCAAkC;wBAK9B,0BAA0B;oCACd,sCAAsC;0BAPhD,yCAAyC;6BAStC,mBAAmB;kCADd,wBAAwB"}
@@ -257,6 +257,7 @@ class Trail2D {
257
257
  // set head to fresh value
258
258
  ribbon.setPointAttribute_Scalar(head_index, RIBBON_ATTRIBUTE_ADDRESS_AGE, head_age);
259
259
  ribbon.setPointAlpha(head_index, clamp01(head_age / maxAge));
260
+ ribbon.setPointThickness(head_index, this.width);
260
261
 
261
262
  return head_position_changed;
262
263
  }
@@ -68,8 +68,8 @@ export function compute_cluster_planes_from_points(result, points, x_slices, y_s
68
68
 
69
69
  for (i = 0; i < x_plane_count; i++) {
70
70
  const index_0 = i;
71
- const index_1 = y_slices * x_plane_count + i;
72
- const index_2 = last_z_slice_address + i;
71
+ const index_1 = i + y_slices * x_plane_count;
72
+ const index_2 = i + last_z_slice_address;
73
73
 
74
74
  recordPlane(points, index_0, index_1, index_2, result, address);
75
75
 
@@ -78,7 +78,7 @@ export function compute_cluster_planes_from_points(result, points, x_slices, y_s
78
78
 
79
79
  for (i = 0; i < y_plane_count; i++) {
80
80
  const index_0 = i * x_plane_count;
81
- const index_1 = last_z_slice_address + i * x_plane_count;
81
+ const index_1 = i * x_plane_count + last_z_slice_address;
82
82
  const index_2 = i * x_plane_count + x_slices;
83
83
 
84
84
  recordPlane(points, index_0, index_1, index_2, result, address);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @param {number} x Input bitmask representing two active frustum planes.
3
+ * Bits 0-5: x0, x1, y0, y1, z0, z1
4
+ * Exactly two bits are set.
5
+ * @returns {number} A 6-bit number where bits 0-2 are the index of the first corner (0-7)
6
+ * and bits 3-5 are the index of the second corner (0-7).
7
+ * The corners lie on the intersection of the two active planes.
8
+ */
9
+ export function analytical_biplanar_corner_mapping(x: number): number;
10
+ //# sourceMappingURL=analytical_biplanar_corner_mapping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytical_biplanar_corner_mapping.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.js"],"names":[],"mappings":"AAcA;;;;;;;GAOG;AACH,sDAPW,MAAM,GAGJ,MAAM,CA8ClB"}
@@ -0,0 +1,65 @@
1
+ // is_zero(v): Returns -1 (all bits set) if v is 0, and 0 otherwise.
2
+ // Uses only bitwise operations. Assumes v is relatively small,
3
+ // so propagating bits via shifts doesn't need full 32 steps.
4
+ // Input v comes from (x & mask), max value is 48 (0b110000).
5
+ function is_zero(v) {
6
+ // Propagate any set bit down to the least significant bit (LSB).
7
+ // If v was initially 0, LSB remains 0. Otherwise, LSB becomes 1.
8
+ v = v | (v >> 1);
9
+ v = v | (v >> 2);
10
+ v = v | (v >> 4); // Sufficient for values up to 6 bits (0-63)
11
+ // Result is 0 if LSB is 1 (v!=0), or -1 if LSB is 0 (v==0).
12
+ return (v & 1) - 1;
13
+ }
14
+
15
+ /**
16
+ * @param {number} x Input bitmask representing two active frustum planes.
17
+ * Bits 0-5: x0, x1, y0, y1, z0, z1
18
+ * Exactly two bits are set.
19
+ * @returns {number} A 6-bit number where bits 0-2 are the index of the first corner (0-7)
20
+ * and bits 3-5 are the index of the second corner (0-7).
21
+ * The corners lie on the intersection of the two active planes.
22
+ */
23
+ export function analytical_biplanar_corner_mapping(x) {
24
+
25
+
26
+ // Determine which plane index (0 or 1) is active for each axis pair.
27
+ // px=0 if x0 (bit 0) is set, px=1 if x1 (bit 1) is set.
28
+ // py=0 if y0 (bit 2) is set, py=1 if y1 (bit 3) is set.
29
+ // pz=0 if z0 (bit 4) is set, pz=1 if z1 (bit 5) is set.
30
+ const px = (x >> 1) & 1;
31
+ const py = (x >> 3) & 1;
32
+ const pz = (x >> 5) & 1;
33
+
34
+ // Calculate potential results assuming XY planes are active (z bits 4,5 are 0)
35
+ // Corners c = z*4 + y*2 + x*1
36
+ // Based on test cases [0,1], [4,5], [2,3], [6,7] for inputs 5, 6, 9, 10
37
+ const c1_xy = (py << 1) | (px << 2); // generates 0, 4, 2, 6
38
+ const c2_xy = c1_xy | 1; // generates 1, 5, 3, 7
39
+ const result_xy = (c2_xy << 3) | c1_xy; // Combined output: 8, 44, 26, 62
40
+
41
+ // Calculate potential results assuming YZ planes are active (x bits 0,1 are 0)
42
+ // Based on test cases [0,4], [2,6], [1,5], [3,7] for inputs 20, 24, 36, 40
43
+ const c1_yz = (py << 1) | pz; // generates 0, 2, 1, 3
44
+ const c2_yz = c1_yz | 4; // generates 4, 6, 5, 7
45
+ const result_yz = (c2_yz << 3) | c1_yz; // Combined output: 32, 50, 41, 59
46
+
47
+ // Calculate potential results assuming XZ planes are active (y bits 2,3 are 0)
48
+ // Based on test cases [0,2], [4,6], [1,3], [5,7] for inputs 17, 18, 33, 34
49
+ const c1_xz = (px << 2) | pz; // generates 0, 4, 1, 5
50
+ const c2_xz = c1_xz | 2; // generates 2, 6, 3, 7
51
+ const result_xz = (c2_xz << 3) | c1_xz; // Combined output: 16, 52, 25, 61
52
+
53
+ // Determine which pair of axes is active by checking which pair of bits is zero.
54
+ // Create masks: -1 (0xFFFFFFFF) if the condition is met, 0 otherwise.
55
+ const mask_xy = is_zero(x & 0b110000); // -1 if z0 and z1 bits are 0
56
+ const mask_yz = is_zero(x & 0b000011); // -1 if x0 and x1 bits are 0
57
+ const mask_xz = is_zero(x & 0b001100); // -1 if y0 and y1 bits are 0
58
+
59
+ // Combine the results. Only the result corresponding to the active axis pair
60
+ // will be preserved, as others will be ANDed with 0.
61
+ const final_result = (mask_xy & result_xy) | (mask_yz & result_yz) | (mask_xz & result_xz);
62
+
63
+ return final_result;
64
+
65
+ }
@@ -5,10 +5,10 @@ export class WeightedElement<T> {
5
5
  /**
6
6
  * @template T
7
7
  * @param {T} element
8
- * @param {number} weight
8
+ * @param {number} [weight=1]
9
9
  * @returns {WeightedElement<T>}
10
10
  */
11
- static from<T_1>(element: T_1, weight: number): WeightedElement<T_1>;
11
+ static from<T_1>(element: T_1, weight?: number): WeightedElement<T_1>;
12
12
  /**
13
13
  * @template X
14
14
  * @param {WeightedElement<X>} object
@@ -1 +1 @@
1
- {"version":3,"file":"WeightedElement.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/selector/WeightedElement.js"],"names":[],"mappings":"AAMA;;GAEG;AACH,6BAFa,CAAC;IAaV;;;;;OAKG;IACH,0BAJW,GAAC,UACD,MAAM,GACJ,eAAe,CAAC,GAAC,CAAC,CAgB9B;IAED;;;;OAIG;IACH,iBAJa,CAAC,UACH,eAAe,CAAC,CAAC,CAAC,GACjB,MAAM,CAIjB;IArCD,eAAW;IAEX;;;OAGG;IACH,MAFU,CAAC,CAEC;IAiCZ;;;;OAIG;IACH,cAHW,CAAC,GACA,OAAO,CAKlB;IAED;;;OAGG;IACH,QAFY,MAAM,CAOjB;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAN1C"}
1
+ {"version":3,"file":"WeightedElement.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/selector/WeightedElement.js"],"names":[],"mappings":"AAMA;;GAEG;AACH,6BAFa,CAAC;IAaV;;;;;OAKG;IACH,0BAJW,GAAC,WACD,MAAM,GACJ,eAAe,CAAC,GAAC,CAAC,CAgB9B;IAED;;;;OAIG;IACH,iBAJa,CAAC,UACH,eAAe,CAAC,CAAC,CAAC,GACjB,MAAM,CAIjB;IArCD,eAAW;IAEX;;;OAGG;IACH,MAFU,CAAC,CAEC;IAiCZ;;;;OAIG;IACH,cAHW,CAAC,GACA,OAAO,CAKlB;IAED;;;OAGG;IACH,QAFY,MAAM,CAOjB;IAGL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;CAN1C"}
@@ -21,10 +21,10 @@ export class WeightedElement {
21
21
  /**
22
22
  * @template T
23
23
  * @param {T} element
24
- * @param {number} weight
24
+ * @param {number} [weight=1]
25
25
  * @returns {WeightedElement<T>}
26
26
  */
27
- static from(element, weight) {
27
+ static from(element, weight = 1) {
28
28
  assert.defined(element, 'element');
29
29
 
30
30
  assert.isNumber(weight, 'weight');
@@ -7,10 +7,10 @@ export class BranchBehavior extends Behavior<any> {
7
7
  /**
8
8
  *
9
9
  * @param {Behavior} condition
10
- * @param {Behavior} successBranch
11
- * @param {Behavior} failureBranch
10
+ * @param {Behavior} [branch_success]
11
+ * @param {Behavior} [branch_failure]
12
12
  */
13
- static from(condition: Behavior<any>, successBranch?: Behavior<any>, failureBranch?: Behavior<any>): BranchBehavior;
13
+ static from(condition: Behavior<any>, branch_success?: Behavior<any>, branch_failure?: Behavior<any>): BranchBehavior;
14
14
  constructor();
15
15
  initialize(context: any): void;
16
16
  tick(timeDelta: any): BehaviorStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"BranchBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/BranchBehavior.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH;IAWI;;;;;OAKG;IACH,oHAyBC;;IAGD,+BAKC;IAED,qCA2BC;;CAUJ;yBArGwB,gBAAgB;+BAGV,sBAAsB"}
1
+ {"version":3,"file":"BranchBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/BranchBehavior.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH;IAWI;;;;;OAKG;IACH,sHAyBC;;IAGD,+BAKC;IAED,qCA2BC;;CAUJ;yBAnGwB,gBAAgB;+BACV,sBAAsB"}
@@ -1,9 +1,8 @@
1
- import { Behavior } from "../Behavior.js";
2
- import { SucceedingBehavior } from "../primitive/SucceedingBehavior.js";
3
1
  import { assert } from "../../../../core/assert.js";
2
+ import { Behavior } from "../Behavior.js";
4
3
  import { BehaviorStatus } from "../BehaviorStatus.js";
4
+ import { SucceedingBehavior } from "../primitive/SucceedingBehavior.js";
5
5
 
6
- const DEFAULT = new SucceedingBehavior();
7
6
 
8
7
  /**
9
8
  * Utility behavior that works just like an IF/ELSE statement
@@ -11,9 +10,9 @@ const DEFAULT = new SucceedingBehavior();
11
10
  * as selector is a more commonly applicable behavior type
12
11
  */
13
12
  export class BranchBehavior extends Behavior {
14
- #successBranch = DEFAULT
15
- #failureBranch = DEFAULT
16
- #condition = DEFAULT
13
+ #branch_success = SucceedingBehavior.INSTANCE
14
+ #branch_failure = SucceedingBehavior.INSTANCE
15
+ #condition = SucceedingBehavior.INSTANCE
17
16
 
18
17
  /**
19
18
  *
@@ -24,32 +23,32 @@ export class BranchBehavior extends Behavior {
24
23
  /**
25
24
  *
26
25
  * @param {Behavior} condition
27
- * @param {Behavior} successBranch
28
- * @param {Behavior} failureBranch
26
+ * @param {Behavior} [branch_success]
27
+ * @param {Behavior} [branch_failure]
29
28
  */
30
29
  static from(
31
30
  condition,
32
- successBranch = DEFAULT,
33
- failureBranch = DEFAULT
31
+ branch_success = SucceedingBehavior.INSTANCE,
32
+ branch_failure = SucceedingBehavior.INSTANCE
34
33
  ) {
35
34
  assert.defined(condition, 'condition');
36
35
  assert.notNull(condition, 'condition');
37
36
  assert.equal(condition.isBehavior, true, 'condition.isBehavior !== true');
38
37
 
39
- assert.defined(successBranch, 'successBranch');
40
- assert.notNull(successBranch, 'successBranch');
41
- assert.equal(successBranch.isBehavior, true, 'successBranch.isBehavior !== true');
38
+ assert.defined(branch_success, 'branch_success');
39
+ assert.notNull(branch_success, 'branch_success');
40
+ assert.equal(branch_success.isBehavior, true, 'branch_success.isBehavior !== true');
42
41
 
43
- assert.defined(failureBranch, 'failureBranch');
44
- assert.notNull(failureBranch, 'failureBranch');
45
- assert.equal(failureBranch.isBehavior, true, 'failureBranch.isBehavior !== true');
42
+ assert.defined(branch_failure, 'branch_failure');
43
+ assert.notNull(branch_failure, 'branch_failure');
44
+ assert.equal(branch_failure.isBehavior, true, 'branch_failure.isBehavior !== true');
46
45
 
47
46
 
48
47
  const r = new BranchBehavior();
49
48
 
50
49
  r.#condition = condition;
51
- r.#successBranch = successBranch;
52
- r.#failureBranch = failureBranch;
50
+ r.#branch_success = branch_success;
51
+ r.#branch_failure = branch_failure;
53
52
 
54
53
  return r;
55
54
  }
@@ -81,9 +80,9 @@ export class BranchBehavior extends Behavior {
81
80
  this.#current.finalize();
82
81
 
83
82
  if (s === BehaviorStatus.Succeeded) {
84
- this.#current = this.#successBranch;
83
+ this.#current = this.#branch_success;
85
84
  } else {
86
- this.#current = this.#failureBranch;
85
+ this.#current = this.#branch_failure;
87
86
  }
88
87
 
89
88
  this.#current.initialize(this.context);
@@ -1 +1 @@
1
- {"version":3,"file":"ConditionalBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/ConditionalBehavior.js"],"names":[],"mappings":"AAGA;IAuDI;;;;;OAKG;IACH,uBAJW,QAAQ,UACR,QAAQ,GACP,mBAAmB,CAS9B;IAhEG;;;OAGG;IACH,WAFU,QAAQ,CAEG;IAGzB;;;OAGG;IACH,uBAFW,QAAQ,QAIlB;IAED,0BA0BC;CAwBJ;0CAxEyC,2CAA2C"}
1
+ {"version":3,"file":"ConditionalBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/ConditionalBehavior.js"],"names":[],"mappings":"AAKA;IAuDI;;;;;OAKG;IACH,uBAJW,QAAQ,UACR,QAAQ,GACP,mBAAmB,CAS9B;IAlED;;;OAGG;IACH,WAFU,QAAQ,CAEsB;IAExC;;;OAGG;IACH,uBAFW,QAAQ,QAQlB;IAED,0BAyBC;CAwBJ;0CAxEyC,2CAA2C"}
@@ -1,22 +1,25 @@
1
- import { AbstractDecoratorBehavior } from "../decorator/AbstractDecoratorBehavior.js";
1
+ import { assert } from "../../../../core/assert.js";
2
2
  import { BehaviorStatus } from "../BehaviorStatus.js";
3
+ import { AbstractDecoratorBehavior } from "../decorator/AbstractDecoratorBehavior.js";
4
+ import { SucceedingBehavior } from "../primitive/SucceedingBehavior.js";
3
5
 
4
6
  export class ConditionalBehavior extends AbstractDecoratorBehavior {
5
- constructor() {
6
- super();
7
-
8
- /**
9
- *
10
- * @type {Behavior}
11
- */
12
- this.condition = null;
13
- }
7
+
8
+ /**
9
+ *
10
+ * @type {Behavior}
11
+ */
12
+ condition = SucceedingBehavior.INSTANCE;
14
13
 
15
14
  /**
16
15
  *
17
16
  * @param {Behavior} behavior
18
17
  */
19
18
  setCondition(behavior) {
19
+ assert.defined(behavior, 'behavior');
20
+ assert.notNull(behavior, 'behavior');
21
+ assert.equal(behavior.isBehavior, true, 'behavior.isBehavior !== true');
22
+
20
23
  this.condition = behavior;
21
24
  }
22
25
 
@@ -38,14 +41,13 @@ export class ConditionalBehavior extends AbstractDecoratorBehavior {
38
41
  } else if (s === BehaviorStatus.Failed) {
39
42
  condition.finalize();
40
43
 
41
- return s;
44
+ return s;
42
45
 
43
46
  } else {
44
47
  //waiting?
45
48
  return s;
46
49
  }
47
50
 
48
-
49
51
  }
50
52
 
51
53
  finalize() {
@@ -53,7 +55,7 @@ export class ConditionalBehavior extends AbstractDecoratorBehavior {
53
55
 
54
56
  const condition = this.condition;
55
57
 
56
- condition.finalize();
58
+ condition.finalize();
57
59
  }
58
60
 
59
61
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Wait for a certain amount of time
2
+ * Wait for a certain amount of time, then succeed
3
3
  */
4
4
  export class DelayBehavior extends Behavior<any> {
5
5
  /**
@@ -22,10 +22,10 @@ export class DelayBehavior extends Behavior<any> {
22
22
  value: number;
23
23
  /**
24
24
  * Time elapsed
25
- * @private
25
+ * Must be finite, modified during update and initialization
26
26
  * @type {number}
27
27
  */
28
- private elapsed;
28
+ elapsed: number;
29
29
  fromJSON({ value, elapsed }: {
30
30
  value: any;
31
31
  elapsed?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"DelayBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/DelayBehavior.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAoBI;;;;OAIG;IACH,4BAFY,aAAa,CAMxB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACL,aAAa,CAYxB;;IA5CD;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,gBAAY;IAEZ;;;aAGC;IA8BD,2BAIC;IAED,wEAQC;CACJ;yBArEwB,gBAAgB;+BACV,sBAAsB"}
1
+ {"version":3,"file":"DelayBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/DelayBehavior.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAuBI;;;;OAIG;IACH,4BAFY,aAAa,CAMxB;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACL,aAAa,CAYxB;;IA/CD;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;aAMC;IA8BD,2BAIC;IAED,wEAQC;CACJ;yBAxEwB,gBAAgB;+BACV,sBAAsB"}
@@ -3,7 +3,7 @@ import { Behavior } from "../Behavior.js";
3
3
  import { BehaviorStatus } from "../BehaviorStatus.js";
4
4
 
5
5
  /**
6
- * Wait for a certain amount of time
6
+ * Wait for a certain amount of time, then succeed
7
7
  */
8
8
  export class DelayBehavior extends Behavior {
9
9
 
@@ -15,12 +15,15 @@ export class DelayBehavior extends Behavior {
15
15
 
16
16
  /**
17
17
  * Time elapsed
18
- * @private
18
+ * Must be finite, modified during update and initialization
19
19
  * @type {number}
20
20
  */
21
21
  elapsed = 0;
22
22
 
23
23
  fromJSON({ value, elapsed = 0 }) {
24
+ assert.isNumber(value, 'value');
25
+ assert.isNumber(elapsed, 'elapsed');
26
+
24
27
  this.value = value;
25
28
  this.elapsed = elapsed;
26
29
  }
@@ -44,7 +47,7 @@ export class DelayBehavior extends Behavior {
44
47
  static from(seconds) {
45
48
  assert.isNumber(seconds, 'value');
46
49
  assert.notNaN(seconds, 'value');
47
- assert.isFiniteNumber(seconds, 'value');
50
+ assert.isFinite(seconds, 'value');
48
51
 
49
52
  const r = new DelayBehavior();
50
53
 
@@ -4,10 +4,14 @@
4
4
  export class LogMessageBehavior extends Behavior<any> {
5
5
  /**
6
6
  *
7
- * @param {String} message
7
+ * @param {string} message
8
8
  * @return {LogMessageBehavior}
9
9
  */
10
10
  static from(message: string): LogMessageBehavior;
11
+ /**
12
+ *
13
+ * @param {string} message
14
+ */
11
15
  constructor(message?: string);
12
16
  message: string;
13
17
  tick(timeDelta: any): BehaviorStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"LogMessageBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/LogMessageBehavior.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IAOI;;;;OAIG;IACH,8BAFY,kBAAkB,CAI7B;IAbD,8BAIC;IADG,gBAAsB;IAY1B,qCAKC;CACJ;yBA5BwB,gBAAgB;+BACV,sBAAsB"}
1
+ {"version":3,"file":"LogMessageBehavior.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/intelligence/behavior/util/LogMessageBehavior.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAaI;;;;OAIG;IACH,qBAHW,MAAM,GACL,kBAAkB,CAI7B;IAnBD;;;OAGG;IACH,sBAFW,MAAM,EAQhB;IADG,gBAAsB;IAY1B,qCAKC;CACJ;yBAlCwB,gBAAgB;+BACV,sBAAsB"}
@@ -1,3 +1,4 @@
1
+ import { assert } from "../../../../core/assert.js";
1
2
  import { Behavior } from "../Behavior.js";
2
3
  import { BehaviorStatus } from "../BehaviorStatus.js";
3
4
 
@@ -5,15 +6,21 @@ import { BehaviorStatus } from "../BehaviorStatus.js";
5
6
  * Prints given message into the console
6
7
  */
7
8
  export class LogMessageBehavior extends Behavior {
9
+ /**
10
+ *
11
+ * @param {string} message
12
+ */
8
13
  constructor(message = "") {
9
14
  super();
10
15
 
16
+ assert.isString(message, 'message');
17
+
11
18
  this.message = message;
12
19
  }
13
20
 
14
21
  /**
15
22
  *
16
- * @param {String} message
23
+ * @param {string} message
17
24
  * @return {LogMessageBehavior}
18
25
  */
19
26
  static from(message) {