@woosh/meep-engine 2.55.0 → 2.56.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.
- package/editor/view/node-graph/PortView.js +2 -2
- package/package.json +1 -1
- package/src/core/binary/BinaryBuffer.js +2 -1
- package/src/core/cache/LoadingCache.js +10 -5
- package/src/core/collection/array/array_remove_element.js +6 -9
- package/src/core/collection/array/array_remove_first.js +13 -6
- package/src/core/collection/array/array_remove_first.spec.js +39 -0
- package/src/core/collection/array/binarySearchHighIndex.spec.js +10 -9
- package/src/core/collection/heap/Uin32Heap.spec.js +36 -0
- package/src/core/collection/heap/Uint32Heap.js +10 -5
- package/src/core/function/FunctionCompiler.js +4 -4
- package/src/core/function/Functions.js +0 -19
- package/src/core/geom/3d/SurfacePoint3.js +30 -20
- package/src/core/geom/3d/SurfacePoint3.spec.js +116 -0
- package/src/core/geom/3d/aabb/AABB3.js +10 -9
- package/src/core/geom/3d/aabb/{aabb3_array_contains_point.js → aabb3_array_intersects_point.js} +4 -1
- package/src/core/geom/3d/aabb/aabb3_from_min_max.js +25 -1
- package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.js +2 -25
- package/src/core/geom/3d/aabb/aabb3_signed_distance_sqr_to_point.js +5 -1
- package/src/core/geom/3d/apply_mat4_transform_to_direction_v3_array.js +5 -1
- package/src/core/geom/3d/apply_mat4_transform_to_v3_array.js +5 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +2 -2
- package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.spec.js +26 -0
- package/src/core/geom/3d/v3_compute_triangle_normal.spec.js +18 -0
- package/src/core/geom/Vector2.js +1 -1
- package/src/core/geom/Vector3.js +1 -1
- package/src/core/geom/packing/miniball/Miniball.spec.js +24 -0
- package/src/core/math/statistics/computeStatisticalPartialMedian.js +2 -2
- package/src/core/model/object/read_property.js +2 -2
- package/src/core/model/object/write_property.js +3 -3
- package/src/core/primitives/numbers/compareNumbers.js +4 -4
- package/src/core/primitives/numbers/number_compare_ascending.js +9 -0
- package/src/core/primitives/numbers/number_compare_ascending.spec.js +9 -0
- package/src/core/primitives/numbers/number_compare_descending.js +9 -0
- package/src/core/primitives/numbers/number_compare_descending.spec.js +9 -0
- package/src/core/primitives/numbers/number_format_by_thousands.spec.js +12 -0
- package/src/core/primitives/numbers/number_pretty_print.js +1 -1
- package/src/core/primitives/strings/compareStrings.spec.js +12 -0
- package/src/core/primitives/strings/string_capitalize.js +15 -0
- package/src/core/primitives/strings/string_capitalize.spec.js +13 -0
- package/src/core/primitives/strings/string_compute_byte_size.js +21 -0
- package/src/core/primitives/strings/string_compute_common_prefix.js +44 -0
- package/src/core/primitives/strings/string_compute_common_prefix.spec.js +23 -0
- package/src/core/primitives/strings/string_format_camel_to_kebab.js +9 -0
- package/src/core/primitives/strings/string_format_camel_to_kebab.spec.js +8 -0
- package/src/core/primitives/strings/string_format_kebab_to_underscore.js +8 -0
- package/src/core/time/current_time_in_seconds.js +11 -0
- package/src/engine/Clock.js +3 -13
- package/src/engine/animation/curve/AnimationCurve.spec.js +27 -0
- package/src/engine/asset/AssetManager.js +2 -2
- package/src/engine/ecs/EntityManager.js +8 -1
- package/src/engine/ecs/EntityManager.spec.js +56 -6
- package/src/engine/ecs/animation/Animation.spec.js +22 -0
- package/src/engine/ecs/attachment/Attachment.js +24 -25
- package/src/engine/ecs/attachment/AttachmentBinding.js +27 -30
- package/src/engine/ecs/attachment/AttachmentSystem.js +21 -24
- package/src/engine/ecs/attachment/BoneAttachmentBinding.js +6 -9
- package/src/engine/ecs/attachment/TransformAttachmentBinding.js +0 -3
- package/src/engine/ecs/components/CharacterController.js +24 -18
- package/src/engine/ecs/dynamic_actions/DynamicActorSystem.js +3 -2
- package/src/engine/ecs/fow/FogOfWarRevealer.js +2 -3
- package/src/engine/ecs/ik/IKMath.js +6 -1
- package/src/engine/ecs/ik/IKProblem.js +17 -17
- package/src/engine/ecs/ik/InverseKinematics.js +6 -7
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +24 -26
- package/src/engine/ecs/storage/BinaryBufferSerializer.js +3 -3
- package/src/engine/ecs/systems/TagSystem.js +1 -6
- package/src/engine/ecs/terrain/ecs/layers/TerrainLayer.js +2 -2
- package/src/engine/graphics/ecs/mesh/skeleton/BoneMapping.js +2 -2
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.spec.js +14 -0
- package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.js +21 -9
- package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.spec.js +79 -0
- package/src/engine/graphics/render/visibility/IncrementalDeltaSet.spec.js +7 -6
- package/src/engine/simulation/Ticker.js +17 -20
- package/src/generation/GridTaskGroup.js +5 -9
- package/src/generation/filtering/numeric/CellFilterCache.js +12 -16
- package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +31 -32
- package/src/generation/filtering/numeric/complex/CellFilterLookupTable.js +6 -9
- package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +7 -10
- package/src/generation/filtering/numeric/complex/CellFilterSobel.js +6 -9
- package/src/generation/filtering/numeric/math/CellFilterMembershipGeneralizedBell.js +18 -21
- package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +24 -25
- package/src/generation/filtering/numeric/sampling/CellFilterSampleLayerLinear.js +1 -1
- package/src/generation/grid/GridData.js +23 -22
- package/src/generation/grid/GridData.spec.js +41 -0
- package/src/generation/grid/GridTaskGenerator.js +7 -8
- package/src/generation/grid/layers/GridDataLayer.js +23 -25
- package/src/generation/markers/GridActionRuleSet.js +20 -22
- package/src/generation/markers/GridCellActionPlaceMarker.js +40 -43
- package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +7 -9
- package/src/generation/markers/MarkerNode.js +44 -44
- package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +15 -18
- package/src/generation/markers/actions/MarkerNodeActionSequence.js +6 -9
- package/src/generation/markers/actions/MarkerNodeProcessingRuleSet.js +5 -7
- package/src/generation/markers/actions/MarkerProcessingRule.js +25 -26
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +12 -15
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -5
- package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +6 -9
- package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +8 -11
- package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +13 -13
- package/src/generation/markers/actions/util/GridCellActionDebugBreak.js +5 -8
- package/src/generation/markers/actions/util/GridCellActionLogToConsole.js +1 -4
- package/src/generation/markers/emitter/MarkerNodeConsumerBuffer.js +10 -13
- package/src/generation/markers/emitter/MarkerNodeEmitterFromAction.js +5 -9
- package/src/generation/markers/emitter/MarkerNodeEmitterGridCellAction.js +12 -15
- package/src/generation/markers/emitter/MarkerNodeEmitterGroup.js +5 -8
- package/src/generation/markers/emitter/MarkerNodeEmitterPredicated.js +18 -21
- package/src/generation/markers/matcher/MarkerNodeMatcher.js +2 -1
- package/src/generation/markers/matcher/MarkerNodeMatcherBinary.js +12 -13
- package/src/generation/markers/matcher/MarkerNodeMatcherContainsTag.js +7 -9
- package/src/generation/markers/matcher/MarkerNodeMatcherNot.js +7 -9
- package/src/generation/markers/predicate/GridDataNodePredicateBinary.js +10 -14
- package/src/generation/markers/predicate/GridDataNodePredicateNot.js +9 -11
- package/src/generation/markers/predicate/GridDataNodePredicateOverlaps.js +6 -9
- package/src/generation/markers/transform/MarkerNodeTransformRotateRandom.js +2 -6
- package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +6 -9
- package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +1 -4
- package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +12 -15
- package/src/generation/markers/transform/MarkerNodeTransformerRecordPropertyClosure.js +14 -17
- package/src/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +21 -23
- package/src/generation/markers/transform/MarkerNodeTransformerRemoveTag.js +1 -4
- package/src/generation/markers/transform/MarkerNodeTransformerSequence.js +6 -9
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +13 -17
- package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +12 -16
- package/src/generation/placement/GridCellActionTransformNearbyMarkers.js +26 -29
- package/src/generation/placement/GridCellPlacementRule.js +30 -32
- package/src/generation/placement/action/GridCellActionPlaceTags.js +26 -28
- package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +16 -20
- package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +13 -16
- package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +11 -14
- package/src/generation/placement/action/util/CellMatcherWithinAABB.js +2 -6
- package/src/generation/placement/action/util/GridCellActionSequence.js +7 -9
- package/src/generation/placement/action/util/GridCellDisplacedAction.js +9 -12
- package/src/generation/rules/CellMatcherFromFilter.js +6 -9
- package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -9
- package/src/generation/rules/GridLayerCellMatcher.js +11 -14
- package/src/generation/rules/cell/CellMatcherContainsMarkerWithinRadius.js +11 -14
- package/src/generation/rules/cell/CellMatcherGridPattern.js +6 -8
- package/src/generation/rules/cell/GridPatternMatcherCell.js +11 -12
- package/src/generation/rules/logic/CellMatcherBinary.js +10 -14
- package/src/generation/rules/logic/CellMatcherDecorator.js +5 -8
- package/src/generation/theme/AreaMask.js +15 -17
- package/src/generation/theme/AreaTheme.js +7 -8
- package/src/generation/theme/TerrainLayerDescription.js +10 -12
- package/src/generation/theme/TerrainLayerRule.js +11 -13
- package/src/generation/theme/TerrainTheme.js +6 -7
- package/src/generation/theme/Theme.js +15 -17
- package/src/generation/theme/ThemeEngine.js +16 -18
- package/src/view/string_tag_to_css_class_name.js +2 -2
- package/src/view/tooltip/gml/TooltipParser.js +2 -2
- package/src/core/cache/PersistentCacheAdapter.js +0 -378
- package/src/core/primitives/strings/StringUtils.js +0 -105
- package/src/core/primitives/strings/StringUtils.spec.js +0 -42
- package/src/engine/ecs/components/MonsterAI.js +0 -15
- package/src/generation/markers/MarkerRelation.js +0 -13
|
@@ -2,6 +2,7 @@ import { EntityManager } from "./EntityManager.js";
|
|
|
2
2
|
import { System, SystemState } from "./System.js";
|
|
3
3
|
import { jest } from '@jest/globals';
|
|
4
4
|
import { IllegalStateException } from "../../core/fsm/exceptions/IllegalStateException.js";
|
|
5
|
+
import { EntityComponentDataset } from "./EntityComponentDataset.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
*
|
|
@@ -21,15 +22,11 @@ function makeEm(systems = []) {
|
|
|
21
22
|
});
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
class DummyComponent {
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
class DummySystem extends System {
|
|
28
|
-
|
|
29
|
-
super();
|
|
30
|
-
|
|
31
|
-
this.dependencies = [DummyComponent];
|
|
32
|
-
}
|
|
29
|
+
dependencies = [DummyComponent];
|
|
33
30
|
}
|
|
34
31
|
|
|
35
32
|
test("constructor doesn't throw", () => {
|
|
@@ -143,6 +140,19 @@ test("addSystem", async () => {
|
|
|
143
140
|
expect(() => em.addSystem(new DummySystem())).toThrow(IllegalStateException);
|
|
144
141
|
});
|
|
145
142
|
|
|
143
|
+
test("add system to running manager", async () => {
|
|
144
|
+
|
|
145
|
+
const em = new EntityManager();
|
|
146
|
+
|
|
147
|
+
await new Promise((resolve, reject) => em.startup(resolve, reject));
|
|
148
|
+
|
|
149
|
+
const system = new DummySystem();
|
|
150
|
+
|
|
151
|
+
await em.addSystem(system);
|
|
152
|
+
|
|
153
|
+
expect(em.hasSystem(DummySystem)).toBe(true);
|
|
154
|
+
});
|
|
155
|
+
|
|
146
156
|
test("removeSystem", async () => {
|
|
147
157
|
|
|
148
158
|
const system = new DummySystem();
|
|
@@ -158,3 +168,43 @@ test("removeSystem", async () => {
|
|
|
158
168
|
// Try again, this time we expect nothing to happen
|
|
159
169
|
expect(await em.removeSystem(system)).toEqual(false);
|
|
160
170
|
});
|
|
171
|
+
|
|
172
|
+
test("attempt to detach dataset when none is attached", () => {
|
|
173
|
+
const manager = new EntityManager();
|
|
174
|
+
|
|
175
|
+
expect(() => manager.detachDataSet()).not.toThrow();
|
|
176
|
+
|
|
177
|
+
// do it second time, in case something changes in the above call
|
|
178
|
+
expect(() => manager.detachDataSet()).not.toThrow();
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
test("getComponentTypeMap with 1 system", async () => {
|
|
182
|
+
|
|
183
|
+
const em = await makeEm([
|
|
184
|
+
new DummySystem()
|
|
185
|
+
]);
|
|
186
|
+
|
|
187
|
+
expect(em.getComponentTypeMap()).toEqual([DummyComponent]);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
test("attempting to attach another dataset before detaching previous one should throw", () => {
|
|
191
|
+
|
|
192
|
+
const em = new EntityManager();
|
|
193
|
+
|
|
194
|
+
em.attachDataSet(new EntityComponentDataset());
|
|
195
|
+
|
|
196
|
+
expect(() => em.attachDataSet(new EntityComponentDataset())).toThrow();
|
|
197
|
+
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test("attaching same dataset should succeed", () => {
|
|
201
|
+
|
|
202
|
+
const em = new EntityManager();
|
|
203
|
+
|
|
204
|
+
const ecd = new EntityComponentDataset();
|
|
205
|
+
em.attachDataSet(ecd);
|
|
206
|
+
|
|
207
|
+
em.attachDataSet(ecd); // second time
|
|
208
|
+
|
|
209
|
+
expect(em.dataset).toBe(ecd);
|
|
210
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Animation } from "./Animation.js";
|
|
2
|
+
import { AnimationClip } from "./AnimationClip.js";
|
|
3
|
+
|
|
4
|
+
test("constructor does not throw", () => {
|
|
5
|
+
new Animation()
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
test("equality", () => {
|
|
9
|
+
|
|
10
|
+
const a = new Animation();
|
|
11
|
+
const b = new Animation();
|
|
12
|
+
|
|
13
|
+
expect(a.equals(b)).toBe(true);
|
|
14
|
+
|
|
15
|
+
a.clips.add(new AnimationClip());
|
|
16
|
+
|
|
17
|
+
expect(a.equals(b)).toBe(false);
|
|
18
|
+
|
|
19
|
+
b.clips.add(new AnimationClip());
|
|
20
|
+
|
|
21
|
+
expect(a.equals(b)).toBe(true);
|
|
22
|
+
});
|
|
@@ -1,31 +1,30 @@
|
|
|
1
1
|
import { Transform } from "../transform/Transform.js";
|
|
2
2
|
|
|
3
3
|
export class Attachment {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Parent entity to which attachment is made
|
|
7
|
+
* @type {number}
|
|
8
|
+
*/
|
|
9
|
+
parent = -1;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Socket on the parent entity to which attachment is made
|
|
13
|
+
* @type {String}
|
|
14
|
+
*/
|
|
15
|
+
socket = null;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @type {Transform}
|
|
20
|
+
*/
|
|
21
|
+
transform = new Transform();
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
*
|
|
25
|
+
* @type {boolean}
|
|
26
|
+
*/
|
|
27
|
+
immediate = false;
|
|
29
28
|
|
|
30
29
|
fromJSON({ parent, socket, transform, immediate = false }) {
|
|
31
30
|
this.parent = parent;
|
|
@@ -1,34 +1,31 @@
|
|
|
1
1
|
export class AttachmentBinding {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
this.attachment = null;
|
|
31
|
-
}
|
|
2
|
+
attachedEntity = -1;
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* @type {Transform}
|
|
7
|
+
*/
|
|
8
|
+
attachedTransform = null;
|
|
9
|
+
|
|
10
|
+
parentEntity = -1;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @type {Transform}
|
|
15
|
+
*/
|
|
16
|
+
parentTransform = null;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @type {AttachmentSocket}
|
|
21
|
+
*/
|
|
22
|
+
socket = null;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
*
|
|
26
|
+
* @type {Attachment}
|
|
27
|
+
*/
|
|
28
|
+
attachment = null;
|
|
32
29
|
|
|
33
30
|
link() {
|
|
34
31
|
|
|
@@ -10,35 +10,32 @@ import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessS
|
|
|
10
10
|
import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
|
|
11
11
|
|
|
12
12
|
export class AttachmentSystem extends System {
|
|
13
|
-
constructor() {
|
|
14
|
-
super();
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
dependencies = [Attachment, Transform];
|
|
17
15
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
components_used = [
|
|
17
|
+
ResourceAccessSpecification.from(AttachmentSockets, ResourceAccessKind.Read),
|
|
18
|
+
ResourceAccessSpecification.from(Mesh, ResourceAccessKind.Read),
|
|
19
|
+
ResourceAccessSpecification.from(Transform, ResourceAccessKind.Write)
|
|
20
|
+
];
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @type {number[]}
|
|
25
|
+
*/
|
|
26
|
+
waiting = [];
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
28
|
+
/**
|
|
29
|
+
*
|
|
30
|
+
* @type {Map<number,AttachmentBinding>}
|
|
31
|
+
*/
|
|
32
|
+
bindings = new Map();
|
|
35
33
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
* @type {Map<number, AttachmentBinding[]>}
|
|
37
|
+
*/
|
|
38
|
+
parentBindingIndex = new Map();
|
|
42
39
|
|
|
43
40
|
|
|
44
41
|
/**
|
|
@@ -12,15 +12,12 @@ const pPosition = new Vector3();
|
|
|
12
12
|
const attachmentM4 = new Matrix4();
|
|
13
13
|
|
|
14
14
|
export class BoneAttachmentBinding extends AttachmentBinding {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*/
|
|
22
|
-
this.bone = null;
|
|
23
|
-
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @type {Bone}
|
|
19
|
+
*/
|
|
20
|
+
bone = null;
|
|
24
21
|
|
|
25
22
|
update() {
|
|
26
23
|
const socketTransform = this.socket.transform;
|
|
@@ -6,9 +6,6 @@ const scratch_m4_1 = new Float32Array(16);
|
|
|
6
6
|
const scratch_m4_2 = new Float32Array(16);
|
|
7
7
|
|
|
8
8
|
export class TransformAttachmentBinding extends AttachmentBinding {
|
|
9
|
-
constructor() {
|
|
10
|
-
super();
|
|
11
|
-
}
|
|
12
9
|
|
|
13
10
|
/**
|
|
14
11
|
* TODO make use of Transform.multiplyTransforms for better readability and performance
|
|
@@ -1,25 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* FPS-style character controller
|
|
3
|
+
* @author Alex Goldring
|
|
4
|
+
* @copyright Alex Goldring 7/4/2014
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
this.onSolidSurface = false;
|
|
11
|
-
this.lockedTimeout = 0;
|
|
6
|
+
class CharacterController {
|
|
7
|
+
height = 4;
|
|
8
|
+
onSolidSurface = false;
|
|
9
|
+
lockedTimeout = 0;
|
|
12
10
|
//
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
forward = false;
|
|
12
|
+
back = false;
|
|
13
|
+
left = false;
|
|
14
|
+
right = false;
|
|
15
|
+
sprinting = false;
|
|
16
|
+
attacking = false;
|
|
17
|
+
aim = null;
|
|
20
18
|
//
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
movementSpeed = 1;
|
|
20
|
+
sprintingMultiplier = 1;
|
|
21
|
+
|
|
22
|
+
constructor({
|
|
23
|
+
movementSpeed = 1,
|
|
24
|
+
sprintingMultiplier = 1.2
|
|
25
|
+
} = {}) {
|
|
26
|
+
this.movementSpeed = movementSpeed;
|
|
27
|
+
this.sprintingMultiplier = sprintingMultiplier;
|
|
28
|
+
}
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
export default CharacterController;
|
|
@@ -3,7 +3,7 @@ import { AbstractContextSystem } from "../system/AbstractContextSystem.js";
|
|
|
3
3
|
import { SystemEntityContext } from "../system/SystemEntityContext.js";
|
|
4
4
|
import { DataScope } from "../../../../../model/game/unit/actions/data/DataScope.js";
|
|
5
5
|
import { Blackboard } from "../../intelligence/blackboard/Blackboard.js";
|
|
6
|
-
import {
|
|
6
|
+
import { returnTrue } from "../../../core/function/Functions.js";
|
|
7
7
|
import { EntityProxyScope } from "../binding/EntityProxyScope.js";
|
|
8
8
|
import EntityBuilder from "../EntityBuilder.js";
|
|
9
9
|
import { BehaviorComponent } from "../../intelligence/behavior/ecs/BehaviorComponent.js";
|
|
@@ -23,6 +23,7 @@ import { randomMultipleFromArray } from "../../../core/collection/array/randomMu
|
|
|
23
23
|
import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
|
|
24
24
|
import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
|
|
25
25
|
import { EntityBuilderFlags } from "../EntityBuilderFlags.js";
|
|
26
|
+
import { number_compare_descending } from "../../../core/primitives/numbers/number_compare_descending.js";
|
|
26
27
|
|
|
27
28
|
/**
|
|
28
29
|
* In seconds
|
|
@@ -503,7 +504,7 @@ export class DynamicActorSystem extends AbstractContextSystem {
|
|
|
503
504
|
|
|
504
505
|
}
|
|
505
506
|
|
|
506
|
-
scores.sort(
|
|
507
|
+
scores.sort(number_compare_descending);
|
|
507
508
|
|
|
508
509
|
for (let i = 0; i < scores.length && result.length < count; i++) {
|
|
509
510
|
const score = scores[i];
|
|
@@ -9,7 +9,12 @@
|
|
|
9
9
|
* @param {number} directionY
|
|
10
10
|
* @param {number} directionZ
|
|
11
11
|
*/
|
|
12
|
-
export function v3_computeOffsetVector(
|
|
12
|
+
export function v3_computeOffsetVector(
|
|
13
|
+
result,
|
|
14
|
+
distance,
|
|
15
|
+
sourceX, sourceY, sourceZ,
|
|
16
|
+
directionX, directionY, directionZ
|
|
17
|
+
) {
|
|
13
18
|
if (distance === 0) {
|
|
14
19
|
result.set(sourceX, sourceY, sourceZ);
|
|
15
20
|
return;
|
|
@@ -2,23 +2,23 @@ import { ObjectPoolFactory } from "../../../core/model/object/ObjectPoolFactory.
|
|
|
2
2
|
import { noop } from "../../../core/function/Functions.js";
|
|
3
3
|
|
|
4
4
|
export class IKProblem {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
*
|
|
8
|
+
* @type {IKConstraint}
|
|
9
|
+
*/
|
|
10
|
+
constraint = null;
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @type {Skeleton}
|
|
14
|
+
*/
|
|
15
|
+
skeleton = null;
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @type {Terrain}
|
|
19
|
+
*/
|
|
20
|
+
terrain = null;
|
|
21
|
+
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -2,13 +2,12 @@ import { IKConstraint } from "./IKConstraint.js";
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
export class InverseKinematics {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @readonly
|
|
8
|
+
* @type {IKConstraint[]}
|
|
9
|
+
*/
|
|
10
|
+
constraints = [];
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
*
|
|
@@ -11,32 +11,30 @@ import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
export class InverseKinematicsSystem extends System {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this.__terrain = null;
|
|
39
|
-
}
|
|
14
|
+
|
|
15
|
+
dependencies = [InverseKinematics, Mesh];
|
|
16
|
+
|
|
17
|
+
components_used = [
|
|
18
|
+
ResourceAccessSpecification.from(Mesh, ResourceAccessKind.Read | ResourceAccessSpecification.Write)
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
* @type {{"2BIK": TwoBoneInverseKinematicsSolver}}
|
|
24
|
+
*/
|
|
25
|
+
solvers = {
|
|
26
|
+
"2BIK": new TwoBoneInverseKinematicsSolver(),
|
|
27
|
+
"1BSA": new OneBoneSurfaceAlignmentSolver()
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
problems = {};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @type {Terrain}
|
|
35
|
+
*/
|
|
36
|
+
__terrain = null;
|
|
37
|
+
|
|
40
38
|
|
|
41
39
|
get componentClass() {
|
|
42
40
|
return InverseKinematics;
|
|
@@ -2,9 +2,9 @@ import { SerializationFlags, SerializationMetadata } from "../components/Seriali
|
|
|
2
2
|
import { assert } from "../../../core/assert.js";
|
|
3
3
|
import { BinaryCollectionSerializer } from "./binary/collection/BinaryCollectionSerializer.js";
|
|
4
4
|
import { COMPONENT_SERIALIZATION_TRANSIENT_FIELD } from "./COMPONENT_SERIALIZATION_TRANSIENT_FIELD.js";
|
|
5
|
-
import { currentTimeInSeconds } from "../../Clock.js";
|
|
6
5
|
import { BinaryObjectSerializationAdapter } from "./binary/object/BinaryObjectSerializationAdapter.js";
|
|
7
6
|
import { logger } from "../../logging/GlobalLogger.js";
|
|
7
|
+
import { current_time_in_seconds } from "../../../core/time/current_time_in_seconds.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @template T
|
|
@@ -136,7 +136,7 @@ class BinaryBufferSerializer {
|
|
|
136
136
|
continue;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
-
const __start_time =
|
|
139
|
+
const __start_time = current_time_in_seconds();
|
|
140
140
|
|
|
141
141
|
let lastEntity = 0;
|
|
142
142
|
|
|
@@ -158,7 +158,7 @@ class BinaryBufferSerializer {
|
|
|
158
158
|
|
|
159
159
|
const numComponentsWritten = collectionSerializer.getElementCount();
|
|
160
160
|
|
|
161
|
-
const __end_time =
|
|
161
|
+
const __end_time = current_time_in_seconds();
|
|
162
162
|
|
|
163
163
|
collectionSerializer.finalize();
|
|
164
164
|
|
|
@@ -2,10 +2,10 @@ import Vector2 from "../../../../../core/geom/Vector2.js";
|
|
|
2
2
|
import { GameAssetType } from "../../../../asset/GameAssetType.js";
|
|
3
3
|
import { Sampler2D } from "../../../../graphics/texture/sampler/Sampler2D.js";
|
|
4
4
|
import { Cache } from "../../../../../core/cache/Cache.js";
|
|
5
|
-
import { computeUTF8StringByteSize } from "../../../../../core/primitives/strings/StringUtils.js";
|
|
6
5
|
import Signal from "../../../../../core/events/signal/Signal.js";
|
|
7
6
|
import { computeStringHash } from "../../../../../core/primitives/strings/computeStringHash.js";
|
|
8
7
|
import { copy_Sampler2D_channel_data } from "../../../../graphics/texture/sampler/copy_Sampler2D_channel_data.js";
|
|
8
|
+
import { string_compute_byte_size } from "../../../../../core/primitives/strings/string_compute_byte_size.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
*
|
|
@@ -14,7 +14,7 @@ import { copy_Sampler2D_channel_data } from "../../../../graphics/texture/sample
|
|
|
14
14
|
const cache = new Cache({
|
|
15
15
|
maxWeight: 304857600,
|
|
16
16
|
keyHashFunction: computeStringHash,
|
|
17
|
-
keyWeigher:
|
|
17
|
+
keyWeigher: string_compute_byte_size,
|
|
18
18
|
/**
|
|
19
19
|
*
|
|
20
20
|
* @param {Sampler2D} sampler
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { computeCommonPrefix } from "../../../../../core/primitives/strings/StringUtils.js";
|
|
2
1
|
import { HumanoidBoneType } from "./HumanoidBoneType.js";
|
|
3
2
|
import { distance as levenshtein_distance } from "fastest-levenshtein";
|
|
4
3
|
import { assert } from "../../../../../core/assert.js";
|
|
4
|
+
import { string_compute_common_prefix } from "../../../../../core/primitives/strings/string_compute_common_prefix.js";
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -25,7 +25,7 @@ export class BoneMapping {
|
|
|
25
25
|
*/
|
|
26
26
|
build(names) {
|
|
27
27
|
//strip common prefix
|
|
28
|
-
const commonPrefix =
|
|
28
|
+
const commonPrefix = string_compute_common_prefix(names);
|
|
29
29
|
const commonPrefixLength = commonPrefix.length;
|
|
30
30
|
|
|
31
31
|
const conditionedNames = names.map(function (name) {
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { ShadedGeometry } from "./ShadedGeometry.js";
|
|
2
|
+
import { BufferGeometry, MeshBasicMaterial } from "three";
|
|
2
3
|
|
|
3
4
|
test("constructor does not throw", () => {
|
|
4
5
|
expect(() => new ShadedGeometry()).not.toThrow()
|
|
5
6
|
});
|
|
7
|
+
|
|
8
|
+
test("hash", () => {
|
|
9
|
+
const mesh = new ShadedGeometry();
|
|
10
|
+
|
|
11
|
+
mesh.geometry = new BufferGeometry();
|
|
12
|
+
mesh.material = new MeshBasicMaterial();
|
|
13
|
+
|
|
14
|
+
const hash = mesh.hash();
|
|
15
|
+
|
|
16
|
+
expect(typeof hash).toBe("number")
|
|
17
|
+
expect(Number.isInteger(hash)).toBe(true);
|
|
18
|
+
expect(mesh.hash()).toEqual(hash);
|
|
19
|
+
});
|