@woosh/meep-engine 2.52.0 → 2.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/editor/actions/concrete/WriteGridValueAction.js +1 -1
  2. package/editor/ecs/component/prototypeObjectEditor.js +1 -1
  3. package/editor/process/ObstacleGridDisplayProcess.js +2 -2
  4. package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +1 -1
  5. package/editor/tools/GridPaintTool.js +2 -2
  6. package/package.json +4 -3
  7. package/samples/generation/SampleGenerator0.js +1 -1
  8. package/samples/generation/generators/interactive/mir_generator_place_buff_objects.js +1 -1
  9. package/samples/generation/generators/mir_generator_place_bases.js +1 -1
  10. package/samples/generation/generators/mir_generator_place_road_decorators.js +1 -1
  11. package/samples/generation/generators/mir_generator_place_starting_point.js +1 -1
  12. package/samples/generation/main.js +2 -2
  13. package/samples/generation/rules/matcher_play_area.js +1 -1
  14. package/samples/generation/rules/matcher_tag_occupied.js +1 -1
  15. package/samples/generation/rules/matcher_tag_traversable.js +1 -1
  16. package/samples/generation/themes/SampleTheme0.js +5 -5
  17. package/src/core/collection/table/RowFirstTableSpec.js +8 -4
  18. package/src/core/geom/3d/matrix/MATRIX_4_IDENTITY.spec.js +10 -0
  19. package/src/engine/Engine.spec.js +4 -0
  20. package/src/engine/ecs/EntityComponentDataset.js +1 -1
  21. package/src/engine/ecs/EntityObserver.spec.js +1 -1
  22. package/src/engine/ecs/dynamic_actions/actions/definition/{WhiteToBlackboardActionDescription.js → WriteToBlackboardActionDescription.js} +2 -2
  23. package/src/engine/ecs/dynamic_actions/actions/definition/deserializeActionFromJSON.js +2 -2
  24. package/src/engine/ecs/guid/GUIDSerializationAdapter.spec.js +21 -0
  25. package/src/engine/ecs/parent/EntityNode.js +1 -1
  26. package/src/engine/ecs/parent/EntityNode.spec.js +104 -0
  27. package/src/engine/ecs/speaker/Voice.js +4 -0
  28. package/src/engine/ecs/team/Team.js +0 -44
  29. package/src/engine/ecs/team/TeamSerializationAdapter.js +46 -0
  30. package/src/engine/ecs/transform/Transform.js +1 -1
  31. package/src/engine/ecs/transform/Transform.spec.js +24 -0
  32. package/src/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
  33. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +2 -2
  34. package/src/engine/graphics/ecs/water2/shader/testWaterShader.js +2 -2
  35. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
  36. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +2 -2
  37. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
  38. package/src/engine/graphics/texture/TextureBackedMemoryRegion.js +4 -1
  39. package/src/engine/graphics/texture/sampler/filter/filter_lanczos3.js +7 -2
  40. package/src/engine/grid/{components → grid2transform}/GridPosition2Transform.js +0 -41
  41. package/src/engine/grid/grid2transform/GridPosition2TransformSerializationUpgrader_0_1.js +40 -0
  42. package/src/engine/grid/{systems → grid2transform}/GridPosition2TransformSystem.js +3 -3
  43. package/src/engine/grid/{components → position}/GridPosition.js +4 -0
  44. package/src/engine/grid/{systems → position}/GridPositionSystem.js +1 -1
  45. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +1 -1
  46. package/src/engine/input/devices/PointerDevice.spec.js +5 -0
  47. package/src/engine/navigation/ecs/components/computeCatmullRomSpline.js +5 -1
  48. package/src/engine/navigation/ecs/path_following/PathFollower.js +40 -32
  49. package/src/engine/navigation/ecs/path_following/PathFollower.spec.js +27 -0
  50. package/src/generation/filtering/CellFilter.js +6 -9
  51. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.js +1 -4
  52. package/src/generation/filtering/core/CellFilterBinaryOperation.js +12 -15
  53. package/src/generation/filtering/core/CellFilterOperationTertiary.js +15 -19
  54. package/src/generation/filtering/numeric/CellFilterLiteralFloat.js +6 -9
  55. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +1 -1
  56. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +2 -2
  57. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +1 -1
  58. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +1 -1
  59. package/src/engine/graphics/texture/ExportCanvasAsPNG.js +0 -7
  60. package/src/engine/navigation/PathFinder.js +0 -172
  61. package/src/engine/navigation/PathWorker.js +0 -78
  62. package/src/engine/navigation/ecs/systems/PathFinderSystem.js +0 -63
  63. package/src/engine/navigation/ecs/systems/PathSystem.js +0 -19
  64. package/src/engine/navigation/funnel/Funnel.js +0 -196
  65. package/src/generation/ZoneNode.js +0 -9
  66. /package/{src/generation → samples/generation/grid}/GridTags.js +0 -0
  67. /package/src/engine/grid/{components → grid2transform}/GridPosition2TransformFlags.js +0 -0
  68. /package/src/engine/grid/{components → grid2transform}/GridPosition2TransformSerializationAdapter.js +0 -0
  69. /package/src/engine/grid/{components → obstacle}/GridObstacle.js +0 -0
  70. /package/src/engine/grid/{components → obstacle}/GridObstacle.spec.js +0 -0
  71. /package/src/engine/grid/{components → obstacle}/GridObstacleSerializationAdapter.js +0 -0
  72. /package/src/engine/grid/{components → position}/GridPositionSerializationAdapter.js +0 -0
  73. /package/src/engine/grid/{components → position}/GridPositionSerializationUpdater_0_1.js +0 -0
@@ -1,4 +1,4 @@
1
- import GridObstacle from "../../../src/engine/grid/components/GridObstacle.js";
1
+ import GridObstacle from "../../../src/engine/grid/obstacle/GridObstacle.js";
2
2
  import { Action } from "../../../src/core/process/undo/Action.js";
3
3
 
4
4
  class WriteGridValueAction extends Action {
@@ -47,7 +47,7 @@ import { ParticleEmitterEditor } from "./editors/ecs/ParticleEmitterEditor.js";
47
47
  import Vector4 from "../../../src/core/geom/Vector4.js";
48
48
  import { Vector4Editor } from "./editors/geom/Vector4Editor.js";
49
49
  import { Trail2DEditor } from "./editors/ecs/Trail2DEditor.js";
50
- import GridObstacle from "../../../src/engine/grid/components/GridObstacle.js";
50
+ import GridObstacle from "../../../src/engine/grid/obstacle/GridObstacle.js";
51
51
  import { Vector2Editor } from "./editors/geom/Vector2Editor.js";
52
52
  import Vector2 from "../../../src/core/geom/Vector2.js";
53
53
  import { randomIntegerBetween } from "../../../src/core/math/random/randomIntegerBetween.js";
@@ -1,6 +1,6 @@
1
1
  import { EditorProcess } from "./EditorProcess.js";
2
- import GridObstacle from "../../src/engine/grid/components/GridObstacle.js";
3
- import GridPosition from "../../src/engine/grid/components/GridPosition.js";
2
+ import GridObstacle from "../../src/engine/grid/obstacle/GridObstacle.js";
3
+ import GridPosition from "../../src/engine/grid/position/GridPosition.js";
4
4
  import { Sampler2D } from "../../src/engine/graphics/texture/sampler/Sampler2D.js";
5
5
  import { obtainTerrain } from "../../src/engine/ecs/terrain/util/obtainTerrain.js";
6
6
 
@@ -11,7 +11,7 @@ import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
11
11
  import EditorEntity from "../../ecs/EditorEntity.js";
12
12
  import { EventType } from "../../../src/engine/ecs/EntityManager.js";
13
13
  import { make3DSymbolicDisplay } from "./make3DSymbolicDisplay.js";
14
- import GridPosition from "../../../src/engine/grid/components/GridPosition.js";
14
+ import GridPosition from "../../../src/engine/grid/position/GridPosition.js";
15
15
  import { ProcessState } from "../../../src/core/process/ProcessState.js";
16
16
  import { obtainTerrain } from "../../../src/engine/ecs/terrain/util/obtainTerrain.js";
17
17
 
@@ -1,6 +1,6 @@
1
1
  import Tool from "./engine/Tool.js";
2
- import GridPosition from "../../src/engine/grid/components/GridPosition.js";
3
- import GridObstacle from "../../src/engine/grid/components/GridObstacle.js";
2
+ import GridPosition from "../../src/engine/grid/position/GridPosition.js";
3
+ import GridObstacle from "../../src/engine/grid/obstacle/GridObstacle.js";
4
4
  import Vector4 from "../../src/core/geom/Vector4.js";
5
5
  import ObservedValue from "../../src/core/model/ObservedValue.js";
6
6
  import Vector1 from "../../src/core/geom/Vector1.js";
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.52.0",
8
+ "version": "2.53.0",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -52,8 +52,9 @@
52
52
  "@rollup/plugin-terser": "0.4.0",
53
53
  "@rollup/plugin-strip": "3.0.2",
54
54
  "@types/three": "^0.135.0",
55
- "babel-jest": "26.6.3",
56
- "jest": "26.6.3",
55
+ "babel-jest": "29.5.0",
56
+ "jest": "29.5.0",
57
+ "jest-environment-jsdom": "29.5.0",
57
58
  "rollup": "3.16.0"
58
59
  },
59
60
  "keywords": [
@@ -2,7 +2,7 @@ import { GridTaskGroup } from "../../src/generation/GridTaskGroup.js";
2
2
  import { GridCellPlacementRule } from "../../src/generation/placement/GridCellPlacementRule.js";
3
3
  import { CellMatcherGridPattern } from "../../src/generation/rules/cell/CellMatcherGridPattern.js";
4
4
  import { CellMatcherLayerBitMaskTest } from "../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
5
- import { GridTags } from "../../src/generation/GridTags.js";
5
+ import { GridTags } from "./grid/GridTags.js";
6
6
  import { CellMatcherNot } from "../../src/generation/rules/logic/CellMatcherNot.js";
7
7
  import { GridCellActionPlaceMarker } from "../../src/generation/markers/GridCellActionPlaceMarker.js";
8
8
  import { GridTaskCellularAutomata } from "../../src/generation/grid/generation/discrete/GridTaskCellularAutomata.js";
@@ -5,7 +5,7 @@ import {
5
5
  CellMatcherContainsMarkerWithinRadius
6
6
  } from "../../../../src/generation/rules/cell/CellMatcherContainsMarkerWithinRadius.js";
7
7
  import { GridCellActionPlaceTags } from "../../../../src/generation/placement/action/GridCellActionPlaceTags.js";
8
- import { GridTags } from "../../../../src/generation/GridTags.js";
8
+ import { GridTags } from "../../grid/GridTags.js";
9
9
  import { bitwiseAnd } from "../../../../src/core/binary/operations/bitwiseAnd.js";
10
10
  import { GridCellActionPlaceMarker } from "../../../../src/generation/markers/GridCellActionPlaceMarker.js";
11
11
  import { GridCellPlacementRule } from "../../../../src/generation/placement/GridCellPlacementRule.js";
@@ -3,7 +3,7 @@ import { GridCellPlacementRule } from "../../../src/generation/placement/GridCel
3
3
  import { CellMatcherGridPattern } from "../../../src/generation/rules/cell/CellMatcherGridPattern.js";
4
4
  import { GridActionRuleSet } from "../../../src/generation/markers/GridActionRuleSet.js";
5
5
  import { GridCellActionPlaceTags } from "../../../src/generation/placement/action/GridCellActionPlaceTags.js";
6
- import { GridTags } from "../../../src/generation/GridTags.js";
6
+ import { GridTags } from "../grid/GridTags.js";
7
7
  import { GridCellActionPlaceMarker } from "../../../src/generation/markers/GridCellActionPlaceMarker.js";
8
8
  import { CellMatcherNot } from "../../../src/generation/rules/logic/CellMatcherNot.js";
9
9
  import {
@@ -3,7 +3,7 @@ import { GridActionRuleSet } from "../../../src/generation/markers/GridActionRul
3
3
  import { GridCellPlacementRule } from "../../../src/generation/placement/GridCellPlacementRule.js";
4
4
  import { CellMatcherGridPattern } from "../../../src/generation/rules/cell/CellMatcherGridPattern.js";
5
5
  import { CellMatcherLayerBitMaskTest } from "../../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
6
- import { GridTags } from "../../../src/generation/GridTags.js";
6
+ import { GridTags } from "../grid/GridTags.js";
7
7
  import { CellMatcherAnd } from "../../../src/generation/rules/logic/CellMatcherAnd.js";
8
8
  import { CellMatcherNot } from "../../../src/generation/rules/logic/CellMatcherNot.js";
9
9
  import { GridCellActionPlaceMarker } from "../../../src/generation/markers/GridCellActionPlaceMarker.js";
@@ -2,7 +2,7 @@ import { GridCellPlacementRule } from "../../../src/generation/placement/GridCel
2
2
  import { matcher_tag_traversable_unoccupied } from "../rules/matcher_tag_traversable_unoccupied.js";
3
3
  import { CellMatcherNot } from "../../../src/generation/rules/logic/CellMatcherNot.js";
4
4
  import { GridCellActionPlaceTags } from "../../../src/generation/placement/action/GridCellActionPlaceTags.js";
5
- import { GridTags } from "../../../src/generation/GridTags.js";
5
+ import { GridTags } from "../grid/GridTags.js";
6
6
  import { GridCellActionPlaceMarker } from "../../../src/generation/markers/GridCellActionPlaceMarker.js";
7
7
  import { GridTaskExecuteRuleTimes } from "../../../src/generation/grid/generation/GridTaskExecuteRuleTimes.js";
8
8
  import { CellMatcherLayerBitMaskTest } from "../../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
@@ -7,9 +7,9 @@ import { TopDownCameraLander } from "../../src/engine/graphics/ecs/camera/topdow
7
7
  import Terrain from "../../src/engine/ecs/terrain/ecs/Terrain.js";
8
8
  import { TerrainFlags } from "../../src/engine/ecs/terrain/ecs/TerrainFlags.js";
9
9
  import Water from "../../src/engine/graphics/ecs/water/Water.js";
10
- import GridObstacle from "../../src/engine/grid/components/GridObstacle.js";
10
+ import GridObstacle from "../../src/engine/grid/obstacle/GridObstacle.js";
11
11
  import EntityBuilder from "../../src/engine/ecs/EntityBuilder.js";
12
- import GridPosition from "../../src/engine/grid/components/GridPosition.js";
12
+ import GridPosition from "../../src/engine/grid/position/GridPosition.js";
13
13
  import { Transform } from "../../src/engine/ecs/transform/Transform.js";
14
14
  import { GridData } from "../../src/generation/grid/GridData.js";
15
15
  import { computeStringHash } from "../../src/core/primitives/strings/computeStringHash.js";
@@ -1,5 +1,5 @@
1
1
  import { CellMatcherLayerBitMaskTest } from "../../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
2
- import { GridTags } from "../../../src/generation/GridTags.js";
2
+ import { GridTags } from "../grid/GridTags.js";
3
3
  import { MirGridLayers } from "../grid/MirGridLayers.js";
4
4
 
5
5
  export const matcher_play_area = CellMatcherLayerBitMaskTest.from(GridTags.PlayArea, MirGridLayers.Tags);
@@ -1,5 +1,5 @@
1
1
  import { CellMatcherLayerBitMaskTest } from "../../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
2
- import { GridTags } from "../../../src/generation/GridTags.js";
2
+ import { GridTags } from "../grid/GridTags.js";
3
3
  import { MirGridLayers } from "../grid/MirGridLayers.js";
4
4
 
5
5
  export const matcher_tag_occupied = CellMatcherLayerBitMaskTest.from(GridTags.Occupied, MirGridLayers.Tags);
@@ -1,5 +1,5 @@
1
1
  import { CellMatcherLayerBitMaskTest } from "../../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
2
- import { GridTags } from "../../../src/generation/GridTags.js";
2
+ import { GridTags } from "../grid/GridTags.js";
3
3
  import { MirGridLayers } from "../grid/MirGridLayers.js";
4
4
 
5
5
  export const matcher_tag_traversable = CellMatcherLayerBitMaskTest.from(GridTags.Traversable, MirGridLayers.Tags);
@@ -6,13 +6,13 @@ import { MarkerNodeMatcherByType } from "../../../src/generation/markers/matcher
6
6
  import {
7
7
  MarkerNodeActionEntityPlacement
8
8
  } from "../../../src/generation/markers/actions/MarkerNodeActionEntityPlacement.js";
9
- import { EntityBlueprint } from "../../../src/engine/ecs/EntityBlueprintjs";
10
- import Mesh from "../../../src/engine/graphics/ecs/mesh/Meshjs";
11
- import { Transform } from "../../../src/engine/ecs/transform/Transformjs";
12
- import GridPosition from "../../../src/engine/grid/components/GridPosition.js";
9
+ import { EntityBlueprint } from "../../../src/engine/ecs/EntityBlueprint.js";
10
+ import Mesh from "../../../src/engine/graphics/ecs/mesh/Mesh.js";
11
+ import { Transform } from "../../../src/engine/ecs/transform/Transform.js";
12
+ import GridPosition from "../../../src/engine/grid/position/GridPosition.js";
13
13
  import { matcher_tag_not_traversable } from "../rules/matcher_tag_not_traversable.js";
14
14
  import { CellMatcherLayerBitMaskTest } from "../../../src/generation/rules/CellMatcherLayerBitMaskTest.js";
15
- import { GridTags } from "../../../src/generation/GridTags.js";
15
+ import { GridTags } from "../grid/GridTags.js";
16
16
  import { CellFilterCellMatcher } from "../../../src/generation/filtering/CellFilterCellMatcher.js";
17
17
  import { CellFilterSimplexNoise } from "../../../src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js";
18
18
  import { CellFilterFXAA } from "../../../src/generation/filtering/numeric/complex/CellFilterFXAA.js";
@@ -88,7 +88,7 @@ function genRowReader(types, endianType = EndianType.BigEndian) {
88
88
  *
89
89
  * @param {BinaryDataType[]} types
90
90
  * @param {EndianType} [endianType]
91
- * @returns {(data_view:DataView, byte_offset:number, record:number[])=>void}
91
+ * @returns {function(data_view:DataView, byte_offset:number, record:number[]):void}
92
92
  */
93
93
  function genRowWriter(types, endianType = EndianType.BigEndian) {
94
94
  let offset = 0;
@@ -122,7 +122,7 @@ function genRowWriter(types, endianType = EndianType.BigEndian) {
122
122
  * @param {BinaryDataType} type
123
123
  * @param {number} offset
124
124
  * @param {EndianType} [endianType]
125
- * @returns {Function}
125
+ * @returns {function(data_view:DataView, byte_offset:number, value:number):void}
126
126
  */
127
127
  function genCellWriter(type, offset, endianType = EndianType.BigEndian) {
128
128
  const writeMethod = DataType2DataViewWriters[type];
@@ -140,7 +140,7 @@ function genCellWriter(type, offset, endianType = EndianType.BigEndian) {
140
140
  * @param {BinaryDataType} type
141
141
  * @param {number} offset
142
142
  * @param {EndianType} [endianType]
143
- * @returns {Function}
143
+ * @returns {function(data_view:DataView, byte_offset:number):number}
144
144
  */
145
145
  function genCellReader(type, offset, endianType = EndianType.BigEndian) {
146
146
  const readMethod = DataType2DataViewReaders[type];
@@ -153,6 +153,10 @@ function genCellReader(type, offset, endianType = EndianType.BigEndian) {
153
153
  });
154
154
  }
155
155
 
156
+ /**
157
+ * This is a schema class for binary data tables of class {@link RowFirstTable}
158
+ * @class
159
+ */
156
160
  export class RowFirstTableSpec {
157
161
  /**
158
162
  *
@@ -179,7 +183,7 @@ export class RowFirstTableSpec {
179
183
 
180
184
  /**
181
185
  * @readonly
182
- * @type {number[]}
186
+ * @type {Uint32Array}
183
187
  */
184
188
  this.columnOffsets = new Uint32Array(numTypes);
185
189
 
@@ -0,0 +1,10 @@
1
+ import { MATRIX_4_IDENTITY } from "./MATRIX_4_IDENTITY.js";
2
+
3
+ test("sanity", () => {
4
+ expect(Array.from(MATRIX_4_IDENTITY)).toEqual([
5
+ 1, 0, 0, 0,
6
+ 0, 1, 0, 0,
7
+ 0, 0, 1, 0,
8
+ 0, 0, 0, 1
9
+ ]);
10
+ });
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+
1
5
  import Engine from "./Engine.js";
2
6
  import { InMemoryEnginePlatform } from "./platform/InMemoryEnginePlatform.js";
3
7
 
@@ -185,7 +185,7 @@ export class EntityComponentDataset {
185
185
 
186
186
  /**
187
187
  *
188
- * @type {Array<SignalHandler>[]}
188
+ * @type {SignalHandler[][]}
189
189
  * @private
190
190
  */
191
191
  this.__entityAnyEventListeners = [];
@@ -1,6 +1,6 @@
1
1
  import { EntityObserver } from "./EntityObserver.js";
2
2
  import { Transform } from "./transform/Transform.js";
3
- import GridPosition from "../grid/components/GridPosition.js";
3
+ import GridPosition from "../grid/position/GridPosition.js";
4
4
  import EntityBuilder from "./EntityBuilder.js";
5
5
  import { EntityComponentDataset } from "./EntityComponentDataset.js";
6
6
  import { noop } from "../../core/function/Functions.js";
@@ -4,7 +4,7 @@ import { Blackboard } from "../../../../intelligence/blackboard/Blackboard.js";
4
4
  import { compileReactiveExpression } from "../../../../../core/lang/reactive/compileReactiveExpression.js";
5
5
  import { assert } from "../../../../../core/assert.js";
6
6
 
7
- export class WhiteToBlackboardActionDescription extends AbstractActionDescription {
7
+ export class WriteToBlackboardActionDescription extends AbstractActionDescription {
8
8
  constructor() {
9
9
  super();
10
10
 
@@ -55,4 +55,4 @@ export class WhiteToBlackboardActionDescription extends AbstractActionDescriptio
55
55
  }
56
56
 
57
57
 
58
- WhiteToBlackboardActionDescription.prototype.type = "Write";
58
+ WriteToBlackboardActionDescription.prototype.type = "Write";
@@ -5,7 +5,7 @@ import { ActionSequenceDescription } from "./ActionSequenceDescription.js";
5
5
  import { DelayActionDescription } from "./DelayActionDescription.js";
6
6
  import { NoopActionDescription } from "./NoopActionDescription.js";
7
7
  import { WeightedRandomActionDescription } from "./WeightedRandomActionDescription.js";
8
- import { WhiteToBlackboardActionDescription } from "./WhiteToBlackboardActionDescription.js";
8
+ import { WriteToBlackboardActionDescription } from "./WriteToBlackboardActionDescription.js";
9
9
 
10
10
  const type_map = {
11
11
  Sequence({ elements }) {
@@ -59,7 +59,7 @@ registerType(SpeakLineActionDescription);
59
59
  registerType(SendRequestActionDescription);
60
60
  registerType(DelayActionDescription);
61
61
  registerType(NoopActionDescription);
62
- registerType(WhiteToBlackboardActionDescription);
62
+ registerType(WriteToBlackboardActionDescription);
63
63
 
64
64
  /**
65
65
  *
@@ -0,0 +1,21 @@
1
+ import { GUID } from "./GUID.js";
2
+ import { GUIDSerializationAdapter } from "./GUIDSerializationAdapter.js";
3
+ import { BinaryBuffer } from "../../../core/binary/BinaryBuffer.js";
4
+
5
+ test("to/from consistency", () => {
6
+
7
+ const source = GUID.parse("a88bb73a-c89f-11ed-afa1-0242ac120002");
8
+
9
+ const adapter = new GUIDSerializationAdapter();
10
+
11
+ const buffer = new BinaryBuffer();
12
+
13
+ adapter.serialize(buffer, source);
14
+ buffer.position = 0; // rewind
15
+
16
+ const destination = new GUID();
17
+
18
+ adapter.deserialize(buffer, destination);
19
+
20
+ expect(destination.equals(source)).toBe(true);
21
+ });
@@ -98,7 +98,7 @@ export class EntityNode {
98
98
 
99
99
  /**
100
100
  *
101
- * @param {(node:EntityNode)=>*} visitor
101
+ * @param {function(node:EntityNode):*} visitor
102
102
  * @param {*} [thisArg]
103
103
  */
104
104
  traverse(visitor, thisArg) {
@@ -0,0 +1,104 @@
1
+ import { EntityNode } from "./EntityNode.js";
2
+ import { EntityComponentDataset } from "../EntityComponentDataset.js";
3
+
4
+ test("constructor does not throw", () => {
5
+ new EntityNode()
6
+ });
7
+
8
+ test("setFlag", () => {
9
+ const ut = new EntityNode();
10
+
11
+ ut.setFlag(0b101);
12
+
13
+ expect(ut.flags).toBe(5);
14
+
15
+ ut.setFlag(0b010);
16
+
17
+ expect(ut.flags).toBe(7);
18
+
19
+ ut.setFlag(0b1);
20
+
21
+ expect(ut.flags).toBe(7);
22
+ });
23
+
24
+ test("clearFlag", () => {
25
+ const ut = new EntityNode();
26
+ ut.flags = 0b101;
27
+
28
+ ut.clearFlag(0b1);
29
+
30
+ expect(ut.flags).toBe(4);
31
+
32
+ ut.clearFlag(0b10);
33
+
34
+ expect(ut.flags).toBe(4);
35
+
36
+ ut.clearFlag(0b100);
37
+
38
+ expect(ut.flags).toBe(0);
39
+ });
40
+
41
+ test("getFlag", () => {
42
+
43
+ const ut = new EntityNode();
44
+
45
+ ut.flags = 0b101;
46
+
47
+ expect(ut.getFlag(0b1)).toBe(true);
48
+ expect(ut.getFlag(0b10)).toBe(false);
49
+ expect(ut.getFlag(0b100)).toBe(true);
50
+ expect(ut.getFlag(0b1000)).toBe(false);
51
+ expect(ut.getFlag(0b101)).toBe(true);
52
+ expect(ut.getFlag(0b011)).toBe(false);
53
+ });
54
+
55
+ test("writeFlag", () => {
56
+ const ut = new EntityNode();
57
+
58
+ ut.writeFlag(0b101, true);
59
+ expect(ut.flags).toBe(5);
60
+
61
+ ut.writeFlag(0b100, false);
62
+
63
+ expect(ut.flags).toBe(1);
64
+ });
65
+
66
+ test("traverse without children", () => {
67
+ const node = new EntityNode();
68
+
69
+ const visited = [];
70
+
71
+ node.traverse(Array.prototype.push, visited);
72
+
73
+ expect(visited.length).toBe(1);
74
+ expect(visited).toContain(node);
75
+ });
76
+
77
+ test("build empty", () => {
78
+ const node = new EntityNode();
79
+
80
+ const dataset = new EntityComponentDataset();
81
+
82
+ node.build(dataset);
83
+
84
+ expect(node.isBuilt).toBe(true);
85
+ expect(node.entity.isBuilt).toBe(true);
86
+ expect(dataset.entityExists(node.entity.entity)).toBe(true);
87
+ });
88
+
89
+ test("destroy empty", () => {
90
+ const node = new EntityNode();
91
+
92
+ const dataset = new EntityComponentDataset();
93
+
94
+ node.build(dataset);
95
+
96
+ const entity = node.entity.entity;
97
+
98
+ node.destroy();
99
+
100
+ expect(node.isBuilt).toBe(false);
101
+ expect(node.entity.isBuilt).toBe(false);
102
+ expect(dataset.entityExists(entity)).toBe(false);
103
+
104
+ });
@@ -55,4 +55,8 @@ export class Voice {
55
55
  */
56
56
  Voice.serializable = false;
57
57
 
58
+ /**
59
+ * @readonly
60
+ * @type {string}
61
+ */
58
62
  Voice.typeName = 'Voice';
@@ -2,7 +2,6 @@
2
2
  * Created by Alex on 13/04/2016.
3
3
  */
4
4
  import ObservedInteger from "../../../core/model/ObservedInteger.js";
5
- import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSerializationAdapter.js";
6
5
 
7
6
  class Team extends ObservedInteger {
8
7
  /**
@@ -37,46 +36,3 @@ Team.typeName = "Team";
37
36
 
38
37
  export default Team;
39
38
 
40
- export class TeamSerializationAdapter extends BinaryClassSerializationAdapter{
41
- constructor(){
42
- super();
43
-
44
- this.klass = Team;
45
- this.version = 0;
46
- }
47
-
48
- /**
49
- *
50
- * @param {BinaryBuffer} buffer
51
- * @param {Team} value
52
- */
53
- serialize(buffer, value) {
54
- const v = value.getValue();
55
-
56
- if (v === Infinity) {
57
- buffer.writeInt32(2147483647);
58
- } else if (v === -Infinity) {
59
- buffer.writeInt32(-2147483648);
60
- } else {
61
- //TODO it's possible to write encoded Infinity values by accident
62
- buffer.writeInt32(v);
63
- }
64
- }
65
-
66
- /**
67
- *
68
- * @param {BinaryBuffer} buffer
69
- * @param {Team} value
70
- */
71
- deserialize(buffer, value) {
72
- const v = buffer.readInt32();
73
-
74
- if (v === 2147483647) {
75
- value.set(Infinity);
76
- } else if (v === -2147483648) {
77
- value.set(-Infinity);
78
- } else {
79
- value.set(v);
80
- }
81
- }
82
- }
@@ -0,0 +1,46 @@
1
+ import { BinaryClassSerializationAdapter } from "../storage/binary/BinaryClassSerializationAdapter.js";
2
+ import Team from "./Team.js";
3
+
4
+ export class TeamSerializationAdapter extends BinaryClassSerializationAdapter {
5
+ constructor() {
6
+ super();
7
+
8
+ this.klass = Team;
9
+ this.version = 0;
10
+ }
11
+
12
+ /**
13
+ *
14
+ * @param {BinaryBuffer} buffer
15
+ * @param {Team} value
16
+ */
17
+ serialize(buffer, value) {
18
+ const v = value.getValue();
19
+
20
+ if (v === Infinity) {
21
+ buffer.writeInt32(2147483647);
22
+ } else if (v === -Infinity) {
23
+ buffer.writeInt32(-2147483648);
24
+ } else {
25
+ //TODO it's possible to write encoded Infinity values by accident
26
+ buffer.writeInt32(v);
27
+ }
28
+ }
29
+
30
+ /**
31
+ *
32
+ * @param {BinaryBuffer} buffer
33
+ * @param {Team} value
34
+ */
35
+ deserialize(buffer, value) {
36
+ const v = buffer.readInt32();
37
+
38
+ if (v === 2147483647) {
39
+ value.set(Infinity);
40
+ } else if (v === -2147483648) {
41
+ value.set(-Infinity);
42
+ } else {
43
+ value.set(v);
44
+ }
45
+ }
46
+ }
@@ -303,7 +303,7 @@ export class Transform {
303
303
  }
304
304
 
305
305
  /**
306
- *
306
+ * Write out the current transform to a supplied container
307
307
  * @param {number[]|Float32Array} result
308
308
  */
309
309
  toMatrix4(result) {
@@ -149,3 +149,27 @@ test("writeFlag", () => {
149
149
 
150
150
  expect(ut.flags).toBe(1);
151
151
  });
152
+
153
+ test("toMatrix from identity transform", () => {
154
+ const t = new Transform();
155
+
156
+ t.makeIdentity();
157
+
158
+ const matrix = [];
159
+
160
+ t.toMatrix4(matrix);
161
+
162
+ expect(matrix).toEqual(Array.from(MATRIX_4_IDENTITY));
163
+ });
164
+
165
+ test("hash", () => {
166
+
167
+ const t = new Transform();
168
+
169
+ const hash = t.hash();
170
+
171
+ expect(typeof hash).toBe("number");
172
+ expect(Number.isInteger(hash)).toBe(true);
173
+ expect(t.hash()).toEqual(hash);
174
+
175
+ });
@@ -23,10 +23,10 @@ import WaterSystem from "../ecs/water/WaterSystem.js";
23
23
  import Trail2DSystem from "../ecs/trail2d/Trail2DSystem.js";
24
24
  import { Foliage2System } from "../../ecs/foliage/ecs/Foliage2System.js";
25
25
  import ViewportPositionSystem from "../../ecs/gui/position/ViewportPositionSystem.js";
26
- import { GridPosition2TransformSystem } from "../../grid/systems/GridPosition2TransformSystem.js";
26
+ import { GridPosition2TransformSystem } from "../../grid/grid2transform/GridPosition2TransformSystem.js";
27
27
  import { Transform2GridPositionSystem } from "../../grid/transform2grid/Transform2GridPositionSystem.js";
28
28
  import SynchronizePositionSystem from "../../ecs/systems/SynchronizePositionSystem.js";
29
- import GridPositionSystem from "../../grid/systems/GridPositionSystem.js";
29
+ import GridPositionSystem from "../../grid/position/GridPositionSystem.js";
30
30
  import InputControllerSystem from "../../input/ecs/systems/InputControllerSystem.js";
31
31
  import { InputSystem } from "../../input/ecs/systems/InputSystem.js";
32
32
  import MeshHighlightSystem from "../ecs/highlight/system/MeshHighlightSystem.js";
@@ -24,10 +24,10 @@ import WaterSystem from "../../water/WaterSystem.js";
24
24
  import Trail2DSystem from "../../trail2d/Trail2DSystem.js";
25
25
  import { Foliage2System } from "../../../../ecs/foliage/ecs/Foliage2System.js";
26
26
  import ViewportPositionSystem from "../../../../ecs/gui/position/ViewportPositionSystem.js";
27
- import { GridPosition2TransformSystem } from "../../../../grid/systems/GridPosition2TransformSystem.js";
27
+ import { GridPosition2TransformSystem } from "../../../../grid/grid2transform/GridPosition2TransformSystem.js";
28
28
  import { Transform2GridPositionSystem } from "../../../../grid/transform2grid/Transform2GridPositionSystem.js";
29
29
  import SynchronizePositionSystem from "../../../../ecs/systems/SynchronizePositionSystem.js";
30
- import GridPositionSystem from "../../../../grid/systems/GridPositionSystem.js";
30
+ import GridPositionSystem from "../../../../grid/position/GridPositionSystem.js";
31
31
  import InputControllerSystem from "../../../../input/ecs/systems/InputControllerSystem.js";
32
32
  import { InputSystem } from "../../../../input/ecs/systems/InputSystem.js";
33
33
  import MeshHighlightSystem from "../../highlight/system/MeshHighlightSystem.js";
@@ -11,10 +11,10 @@ import { MeshSystem } from "../../mesh/MeshSystem.js";
11
11
  import TerrainSystem from "../../../../ecs/terrain/ecs/TerrainSystem.js";
12
12
  import WaterSystem from "../../water/WaterSystem.js";
13
13
  import ViewportPositionSystem from "../../../../ecs/gui/position/ViewportPositionSystem.js";
14
- import { GridPosition2TransformSystem } from "../../../../grid/systems/GridPosition2TransformSystem.js";
14
+ import { GridPosition2TransformSystem } from "../../../../grid/grid2transform/GridPosition2TransformSystem.js";
15
15
  import { Transform2GridPositionSystem } from "../../../../grid/transform2grid/Transform2GridPositionSystem.js";
16
16
  import SynchronizePositionSystem from "../../../../ecs/systems/SynchronizePositionSystem.js";
17
- import GridPositionSystem from "../../../../grid/systems/GridPositionSystem.js";
17
+ import GridPositionSystem from "../../../../grid/position/GridPositionSystem.js";
18
18
  import InputControllerSystem from "../../../../input/ecs/systems/InputControllerSystem.js";
19
19
  import { InputSystem } from "../../../../input/ecs/systems/InputSystem.js";
20
20
  import MeshHighlightSystem from "../../highlight/system/MeshHighlightSystem.js";