@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.
- package/package.json +2 -2
- package/src/core/geom/3d/frustum/slice_frustum_linear_to_points.js +1 -1
- package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2D.d.ts.map +1 -1
- package/src/engine/graphics/ecs/trail2d/Trail2D.js +1 -0
- package/src/engine/graphics/render/forward_plus/cluster/compute_cluster_planes_from_points.js +3 -3
- package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts +10 -0
- package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts.map +1 -0
- package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.js +65 -0
- package/src/engine/intelligence/behavior/selector/WeightedElement.d.ts +2 -2
- package/src/engine/intelligence/behavior/selector/WeightedElement.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
- package/src/engine/intelligence/behavior/util/BranchBehavior.d.ts +3 -3
- package/src/engine/intelligence/behavior/util/BranchBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/BranchBehavior.js +19 -20
- package/src/engine/intelligence/behavior/util/ConditionalBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/ConditionalBehavior.js +15 -13
- package/src/engine/intelligence/behavior/util/DelayBehavior.d.ts +3 -3
- package/src/engine/intelligence/behavior/util/DelayBehavior.d.ts.map +1 -1
- package/src/engine/intelligence/behavior/util/DelayBehavior.js +6 -3
- package/src/engine/intelligence/behavior/util/LogMessageBehavior.d.ts +5 -1
- package/src/engine/intelligence/behavior/util/LogMessageBehavior.d.ts.map +1 -1
- 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": "
|
|
5
|
+
"description": "Pure JavaScript game engine. Fully featured and production ready.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": "Alexander Goldring",
|
|
8
|
-
"version": "2.
|
|
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 /
|
|
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,
|
|
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,
|
|
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
|
}
|
package/src/engine/graphics/render/forward_plus/cluster/compute_cluster_planes_from_points.js
CHANGED
|
@@ -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
|
|
72
|
-
const index_2 =
|
|
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 =
|
|
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
|
package/src/engine/graphics/render/forward_plus/query/analytical_biplanar_corner_mapping.d.ts.map
ADDED
|
@@ -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
|
|
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,
|
|
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}
|
|
11
|
-
* @param {Behavior}
|
|
10
|
+
* @param {Behavior} [branch_success]
|
|
11
|
+
* @param {Behavior} [branch_failure]
|
|
12
12
|
*/
|
|
13
|
-
static from(condition: Behavior<any>,
|
|
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":"
|
|
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
|
-
#
|
|
15
|
-
#
|
|
16
|
-
#condition =
|
|
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}
|
|
28
|
-
* @param {Behavior}
|
|
26
|
+
* @param {Behavior} [branch_success]
|
|
27
|
+
* @param {Behavior} [branch_failure]
|
|
29
28
|
*/
|
|
30
29
|
static from(
|
|
31
30
|
condition,
|
|
32
|
-
|
|
33
|
-
|
|
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(
|
|
40
|
-
assert.notNull(
|
|
41
|
-
assert.equal(
|
|
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(
|
|
44
|
-
assert.notNull(
|
|
45
|
-
assert.equal(
|
|
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.#
|
|
52
|
-
r.#
|
|
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.#
|
|
83
|
+
this.#current = this.#branch_success;
|
|
85
84
|
} else {
|
|
86
|
-
this.#current = this.#
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
*
|
|
25
|
+
* Must be finite, modified during update and initialization
|
|
26
26
|
* @type {number}
|
|
27
27
|
*/
|
|
28
|
-
|
|
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;
|
|
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
|
-
*
|
|
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.
|
|
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 {
|
|
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":"
|
|
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 {
|
|
23
|
+
* @param {string} message
|
|
17
24
|
* @return {LogMessageBehavior}
|
|
18
25
|
*/
|
|
19
26
|
static from(message) {
|