@woosh/meep-engine 2.84.8 → 2.84.10
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/README.md +27 -13
- package/build/meep.cjs +213 -140
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +213 -140
- package/editor/process/symbolic/makePositionedIconDisplaySymbol.js +2 -4
- package/editor/view/EditorView.js +48 -204
- package/editor/view/ecs/HierarchicalEntityListView.js +191 -0
- package/editor/view/ecs/HierarchicalEntityListView.module.scss +13 -0
- package/editor/view/prepareMeshLibrary.js +178 -0
- package/editor/view/v2/SplitView.js +104 -0
- package/editor/view/v2/ViewManagementSystem.js +0 -0
- package/editor/view/v2/prototypeEditor.js +127 -0
- package/package.json +10 -5
- package/src/core/cache/Cache.d.ts +2 -0
- package/src/core/cache/Cache.js +58 -8
- package/src/core/cache/Cache.spec.js +38 -0
- package/src/core/cache/CacheElement.js +6 -0
- package/src/core/cache/LoadingCache.js +27 -3
- package/src/core/cache/LoadingCache.spec.js +22 -7
- package/src/core/collection/array/arraySetSortingDiff.js +6 -6
- package/src/core/collection/table/RowFirstTable.js +364 -368
- package/src/core/geom/3d/SurfacePoint3.js +3 -40
- package/src/core/geom/3d/plane/plane3_compute_ray_intersection.js +3 -1
- package/src/core/geom/3d/topology/simplify/prototypeMeshSimplification.js +7 -7
- package/src/core/geom/Vector3.js +25 -14
- package/src/core/model/stat/LinearModifier.spec.js +5 -6
- package/src/core/process/PromiseWatcher.spec.js +27 -23
- package/src/engine/animation/behavior/animateProperty.js +4 -4
- package/src/engine/animation/curve/ecd_bind_animation_curve.js +9 -0
- package/src/engine/ecs/EntityReference.js +12 -0
- package/src/engine/ecs/dynamic_actions/actions/definition/SpeakLineActionDescription.js +1 -1
- package/src/engine/ecs/transform/Transform.js +1 -1
- package/src/engine/ecs/transform/Transform.spec.js +44 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +8 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/prototypeSGMesh.js +23 -19
- package/src/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.js +2 -2
- package/src/engine/graphics/ecs/mesh-v2/three_object_to_entity_composition.js +3 -1
- package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +6 -6
- package/src/engine/intelligence/behavior/ecs/SendEventBehavior.js +43 -0
- package/src/view/View.js +64 -95
- package/src/view/setElementTransform.js +20 -0
- package/src/view/setElementVisibility.js +15 -0
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import Vector3 from "../Vector3.js";
|
|
2
|
-
import { v3_length } from "../vec3/v3_length.js";
|
|
3
1
|
import { assert } from "../../assert.js";
|
|
2
|
+
import Vector3 from "../Vector3.js";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Used for representing points on a 3D surface. Used for raycasting contacts
|
|
@@ -58,44 +57,8 @@ export class SurfacePoint3 {
|
|
|
58
57
|
assert.defined(m, 'matrix');
|
|
59
58
|
assert.notNull(m, 'matrix');
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const p_x = p.x;
|
|
65
|
-
const p_y = p.y;
|
|
66
|
-
const p_z = p.z;
|
|
67
|
-
|
|
68
|
-
// compute perspective projection
|
|
69
|
-
const w = 1 / (m[3] * p_x + m[7] * p_y + m[11] * p_z + m[15]);
|
|
70
|
-
|
|
71
|
-
const result_p_x = (m[0] * p_x + m[4] * p_y + m[8] * p_z + m[12]) * w;
|
|
72
|
-
const result_p_y = (m[1] * p_x + m[5] * p_y + m[9] * p_z + m[13]) * w;
|
|
73
|
-
const result_p_z = (m[2] * p_x + m[6] * p_y + m[10] * p_z + m[14]) * w;
|
|
74
|
-
|
|
75
|
-
p.set(
|
|
76
|
-
result_p_x,
|
|
77
|
-
result_p_y,
|
|
78
|
-
result_p_z
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
// transform normal
|
|
82
|
-
const n = this.normal;
|
|
83
|
-
|
|
84
|
-
const n_x = n.x;
|
|
85
|
-
const n_y = n.y;
|
|
86
|
-
const n_z = n.z;
|
|
87
|
-
|
|
88
|
-
const result_n_x = m[0] * n_x + m[4] * n_y + m[8] * n_z;
|
|
89
|
-
const result_n_y = m[1] * n_x + m[5] * n_y + m[9] * n_z;
|
|
90
|
-
const result_n_z = m[2] * n_x + m[6] * n_y + m[10] * n_z;
|
|
91
|
-
|
|
92
|
-
const normal_multiplier = 1 / v3_length(result_n_x, result_n_y, result_n_z);
|
|
93
|
-
|
|
94
|
-
n.set(
|
|
95
|
-
result_n_x * normal_multiplier,
|
|
96
|
-
result_n_y * normal_multiplier,
|
|
97
|
-
result_n_z * normal_multiplier,
|
|
98
|
-
);
|
|
60
|
+
this.position.applyMatrix4(m);
|
|
61
|
+
this.normal.applyDirectionMatrix4(m);
|
|
99
62
|
}
|
|
100
63
|
|
|
101
64
|
/**
|
|
@@ -30,6 +30,7 @@ export function plane3_compute_ray_intersection(
|
|
|
30
30
|
const t = -p / denom;
|
|
31
31
|
|
|
32
32
|
if (t < 0) {
|
|
33
|
+
// ray starts and points behind the plane
|
|
33
34
|
return false;
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -42,9 +43,10 @@ export function plane3_compute_ray_intersection(
|
|
|
42
43
|
return true;
|
|
43
44
|
|
|
44
45
|
} else {
|
|
46
|
+
// ray direction is perpendicular to the plane normal. In other words ray runs parallel to the plane
|
|
45
47
|
|
|
46
48
|
if (p === 0) {
|
|
47
|
-
|
|
49
|
+
// ray origin lies on the plane
|
|
48
50
|
out.set(originX, originY, originZ);
|
|
49
51
|
|
|
50
52
|
return true;
|
|
@@ -20,23 +20,23 @@ import {
|
|
|
20
20
|
VSMShadowMap,
|
|
21
21
|
WebGLRenderer
|
|
22
22
|
} from "three";
|
|
23
|
-
import { mergeVertices } from "three/examples/jsm/utils/BufferGeometryUtils.js";
|
|
24
23
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
25
24
|
import Stats from "three/examples/jsm/libs/stats.module.js";
|
|
26
25
|
import { PLYLoader } from "three/examples/jsm/loaders/PLYLoader.js";
|
|
27
|
-
import {
|
|
28
|
-
import { TopoMesh } from "../struct/TopoMesh.js";
|
|
26
|
+
import { mergeVertices } from "three/examples/jsm/utils/BufferGeometryUtils.js";
|
|
29
27
|
import {
|
|
30
28
|
deinterleaveBufferGeometry
|
|
31
29
|
} from "../../../../../engine/graphics/geometry/buffered/deinterleaveBufferGeometry.js";
|
|
32
|
-
import Vector3 from "../../../Vector3.js";
|
|
33
|
-
import { simplifyTopoMesh2 } from "./simplifyTopoMesh2.js";
|
|
34
30
|
import { scaleGeometryToBox } from "../../../../../engine/graphics/geometry/scaleGeometryToBox.js";
|
|
35
|
-
import { computeTopoMeshBoundiningBox } from "../bounds/computeTopoMeshBoundiningBox.js";
|
|
36
|
-
import { AABB3 } from "../../../../bvh2/aabb3/AABB3.js";
|
|
37
31
|
import { Color } from "../../../../color/Color.js";
|
|
38
32
|
import { clamp } from "../../../../math/clamp.js";
|
|
33
|
+
import Vector3 from "../../../Vector3.js";
|
|
34
|
+
import { AABB3 } from "../../aabb/AABB3.js";
|
|
35
|
+
import { computeTopoMeshBoundiningBox } from "../bounds/computeTopoMeshBoundiningBox.js";
|
|
36
|
+
import { TopoMesh } from "../struct/TopoMesh.js";
|
|
39
37
|
import { three_buffer_geometry_to_topo_mesh } from "../three_buffer_geometry_to_topo_mesh.js";
|
|
38
|
+
import { topo_mesh_to_three_buffer_geometry } from "../topo_mesh_to_three_buffer_geometry.js";
|
|
39
|
+
import { simplifyTopoMesh2 } from "./simplifyTopoMesh2.js";
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
/**
|
package/src/core/geom/Vector3.js
CHANGED
|
@@ -555,35 +555,32 @@ class Vector3 {
|
|
|
555
555
|
|
|
556
556
|
/**
|
|
557
557
|
*
|
|
558
|
-
* @param {
|
|
558
|
+
* @param {ArrayLike<number>|number[]|Float32Array} m4
|
|
559
559
|
*/
|
|
560
560
|
applyMatrix4(m4) {
|
|
561
561
|
const x = this.x;
|
|
562
562
|
const y = this.y;
|
|
563
563
|
const z = this.z;
|
|
564
564
|
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
const
|
|
565
|
+
const w = 1 / (m4[3] * x + m4[7] * y + m4[11] * z + m4[15]);
|
|
566
|
+
|
|
567
|
+
const _x = (m4[0] * x + m4[4] * y + m4[8] * z + m4[12])* w;
|
|
568
|
+
const _y = (m4[1] * x + m4[5] * y + m4[9] * z + m4[13])* w;
|
|
569
|
+
const _z = (m4[2] * x + m4[6] * y + m4[10] * z + m4[14])* w;
|
|
568
570
|
|
|
569
571
|
this.set(_x, _y, _z);
|
|
570
572
|
}
|
|
571
573
|
|
|
572
574
|
/**
|
|
573
575
|
* Assume current vector holds a direction, transform using a matrix to produce a new directional unit vector
|
|
574
|
-
* @param {
|
|
576
|
+
* @param {ArrayLike<number>|number[]|Float32Array} m4
|
|
575
577
|
*/
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
// input: THREE.Matrix4 affine matrix
|
|
579
|
-
// vector interpreted as a direction
|
|
580
|
-
|
|
578
|
+
applyDirectionMatrix4(m4){
|
|
581
579
|
const x = this.x, y = this.y, z = this.z;
|
|
582
|
-
const e = m.elements;
|
|
583
580
|
|
|
584
|
-
const _x =
|
|
585
|
-
const _y =
|
|
586
|
-
const _z =
|
|
581
|
+
const _x = m4[0] * x + m4[4] * y + m4[8] * z;
|
|
582
|
+
const _y = m4[1] * x + m4[5] * y + m4[9] * z;
|
|
583
|
+
const _z = m4[2] * x + m4[6] * y + m4[10] * z;
|
|
587
584
|
|
|
588
585
|
// normalize the result
|
|
589
586
|
const _l = 1 / v3_length(_x, _y, _z);
|
|
@@ -595,6 +592,20 @@ class Vector3 {
|
|
|
595
592
|
);
|
|
596
593
|
}
|
|
597
594
|
|
|
595
|
+
/**
|
|
596
|
+
* @deprecated use non-three.js version instead
|
|
597
|
+
* @param {THREE.Matrix4} m
|
|
598
|
+
*/
|
|
599
|
+
transformDirection_three(m) {
|
|
600
|
+
|
|
601
|
+
// input: THREE.Matrix4 affine matrix
|
|
602
|
+
// vector interpreted as a direction
|
|
603
|
+
|
|
604
|
+
const e = m.elements;
|
|
605
|
+
|
|
606
|
+
this.applyDirectionMatrix4(e);
|
|
607
|
+
}
|
|
608
|
+
|
|
598
609
|
/**
|
|
599
610
|
*
|
|
600
611
|
* @param {THREE.Matrix3} m
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { CombatUnitBonusSourceType } from "../../../../../model/game/logic/combat/CombatUnitBonusSourceType.js";
|
|
2
1
|
import LinearModifier from "./LinearModifier.js";
|
|
3
2
|
|
|
4
3
|
test("constructor doesn't throw", () => {
|
|
@@ -14,19 +13,19 @@ test("constructor parameter propagation", () => {
|
|
|
14
13
|
|
|
15
14
|
test("equals method", () => {
|
|
16
15
|
const a = new LinearModifier(3, -7);
|
|
17
|
-
a.source =
|
|
16
|
+
a.source = 0;
|
|
18
17
|
|
|
19
18
|
const b = new LinearModifier(3, -7);
|
|
20
|
-
b.source =
|
|
19
|
+
b.source = 1;
|
|
21
20
|
|
|
22
21
|
const c = new LinearModifier(3, 11);
|
|
23
|
-
c.source =
|
|
22
|
+
c.source = 0;
|
|
24
23
|
|
|
25
24
|
const d = new LinearModifier(13, -7);
|
|
26
|
-
d.source =
|
|
25
|
+
d.source = 0;
|
|
27
26
|
|
|
28
27
|
const e = new LinearModifier(3, -7);
|
|
29
|
-
e.source =
|
|
28
|
+
e.source = 0;
|
|
30
29
|
|
|
31
30
|
expect(a.equals(e)).toBe(true);
|
|
32
31
|
expect(a.equals(b)).toBe(false);
|
|
@@ -24,42 +24,46 @@ function trigger() {
|
|
|
24
24
|
};
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
// TODO broken tests, skipped for now
|
|
28
|
+
describe.skip("suite", () => {
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
test('constructor', () => {
|
|
31
|
+
const w = new PromiseWatcher();
|
|
32
|
+
|
|
33
|
+
expect(w.unresolvedCount.getValue()).toBe(0);
|
|
34
|
+
expect(w.unresolved.isEmpty()).toBe(true);
|
|
35
|
+
});
|
|
33
36
|
|
|
34
37
|
|
|
35
|
-
test('add one and resolve', async () => {
|
|
36
|
-
|
|
38
|
+
test('add one and resolve', async () => {
|
|
39
|
+
const w = new PromiseWatcher();
|
|
37
40
|
|
|
38
|
-
|
|
41
|
+
const t0 = trigger();
|
|
39
42
|
|
|
40
|
-
|
|
43
|
+
w.add(t0.promise);
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
expect(w.unresolvedCount.getValue()).toBe(1);
|
|
43
46
|
|
|
44
|
-
|
|
47
|
+
t0.resolve();
|
|
45
48
|
|
|
46
|
-
|
|
49
|
+
await t0.promise;
|
|
47
50
|
|
|
48
|
-
|
|
49
|
-
});
|
|
51
|
+
expect(w.unresolvedCount.getValue()).toBe(0);
|
|
52
|
+
});
|
|
50
53
|
|
|
51
|
-
test('add one and reject', async () => {
|
|
52
|
-
|
|
54
|
+
test('add one and reject', async () => {
|
|
55
|
+
const w = new PromiseWatcher();
|
|
53
56
|
|
|
54
|
-
|
|
57
|
+
const t0 = trigger();
|
|
55
58
|
|
|
56
|
-
|
|
59
|
+
w.add(t0.promise);
|
|
57
60
|
|
|
58
|
-
|
|
61
|
+
expect(w.unresolvedCount.getValue()).toBe(1);
|
|
59
62
|
|
|
60
|
-
|
|
63
|
+
t0.reject("Apple Sauce");
|
|
61
64
|
|
|
62
|
-
|
|
65
|
+
await t0.promise.catch(noop);
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
});
|
|
67
|
+
expect(w.unresolvedCount.getValue()).toBe(0);
|
|
68
|
+
});
|
|
69
|
+
})
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
TransitionPropertyVectorXBehavior
|
|
3
3
|
} from "../../../../../model/game/story/behaviors/generic/TransitionPropertyVectorXBehavior.js";
|
|
4
|
+
import { assert } from "../../../core/assert.js";
|
|
5
|
+
import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
|
|
4
6
|
import Entity from "../../ecs/Entity.js";
|
|
5
|
-
import { BehaviorComponent } from "../../intelligence/behavior/ecs/BehaviorComponent.js";
|
|
6
7
|
import { SequenceBehavior } from "../../intelligence/behavior/composite/SequenceBehavior.js";
|
|
8
|
+
import { BehaviorComponent } from "../../intelligence/behavior/ecs/BehaviorComponent.js";
|
|
7
9
|
import { DieBehavior } from "../../intelligence/behavior/ecs/DieBehavior.js";
|
|
8
|
-
import { SendEventBehavior } from "
|
|
9
|
-
import { SerializationMetadata } from "../../ecs/components/SerializationMetadata.js";
|
|
10
|
-
import { assert } from "../../../core/assert.js";
|
|
10
|
+
import { SendEventBehavior } from "../../intelligence/behavior/ecs/SendEventBehavior.js";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
*
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { SendEventBehavior } from "../../../../../../../model/game/util/behavior/SendEventBehavior.js";
|
|
2
1
|
import { assert } from "../../../../../core/assert.js";
|
|
3
2
|
import {
|
|
4
3
|
ParallelBehavior,
|
|
5
4
|
ParallelBehaviorPolicy
|
|
6
5
|
} from "../../../../intelligence/behavior/composite/ParallelBehavior.js";
|
|
6
|
+
import { SendEventBehavior } from "../../../../intelligence/behavior/ecs/SendEventBehavior.js";
|
|
7
7
|
import { WaitForEventBehavior } from "../../../../intelligence/behavior/ecs/WaitForEventBehavior.js";
|
|
8
8
|
import { VoiceEvents } from "../../../speaker/VoiceEvents.js";
|
|
9
9
|
import { AbstractActionDescription } from "./AbstractActionDescription.js";
|
|
@@ -225,3 +225,47 @@ test("lookAt", () => {
|
|
|
225
225
|
|
|
226
226
|
expect(direction.roughlyEquals(expected_direction)).toBe(true);
|
|
227
227
|
});
|
|
228
|
+
|
|
229
|
+
test("forward vector", () => {
|
|
230
|
+
|
|
231
|
+
const t = new Transform();
|
|
232
|
+
|
|
233
|
+
expect(t.forward.roughlyEquals(Vector3.forward)).toBe(true);
|
|
234
|
+
|
|
235
|
+
// scale transform
|
|
236
|
+
|
|
237
|
+
t.scale.set(3, 7, 11);
|
|
238
|
+
|
|
239
|
+
// scale should not affect direction vector
|
|
240
|
+
expect(t.forward.roughlyEquals(Vector3.forward)).toBe(true);
|
|
241
|
+
|
|
242
|
+
// translate
|
|
243
|
+
t.position.set(-13, 17, -23);
|
|
244
|
+
|
|
245
|
+
// position should not affect direction
|
|
246
|
+
expect(t.forward.roughlyEquals(Vector3.forward)).toBe(true);
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
test("forward vs looktAt consistency", () => {
|
|
250
|
+
|
|
251
|
+
const t = new Transform();
|
|
252
|
+
|
|
253
|
+
t.lookAt(new Vector3(0, 0, -1));
|
|
254
|
+
expect(t.forward.roughlyEquals(new Vector3(0, 0, -1))).toBe(true);
|
|
255
|
+
|
|
256
|
+
t.lookAt(new Vector3(0, 0, 1));
|
|
257
|
+
expect(t.forward.roughlyEquals(new Vector3(0, 0, 1))).toBe(true);
|
|
258
|
+
|
|
259
|
+
t.lookAt(new Vector3(0, -1, 0));
|
|
260
|
+
expect(t.forward.roughlyEquals(new Vector3(0, -1, 0), 0.01)).toBe(true);
|
|
261
|
+
|
|
262
|
+
t.lookAt(new Vector3(0, 1, 0));
|
|
263
|
+
expect(t.forward.roughlyEquals(new Vector3(0, 1, 0), 0.01)).toBe(true);
|
|
264
|
+
|
|
265
|
+
t.lookAt(new Vector3(-1, 0, 0));
|
|
266
|
+
expect(t.forward.roughlyEquals(new Vector3(-1, 0, 0))).toBe(true);
|
|
267
|
+
|
|
268
|
+
t.lookAt(new Vector3(1, 0, 0));
|
|
269
|
+
expect(t.forward.roughlyEquals(new Vector3(1, 0, 0))).toBe(true);
|
|
270
|
+
|
|
271
|
+
});
|
|
@@ -16,5 +16,12 @@ export const ShadedGeometryFlags = {
|
|
|
16
16
|
/**
|
|
17
17
|
* If set to false will not render
|
|
18
18
|
*/
|
|
19
|
-
Visible:16
|
|
19
|
+
Visible: 16,
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Bounds are updated whenever transforms change, we can defer this until next frame render request
|
|
23
|
+
* This lets us back updated and do less work overall
|
|
24
|
+
* TODO implement, currently it's ignored
|
|
25
|
+
*/
|
|
26
|
+
DeferredBoundsUpdate: 32,
|
|
20
27
|
};
|
|
@@ -1,27 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { initializeEditor } from "../../../../../../../model/game/initializeEditor.js";
|
|
2
|
+
import { OrbitingBehavior } from "../../../../../../../model/game/util/behavior/OrbitingBehavior.js";
|
|
3
|
+
import { enableEditor } from "../../../../../../editor/enableEditor.js";
|
|
4
|
+
import { AABB3 } from "../../../../../core/geom/3d/aabb/AABB3.js";
|
|
5
|
+
import Quaternion from "../../../../../core/geom/Quaternion.js";
|
|
6
|
+
import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
7
|
+
import Vector3 from "../../../../../core/geom/Vector3.js";
|
|
8
|
+
import { randomFloatBetween } from "../../../../../core/math/random/randomFloatBetween.js";
|
|
9
|
+
import { seededRandom } from "../../../../../core/math/random/seededRandom.js";
|
|
7
10
|
import { GameAssetType } from "../../../../asset/GameAssetType.js";
|
|
8
11
|
import { GLTFAssetLoader } from "../../../../asset/loaders/GLTFAssetLoader.js";
|
|
9
|
-
import
|
|
10
|
-
import { BehaviorSystem } from "../../../../intelligence/behavior/ecs/BehaviorSystem.js";
|
|
12
|
+
import Entity from "../../../../ecs/Entity.js";
|
|
11
13
|
import { TransformAttachmentSystem } from "../../../../ecs/transform-attachment/TransformAttachmentSystem.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
14
|
+
import { Transform } from "../../../../ecs/transform/Transform.js";
|
|
15
|
+
import { EngineHarness } from "../../../../EngineHarness.js";
|
|
16
|
+
import { BehaviorComponent } from "../../../../intelligence/behavior/ecs/BehaviorComponent.js";
|
|
17
|
+
import { BehaviorSystem } from "../../../../intelligence/behavior/ecs/BehaviorSystem.js";
|
|
16
18
|
import Highlight from "../../highlight/Highlight.js";
|
|
17
19
|
import { ShadedGeometryHighlightSystem } from "../../highlight/system/ShadedGeometryHighlightSystem.js";
|
|
18
|
-
import
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
20
|
+
import { MeshSystem } from "../../mesh/MeshSystem.js";
|
|
21
|
+
import { ShadedGeometry } from "../ShadedGeometry.js";
|
|
22
|
+
import { ShadedGeometrySystem } from "../ShadedGeometrySystem.js";
|
|
23
|
+
import { SGMesh } from "./SGMesh.js";
|
|
24
|
+
import { SGMeshEvents } from "./SGMeshEvents.js";
|
|
25
|
+
import { SGMeshHighlightSystem } from "./SGMeshHighlightSystem.js";
|
|
26
|
+
import { SGMeshSystem } from "./SGMeshSystem.js";
|
|
25
27
|
|
|
26
28
|
new EngineHarness().initialize({
|
|
27
29
|
configuration(config, engine) {
|
|
@@ -137,6 +139,8 @@ function main(engine) {
|
|
|
137
139
|
terrainSize: new Vector2(100, 100)
|
|
138
140
|
});
|
|
139
141
|
|
|
142
|
+
enableEditor(engine, initializeEditor);
|
|
143
|
+
|
|
140
144
|
const ecd = engine.entityManager.dataset;
|
|
141
145
|
|
|
142
146
|
// const mesh = SGMesh.fromURL("data/models/RTS_Buildings_Humans/18/Building_R_18_out/Building_R_18.gltf");
|
package/src/engine/graphics/ecs/mesh-v2/sg_hierarchy_compute_bounding_box_via_parent_entity.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AABB3 } from "../../../../core/bvh2/aabb3/AABB3.js";
|
|
1
|
+
import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
|
|
3
2
|
import { ParentEntitySystem } from "../../../ecs/parent/ParentEntitySystem.js";
|
|
3
|
+
import { ShadedGeometry } from "./ShadedGeometry.js";
|
|
4
4
|
|
|
5
5
|
const scratch_aabb3 = new AABB3();
|
|
6
6
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import Name from "../../../../../../model/game/ecs/component/Name.js";
|
|
1
2
|
import { EntityNode } from "../../../ecs/parent/EntityNode.js";
|
|
3
|
+
import { copy_three_transform } from "../../../ecs/transform/copy_three_transform.js";
|
|
2
4
|
import { Transform } from "../../../ecs/transform/Transform.js";
|
|
3
5
|
import { ShadedGeometry } from "./ShadedGeometry.js";
|
|
4
|
-
import { copy_three_transform } from "../../../ecs/transform/copy_three_transform.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
*
|
|
@@ -23,6 +24,7 @@ export function three_object_to_entity_composition(root) {
|
|
|
23
24
|
transform.fromMatrix4(root.matrixWorld.elements);
|
|
24
25
|
|
|
25
26
|
entity.add(transform);
|
|
27
|
+
entity.add(new Name(root.name));
|
|
26
28
|
|
|
27
29
|
if (root.isMesh) {
|
|
28
30
|
if (root.isSkinnedMesh) {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { inverseLerp } from "../../../../../../core/math/inverseLerp.js";
|
|
2
1
|
import { assert } from "../../../../../../core/assert.js";
|
|
2
|
+
import { computeHashIntegerArray } from "../../../../../../core/collection/array/computeHashIntegerArray.js";
|
|
3
|
+
import { isArrayEqualStrict } from "../../../../../../core/collection/array/isArrayEqualStrict.js";
|
|
4
|
+
import { computeHashFloatArray } from "../../../../../../core/math/hash/computeHashFloatArray.js";
|
|
5
|
+
import { inverseLerp } from "../../../../../../core/math/inverseLerp.js";
|
|
3
6
|
import { max2 } from "../../../../../../core/math/max2.js";
|
|
4
7
|
import { min2 } from "../../../../../../core/math/min2.js";
|
|
5
|
-
import { ParameterLookupTableFlags } from "./ParameterLookupTableFlags.js";
|
|
6
8
|
import { ParameterLookupTableSerializationAdapter } from "../emitter/serde/ParameterLookupTableSerializationAdapter.js";
|
|
7
|
-
import {
|
|
8
|
-
import { computeHashFloatArray } from "../../../../../../core/math/hash/computeHashFloatArray.js";
|
|
9
|
-
import { isArrayEqualStrict } from "../../../../../../core/collection/array/isArrayEqualStrict.js";
|
|
9
|
+
import { ParameterLookupTableFlags } from "./ParameterLookupTableFlags.js";
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
export class ParameterLookupTable {
|
|
@@ -174,7 +174,7 @@ export class ParameterLookupTable {
|
|
|
174
174
|
const lowValue = data[low_offset + i];
|
|
175
175
|
const highValue = data[high_offset + i];
|
|
176
176
|
|
|
177
|
-
// inlined for speed:
|
|
177
|
+
// inlined for speed: lerp(low, high, fraction)
|
|
178
178
|
const value = lowValue * (1 - fraction) + highValue * fraction;
|
|
179
179
|
|
|
180
180
|
result[i] = value;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { BehaviorStatus } from "../BehaviorStatus.js";
|
|
3
|
+
import { EntityBehavior } from "./EntityBehavior.js";
|
|
4
|
+
|
|
5
|
+
export class SendEventBehavior extends EntityBehavior {
|
|
6
|
+
constructor() {
|
|
7
|
+
super();
|
|
8
|
+
|
|
9
|
+
this.event = "";
|
|
10
|
+
this.data = {};
|
|
11
|
+
this.target = -1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
fromJSON({ event, data = {}, target = -1 }) {
|
|
15
|
+
assert.typeOf(event, 'string', 'event');
|
|
16
|
+
|
|
17
|
+
this.event = event;
|
|
18
|
+
this.data = data;
|
|
19
|
+
this.target = target;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
static fromJSON(j) {
|
|
23
|
+
const r = new SendEventBehavior();
|
|
24
|
+
|
|
25
|
+
r.fromJSON(j);
|
|
26
|
+
|
|
27
|
+
return r;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
toString() {
|
|
31
|
+
return `SendEventBehavior{ event: ${this.event}, data:${this.data}, target:${this.target} }`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
tick(timeDelta) {
|
|
35
|
+
// console.log(`-> ${this}`);
|
|
36
|
+
|
|
37
|
+
const target = this.target !== -1 ? this.target : this.entity;
|
|
38
|
+
|
|
39
|
+
this.ecd.sendEvent(target, this.event, this.data);
|
|
40
|
+
|
|
41
|
+
return BehaviorStatus.Succeeded;
|
|
42
|
+
}
|
|
43
|
+
}
|