@woosh/meep-engine 2.50.3 → 2.52.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 (207) hide show
  1. package/editor/actions/concrete/WriteGridValueAction.js +13 -18
  2. package/editor/ecs/component/editors/Sampler2DEditor.js +2 -2
  3. package/editor/process/SymbolicDisplayProcess.js +1 -1
  4. package/editor/process/symbolic/buildThreeJSHelperEntity.js +1 -1
  5. package/editor/process/symbolic/makeCameraSymbolicDisplay.js +1 -1
  6. package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +1 -1
  7. package/editor/process/symbolic/makeLightSymbolicDisplay.js +1 -1
  8. package/editor/process/symbolic/makePathSymbolicDisplay.js +1 -1
  9. package/editor/process/symbolic/makePositionedIconDisplaySymbol.js +1 -1
  10. package/editor/view/ecs/components/GridObstacleController.js +2 -2
  11. package/editor/view/ecs/components/TerrainController.js +2 -2
  12. package/package.json +1 -1
  13. package/samples/terrain/editor.js +2 -2
  14. package/src/core/NumberFormat.js +0 -71
  15. package/src/core/UUID.spec.js +8 -0
  16. package/src/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.d.ts +4 -0
  17. package/src/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.js +58 -55
  18. package/src/core/bvh2/bvh3/ExplicitBinaryBoundingVolumeHierarchy.spec.js +54 -0
  19. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.js +3 -3
  20. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.spec.js +60 -0
  21. package/src/core/bvh2/bvh3/query/BVHQueryAny.js +16 -0
  22. package/src/core/bvh2/bvh3/query/bvh_collect_user_data.js +5 -5
  23. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.js +2 -3
  24. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.spec.js +22 -0
  25. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.js +2 -2
  26. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.spec.js +64 -0
  27. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.js +2 -3
  28. package/src/core/bvh2/visual/convert_bvh_to_dot_format_string.js +2 -2
  29. package/src/core/cache/Cache.js +3 -5
  30. package/src/core/cache/CacheElement.js +1 -0
  31. package/src/core/geom/2d/quad-tree/PointQuadTree.js +10 -0
  32. package/src/core/geom/3d/aabb/aabb3_array_combine.js +3 -3
  33. package/src/core/geom/3d/aabb/aabb3_from_threejs_geometry.js +41 -0
  34. package/src/core/geom/3d/topology/struct/TopoMesh.js +3 -2
  35. package/src/core/geom/3d/topology/struct/prototypeBinaryTopology.js +4 -4
  36. package/src/core/geom/Vector2.d.ts +9 -0
  37. package/src/core/geom/Vector2.js +8 -22
  38. package/src/core/geom/Vector2.spec.js +153 -0
  39. package/src/core/graph/{convertGraphToDotString.js → convert_graph_to_dot_string.js} +1 -1
  40. package/src/core/graph/convert_graph_to_dot_string.spec.js +28 -0
  41. package/src/core/math/noise/sdnoise.js +5 -7
  42. package/src/core/math/noise/sdnoise.spec.js +87 -0
  43. package/src/core/model/ModuleRegistry.js +2 -4
  44. package/src/core/model/ModuleRegistry.spec.js +31 -0
  45. package/src/core/model/reactive/js/compileReactiveToJS.spec.js +14 -0
  46. package/src/core/model/reactive/model/logic/ReactiveAnd.spec.js +31 -1
  47. package/src/core/model/reactive/model/logic/ReactiveOr.spec.js +53 -0
  48. package/src/core/model/stat/LinearModifier.js +2 -2
  49. package/src/core/model/stat/LinearModifier.spec.js +62 -0
  50. package/src/core/model/stat/Stat.js +12 -0
  51. package/src/core/model/stat/Stat.spec.js +36 -0
  52. package/src/core/primitives/array/computeStridedIntegerArrayHash.spec.js +28 -0
  53. package/src/core/primitives/numbers/number_format_by_thousands.js +14 -0
  54. package/src/core/primitives/numbers/number_pretty_print.js +49 -0
  55. package/src/core/primitives/strings/computeStringHash.spec.js +12 -5
  56. package/src/core/process/BaseProcess.js +8 -8
  57. package/src/engine/Clock.js +30 -29
  58. package/src/engine/Clock.spec.js +26 -0
  59. package/src/engine/{Platform.js → browserInfo.js} +1 -5
  60. package/src/engine/ecs/EntityBuilder.js +3 -1
  61. package/src/engine/ecs/EntityBuilder.spec.js +21 -0
  62. package/src/engine/ecs/fow/FogOfWar.js +48 -54
  63. package/src/engine/ecs/gui/GUIElement.js +1 -1
  64. package/src/engine/ecs/gui/position/ViewportPosition.js +3 -3
  65. package/src/engine/ecs/{systems → renderable}/RenderSystem.d.ts +1 -1
  66. package/src/engine/ecs/{systems → renderable}/RenderSystem.js +10 -38
  67. package/src/engine/ecs/renderable/Renderable.d.ts +25 -0
  68. package/src/engine/ecs/{components → renderable}/Renderable.js +18 -83
  69. package/src/engine/ecs/renderable/Renderable.spec.js +10 -0
  70. package/src/engine/ecs/speaker/VoiceSystem.js +15 -9
  71. package/src/engine/ecs/terrain/ecs/TerrainClassifier.js +1 -1
  72. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -3
  73. package/src/engine/ecs/terrain/ecs/splat/SplatMapOptimizerDebugger.js +3 -3
  74. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +2 -2
  75. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +2 -2
  76. package/src/engine/ecs/terrain/util/paintTerrainOverlayViaLookupTable.js +2 -2
  77. package/src/engine/ecs/transform/Transform.js +1 -0
  78. package/src/engine/graphics/camera/testClippingPlaneComputation.js +0 -4
  79. package/src/engine/graphics/copy_transform_to_threejs_object.js +12 -0
  80. package/src/engine/graphics/debug/VisualSymbolLine.js +1 -1
  81. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.spec.js +5 -0
  82. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +24 -25
  83. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.spec.js +5 -0
  84. package/src/engine/graphics/ecs/decal/DecalSystem.js +3 -21
  85. package/src/engine/graphics/ecs/decal/v2/Decal.js +32 -32
  86. package/src/engine/graphics/ecs/decal/v2/Decal.spec.js +5 -0
  87. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +4 -2
  88. package/src/engine/graphics/ecs/highlight/renderer/makeGaussianBlurShader.js +1 -4
  89. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.d.ts +1 -1
  90. package/src/engine/graphics/ecs/highlight/system/RenderableHighlightSystem.js +2 -2
  91. package/src/engine/graphics/ecs/mesh/applyTransformToThreeObject.js +2 -5
  92. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +4 -33
  93. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +8 -4
  94. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.spec.js +5 -0
  95. package/src/engine/graphics/ecs/mesh-v2/sample/prototypeShadedGeometry.js +0 -12
  96. package/src/engine/graphics/ecs/path/ribbon/RibbonPathBuilder.js +2 -2
  97. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  98. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +0 -4
  99. package/src/engine/graphics/ecs/water2/shader/testWaterShader.js +0 -2
  100. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +1 -1
  101. package/src/engine/graphics/geometry/optimization/merge/prototypeGeometryMerge.js +1 -1
  102. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -3
  103. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -4
  104. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +1 -5
  105. package/src/engine/graphics/render/forward_plus/prototype/prototypeLightManager.js +2 -2
  106. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -6
  107. package/src/engine/graphics/sh3/path_tracer/GeometryBVHBatched.js +2 -1
  108. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +6 -1
  109. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +4 -4
  110. package/src/engine/graphics/shaders/SoftOutlineShader.js +2 -4
  111. package/src/engine/graphics/shadows/testShadowMapRendering.js +0 -2
  112. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +24 -0
  113. package/src/engine/graphics/texture/atlas/TextureAtlas.spec.js +46 -0
  114. package/src/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
  115. package/src/engine/graphics/texture/sampler/Sampler2D.js +1 -1
  116. package/src/engine/graphics/texture/sampler/bicubic.spec.js +13 -0
  117. package/src/engine/graphics/texture/sampler/differenceSampler.js +1 -1
  118. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_NaiveFlood.js +5 -1
  119. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_NaiveFlood.spec.js +183 -0
  120. package/src/engine/graphics/texture/sampler/filter/filter_lanczos3.js +20 -0
  121. package/src/engine/graphics/texture/sampler/filter/mitchell.js +0 -21
  122. package/src/engine/graphics/texture/sampler/filter/mitchell_v1.js +21 -0
  123. package/src/engine/graphics/texture/sampler/filter/sampler2d_scale_down_generic.js +17 -16
  124. package/src/engine/graphics/texture/sampler/prototypeSamplerFiltering.js +11 -9
  125. package/src/engine/graphics/texture/sampler/{scaleSampler2D.js → resize/sampler2d_scale.js} +8 -8
  126. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale.spec.js +73 -0
  127. package/src/engine/graphics/texture/sampler/{sampler2_d_scale_down_lanczos.js → resize/sampler2d_scale_down_lanczos.js} +3 -24
  128. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.spec.js +29 -0
  129. package/src/engine/graphics/texture/sampler/{sampler2d_scale_down_linear.js → resize/sampler2d_scale_down_linear.js} +5 -5
  130. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_linear.spec.js +44 -0
  131. package/src/engine/graphics/texture/sampler/resize/{sampler2d_downsample_mipmap.js → sampler2d_scale_down_mipmap.js} +2 -2
  132. package/src/engine/graphics/texture/sampler/resize/{sampler2d_downsample_mipmap.spec.js → sampler2d_scale_down_mipmap.spec.js} +2 -2
  133. package/src/engine/graphics/texture/sampler/{genericResampleSampler2D.js → resize/sampler2d_scale_generic.js} +16 -12
  134. package/src/engine/graphics/texture/sampler/{upsampleSampler2D.js → resize/sampler2d_scale_up_linear.js} +5 -2
  135. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_up_linear.spec.js +14 -0
  136. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.js +4 -2
  137. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.spec.js +15 -0
  138. package/src/engine/graphics/texture/sampler/util/drawSamplerHTML.js +2 -2
  139. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.js +46 -0
  140. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.spec.js +108 -0
  141. package/src/engine/graphics/trail/TemporalPath.js +83 -78
  142. package/src/engine/graphics/trail/TemporalPath.spec.js +5 -0
  143. package/src/engine/graphics/trail/x/RibbonX.spec.js +5 -0
  144. package/src/engine/grid/components/GridObstacle.js +45 -25
  145. package/src/engine/grid/components/GridObstacle.spec.js +130 -1
  146. package/src/engine/grid/components/GridPosition.js +5 -17
  147. package/src/engine/grid/components/GridPosition2Transform.js +1 -70
  148. package/src/engine/grid/components/GridPosition2TransformSerializationAdapter.js +70 -0
  149. package/src/engine/input/devices/InputDeviceSwitch.spec.js +5 -0
  150. package/src/engine/input/ecs/{InputBinding.js → components/InputBinding.js} +1 -1
  151. package/src/engine/input/ecs/components/InputController.js +2 -2
  152. package/src/engine/input/ecs/ism/InputBinding.js +2 -2
  153. package/src/engine/input/ecs/util/TerrainCameraTargetSampler.js +1 -1
  154. package/src/engine/input/ecs/util/TopDownCameraControllerHelper.js +1 -1
  155. package/src/engine/intelligence/behavior/behavior_to_dot.spec.js +25 -0
  156. package/src/engine/intelligence/behavior/util/DelayBehavior.js +6 -4
  157. package/src/engine/intelligence/blackboard/Blackboard.d.ts +2 -0
  158. package/src/engine/intelligence/blackboard/Blackboard.js +36 -2
  159. package/src/engine/intelligence/blackboard/Blackboard.spec.js +49 -0
  160. package/src/engine/intelligence/blackboard/BlackboardSerializationAdapter.spec.js +2 -0
  161. package/src/engine/navigation/grid/{AStar.js → find_path_on_grid_astar.js} +21 -18
  162. package/src/engine/navigation/grid/find_path_on_grid_astar.spec.js +7 -0
  163. package/src/engine/plugin/EnginePlugin.js +12 -14
  164. package/src/engine/plugin/EnginePlugin.spec.js +5 -0
  165. package/src/engine/plugin/EnginePluginManager.js +18 -22
  166. package/src/engine/scene/transitionToScene.js +12 -1
  167. package/src/engine/simulation/Ticker.js +1 -1
  168. package/src/engine/sound/ecs/SoundListenerSystem.js +1 -1
  169. package/src/generation/markers/debug/visualizeMarkers.js +1 -1
  170. package/src/generation/theme/TerrainLayerDescription.js +1 -1
  171. package/src/view/common/LabelView.js +3 -3
  172. package/src/engine/MeepSettings.js +0 -9
  173. package/src/engine/User.js +0 -28
  174. package/src/engine/UserController.js +0 -273
  175. package/src/engine/ecs/components/AABB.js +0 -33
  176. package/src/engine/ecs/components/AABBCollider.js +0 -15
  177. package/src/engine/ecs/components/AimController.js +0 -18
  178. package/src/engine/ecs/components/Attacker.js +0 -13
  179. package/src/engine/ecs/components/MeshCollider.js +0 -15
  180. package/src/engine/ecs/components/RangedAttack.js +0 -12
  181. package/src/engine/ecs/components/Renderable.d.ts +0 -14
  182. package/src/engine/ecs/components/TargetAI.js +0 -11
  183. package/src/engine/ecs/components/ViewportMeshProjection.js +0 -18
  184. package/src/engine/ecs/grid/Sampler2DDecoder.js +0 -57
  185. package/src/engine/ecs/grid/makeTerrainGeometry.js +0 -110
  186. package/src/engine/ecs/systems/AABBColliderSystem.js +0 -61
  187. package/src/engine/ecs/systems/AABBSystem.js +0 -89
  188. package/src/engine/ecs/systems/AimControllerSystem.js +0 -63
  189. package/src/engine/ecs/systems/AttackerSystem.js +0 -67
  190. package/src/engine/ecs/systems/MeshColliderSystem.js +0 -47
  191. package/src/engine/ecs/systems/MonsterAISystem.js +0 -163
  192. package/src/engine/ecs/systems/MortalitySystem.js +0 -46
  193. package/src/engine/ecs/systems/RangedAttackSystem.js +0 -132
  194. package/src/engine/ecs/systems/SerializationMetadataSystem.js +0 -10
  195. package/src/engine/ecs/systems/TargetAISystem.js +0 -107
  196. package/src/engine/ecs/systems/ViewportMeshProjectionSystem.js +0 -68
  197. package/src/engine/graphics/particles/ParticleEmitterLibrary.js +0 -87
  198. package/src/engine/graphics/texture/sampler/sampler2d_make_array_filler_function.js +0 -65
  199. package/src/engine/graphics/texture/sampler/sampler2d_scale_down_linear.spec.js +0 -17
  200. package/src/engine/graphics/trail/x/simulator/RibbonState.js +0 -10
  201. package/src/engine/grid/Grid.js +0 -131
  202. package/src/engine/grid/components/ViewportGridProjection.js +0 -20
  203. package/src/engine/grid/systems/GridObstacleSystem.js +0 -58
  204. package/src/engine/grid/systems/ViewportGridProjectionSystem.js +0 -105
  205. package/src/engine/navigation/grid/GridField.js +0 -328
  206. /package/src/{engine → core/primitives/array}/computeStridedIntegerArrayHash.js +0 -0
  207. /package/src/engine/ecs/{components → renderable}/RenderableFlags.js +0 -0
@@ -1,5 +1,4 @@
1
1
  import Vector2 from "../../../core/geom/Vector2.js";
2
- import { BinaryClassSerializationAdapter } from "../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
3
2
  import { BinaryClassUpgrader } from "../../ecs/storage/binary/BinaryClassUpgrader.js";
4
3
  import { GridPosition2TransformFlags } from "./GridPosition2TransformFlags.js";
5
4
 
@@ -116,7 +115,7 @@ export class GridPosition2Transform {
116
115
  * @returns {number}
117
116
  */
118
117
  hash() {
119
- return this.offset.hashCode();
118
+ return this.offset.hash();
120
119
  }
121
120
 
122
121
  }
@@ -124,74 +123,6 @@ export class GridPosition2Transform {
124
123
  GridPosition2Transform.typeName = "GridPosition2Transform";
125
124
 
126
125
 
127
- export class GridPosition2TransformSerializationAdapter extends BinaryClassSerializationAdapter {
128
- constructor() {
129
- super();
130
-
131
- this.klass = GridPosition2Transform;
132
- this.version = 1;
133
- }
134
-
135
- /**
136
- *
137
- * @param {BinaryBuffer} buffer
138
- * @param {GridPosition2Transform} value
139
- */
140
- serialize(buffer, value) {
141
- const offsetX = value.offset.x;
142
- const offsetY = value.offset.y;
143
-
144
- let header = 3;
145
- if (offsetX === 0 && offsetY === 0) {
146
- header = 0;
147
- } else if (offsetX === 0) {
148
- header = 2;
149
- } else if (offsetY === 0) {
150
- header = 1;
151
- } else {
152
- //both coordinates are present
153
- header = 3;
154
- }
155
-
156
- buffer.writeUint8(header);
157
-
158
- if ((header & 1) !== 0) {
159
- //write X
160
- buffer.writeFloat32(offsetX);
161
- }
162
-
163
- if ((header & 2) !== 0) {
164
- //write Y
165
- buffer.writeFloat32(offsetY);
166
- }
167
- }
168
-
169
- /**
170
- *
171
- * @param {BinaryBuffer} buffer
172
- * @param {GridPosition2Transform} value
173
- */
174
- deserialize(buffer, value) {
175
- //read header
176
- const header = buffer.readUint8();
177
-
178
-
179
- let offsetX = 0, offsetY = 0;
180
-
181
- if ((header & 1) !== 0) {
182
- //write X
183
- offsetX = buffer.readFloat32();
184
- }
185
-
186
- if ((header & 2) !== 0) {
187
- //write Y
188
- offsetY = buffer.readFloat32();
189
- }
190
-
191
- value.offset.set(offsetX, offsetY);
192
- }
193
- }
194
-
195
126
  export class GridPosition2TransformSerializationUpgrader_0_1 extends BinaryClassUpgrader {
196
127
  constructor() {
197
128
  super();
@@ -0,0 +1,70 @@
1
+ import { BinaryClassSerializationAdapter } from "../../ecs/storage/binary/BinaryClassSerializationAdapter.js";
2
+ import { GridPosition2Transform } from "./GridPosition2Transform.js";
3
+
4
+ export class GridPosition2TransformSerializationAdapter extends BinaryClassSerializationAdapter {
5
+ constructor() {
6
+ super();
7
+
8
+ this.klass = GridPosition2Transform;
9
+ this.version = 1;
10
+ }
11
+
12
+ /**
13
+ *
14
+ * @param {BinaryBuffer} buffer
15
+ * @param {GridPosition2Transform} value
16
+ */
17
+ serialize(buffer, value) {
18
+ const offsetX = value.offset.x;
19
+ const offsetY = value.offset.y;
20
+
21
+ let header = 3;
22
+ if (offsetX === 0 && offsetY === 0) {
23
+ header = 0;
24
+ } else if (offsetX === 0) {
25
+ header = 2;
26
+ } else if (offsetY === 0) {
27
+ header = 1;
28
+ } else {
29
+ //both coordinates are present
30
+ header = 3;
31
+ }
32
+
33
+ buffer.writeUint8(header);
34
+
35
+ if ((header & 1) !== 0) {
36
+ //write X
37
+ buffer.writeFloat32(offsetX);
38
+ }
39
+
40
+ if ((header & 2) !== 0) {
41
+ //write Y
42
+ buffer.writeFloat32(offsetY);
43
+ }
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @param {BinaryBuffer} buffer
49
+ * @param {GridPosition2Transform} value
50
+ */
51
+ deserialize(buffer, value) {
52
+ //read header
53
+ const header = buffer.readUint8();
54
+
55
+
56
+ let offsetX = 0, offsetY = 0;
57
+
58
+ if ((header & 1) !== 0) {
59
+ //write X
60
+ offsetX = buffer.readFloat32();
61
+ }
62
+
63
+ if ((header & 2) !== 0) {
64
+ //write Y
65
+ offsetY = buffer.readFloat32();
66
+ }
67
+
68
+ value.offset.set(offsetX, offsetY);
69
+ }
70
+ }
@@ -0,0 +1,5 @@
1
+ import { InputDeviceSwitch } from "./InputDeviceSwitch.js";
2
+
3
+ test("constructor should not throw", () => {
4
+ expect(() => new InputDeviceSwitch()).not.toThrow();
5
+ });
@@ -1,4 +1,4 @@
1
- import { assert } from "../../../core/assert.js";
1
+ import { assert } from "../../../../core/assert.js";
2
2
 
3
3
  export class InputBinding {
4
4
  /**
@@ -5,7 +5,7 @@
5
5
  import List from '../../../../core/collection/list/List.js';
6
6
  import { assert } from "../../../../core/assert.js";
7
7
  import Signal from "../../../../core/events/signal/Signal.js";
8
- import { InputBinding } from "../InputBinding.js";
8
+ import { InputBinding } from "./InputBinding.js";
9
9
 
10
10
 
11
11
  class InputController {
@@ -15,7 +15,7 @@ class InputController {
15
15
  * @constructor
16
16
  */
17
17
  constructor(bindings = []) {
18
- assert.ok(Array.isArray(bindings), 'Expected bindings to be an array, instead got something else');
18
+ assert.isArray(bindings, 'bindings');
19
19
 
20
20
  this.mapping = new List();
21
21
 
@@ -20,8 +20,8 @@ export class InputBinding {
20
20
  * @param {string} event
21
21
  */
22
22
  set(path, event) {
23
- assert.typeOf(path, 'string', path);
24
- assert.typeOf(event, 'string', path);
23
+ assert.isString(path, "path");
24
+ assert.isString(event, "event");
25
25
 
26
26
  this.path = path;
27
27
  this.event = event;
@@ -1,5 +1,5 @@
1
1
  import { Sampler2D } from "../../../graphics/texture/sampler/Sampler2D.js";
2
- import { sampler2d_scale_down_linear } from "../../../graphics/texture/sampler/sampler2d_scale_down_linear.js";
2
+ import { sampler2d_scale_down_linear } from "../../../graphics/texture/sampler/resize/sampler2d_scale_down_linear.js";
3
3
  import { computeWholeDivisorLow } from "../../../../core/math/computeWholeDivisorLow.js";
4
4
 
5
5
  /**
@@ -2,7 +2,7 @@
2
2
  * Created by Alex on 22/08/2015.
3
3
  */
4
4
  import { Transform } from '../../../ecs/transform/Transform.js';
5
- import Renderable from '../../../ecs/components/Renderable.js';
5
+ import Renderable from '../../../ecs/renderable/Renderable.js';
6
6
  import Vector3 from '../../../../core/geom/Vector3.js';
7
7
  import EntityBuilder from '../../../ecs/EntityBuilder.js';
8
8
  import { Group as ThreeGroup, Matrix4 as ThreeMatrix4, Mesh as ThreeMesh, MeshLambertMaterial } from 'three';
@@ -0,0 +1,25 @@
1
+ import { behavior_to_dot } from "./behavior_to_dot.js";
2
+ import { SucceedingBehavior } from "./primitive/SucceedingBehavior.js";
3
+ import { SequenceBehavior } from "./composite/SequenceBehavior.js";
4
+ import { ParallelBehavior } from "./composite/ParallelBehavior.js";
5
+
6
+ test("single behavior should produce a valid string", () => {
7
+ const dot = behavior_to_dot(SucceedingBehavior.INSTANCE);
8
+
9
+ expect(typeof dot).toEqual("string");
10
+ expect(dot.trim().length).toBeGreaterThan(0);
11
+ });
12
+
13
+ test("'sequence' should produce a valid string", () => {
14
+ const dot = behavior_to_dot(SequenceBehavior.from([SucceedingBehavior.INSTANCE]));
15
+
16
+ expect(typeof dot).toEqual("string");
17
+ expect(dot.trim().length).toBeGreaterThan(0);
18
+ });
19
+
20
+ test("'parallel' should produce a valid string", () => {
21
+ const dot = behavior_to_dot(ParallelBehavior.from([SucceedingBehavior.INSTANCE]));
22
+
23
+ expect(typeof dot).toEqual("string");
24
+ expect(dot.trim().length).toBeGreaterThan(0);
25
+ });
@@ -45,9 +45,9 @@ export class DelayBehavior extends Behavior {
45
45
  * @return {DelayBehavior}
46
46
  */
47
47
  static from(value) {
48
- assert.isNumber(value, 'value');
49
- assert.notNaN(value,'value');
50
- assert.isFiniteNumber(value,'value');
48
+ assert.isNumber(value, 'value');
49
+ assert.notNaN(value, 'value');
50
+ assert.isFiniteNumber(value, 'value');
51
51
 
52
52
  const r = new DelayBehavior();
53
53
 
@@ -56,7 +56,9 @@ export class DelayBehavior extends Behavior {
56
56
  return r;
57
57
  }
58
58
 
59
- initialize() {
59
+ initialize(ctx) {
60
+ super.initialize(ctx);
61
+
60
62
  this.elapsed = 0;
61
63
  }
62
64
 
@@ -1,6 +1,8 @@
1
1
  import {AbstractBlackboard} from "./AbstractBlackboard";
2
2
 
3
3
  export class Blackboard extends AbstractBlackboard {
4
+ copy(other: Blackboard): void
5
+
4
6
  toJSON(): { [key: string]: (number | boolean | string) }
5
7
 
6
8
  fromJSON(json: any): void
@@ -164,14 +164,48 @@ export class Blackboard extends AbstractBlackboard {
164
164
 
165
165
  /**
166
166
  *
167
+ * NOTE: where variables of same type with same names exist - they are kept and their values are updated
167
168
  * @param {Blackboard} other
168
169
  */
169
170
  copy(other) {
170
- this.reset();
171
+ // perform coalescence
172
+
173
+ const this_data = this.data;
171
174
 
172
175
  other.traverse((name, value, type) => {
173
- this.acquire(name, type, value.getValue());
176
+
177
+ const variable = this_data[name];
178
+
179
+ const other_value = value.getValue();
180
+
181
+ if (variable === undefined) {
182
+ this.acquire(name, type, other_value);
183
+ } else if (variable.type !== type) {
184
+ // type mismatch
185
+ delete this_data[name]
186
+ this.acquire(name, type, other_value);
187
+ } else {
188
+ // variable exists and types match
189
+ variable.value.set(other_value);
190
+ }
191
+
174
192
  });
193
+
194
+ // find out which keys should be removed
195
+ const garbage = [];
196
+
197
+ for (const dataKey in this_data) {
198
+ const variable = this_data[dataKey];
199
+ if (!other.contains(dataKey, variable.type)) {
200
+ garbage.push(dataKey);
201
+ }
202
+ }
203
+
204
+ for (let i = 0; i < garbage.length; i++) {
205
+ const key = garbage[i];
206
+
207
+ delete this_data[key];
208
+ }
175
209
  }
176
210
 
177
211
  /**
@@ -39,6 +39,41 @@ test("entry is copied across when blackboard is copied", () => {
39
39
  expect(b.acquireNumber('test').getValue()).toBe(7);
40
40
  });
41
41
 
42
+ test('copy when destination has a variable with the same name but a different type', () => {
43
+
44
+ const a = new Blackboard();
45
+
46
+ a.acquireNumber('test', 7);
47
+
48
+
49
+ const b = new Blackboard();
50
+
51
+ b.acquireBoolean("test", true);
52
+
53
+ b.copy(a);
54
+
55
+ expect(b.acquireNumber('test').getValue()).toEqual(7);
56
+ });
57
+
58
+ test("copy preserves existing references and updates their value", () => {
59
+
60
+ const a = new Blackboard();
61
+
62
+ a.acquireNumber('test', 7);
63
+
64
+ const b = new Blackboard();
65
+
66
+ const vector_before = b.acquireNumber("test", 3);
67
+
68
+ b.copy(a);
69
+
70
+ const vector_after = b.acquireNumber("test");
71
+
72
+ expect(vector_after).toBe(vector_before);
73
+ expect(vector_after.getValue()).toBe(7);
74
+
75
+ });
76
+
42
77
  test("to/from JSON serialization consistency", () => {
43
78
 
44
79
  const source = new Blackboard();
@@ -60,3 +95,17 @@ test("to/from JSON serialization consistency", () => {
60
95
  expect(target.contains('label', DataType.String)).toBe(true);
61
96
  expect(target.acquireString('label').getValue()).toBe('hello');
62
97
  });
98
+
99
+ test("increment number", () => {
100
+ const bb = new Blackboard();
101
+
102
+ bb.acquireNumber("x", 3);
103
+
104
+ bb.incrementNumber("x", 5);
105
+
106
+ expect(bb.acquireNumber('x').getValue()).toEqual(8);
107
+
108
+ bb.incrementNumber("x");
109
+
110
+ expect(bb.acquireNumber('x').getValue()).toEqual(9);
111
+ });
@@ -9,6 +9,7 @@ test('to/from binary buffer serialization', () => {
9
9
 
10
10
  bb.acquireBoolean('a.true').set(true);
11
11
  bb.acquireBoolean('a.false').set(false);
12
+ bb.acquireString('x').set("test string");
12
13
 
13
14
  const buffer = new BinaryBuffer();
14
15
 
@@ -25,4 +26,5 @@ test('to/from binary buffer serialization', () => {
25
26
  expect(ba.acquireNumber('a/b/c').getValue()).toBe(42.3);
26
27
  expect(ba.acquireBoolean('a.true').getValue()).toBe(true);
27
28
  expect(ba.acquireBoolean('a.false').getValue()).toBe(false);
29
+ expect(ba.acquireString('x').getValue()).toBe("test string");
28
30
  });
@@ -42,32 +42,35 @@ function computeOrthogonalNeighbors(result, index, width, height) {
42
42
 
43
43
  /**
44
44
  *
45
- * @param {number|Uint8Array|Uint16Array|Float32Array} field
46
- * @param {Number} width
47
- * @param {Number} height
45
+ * @param {number[]|Uint8Array|Uint16Array|Float32Array} field
46
+ * @param {number} width
47
+ * @param {number} height
48
48
  * @param {number} start
49
49
  * @param {number} goal
50
- * @param {Number} crossingPenalty
51
- * @param {Number} bendPenalty
50
+ * @param {number} crossingPenalty
51
+ * @param {number} bendPenalty
52
52
  * @param {number} blockValue
53
- * @returns {Array.<Number>} array of indices representing path from start to end
53
+ * @returns {Array.<number>} array of indices representing path from start to end
54
54
  */
55
- export function gridAStarSearch(field, width, height, start, goal, crossingPenalty, bendPenalty, blockValue) {
56
- assert.notEqual(field, undefined, 'field is undefined');
57
- assert.notEqual(field, null, 'field is null');
55
+ export function find_path_on_grid_astar(
56
+ field,
57
+ width, height,
58
+ start, goal,
59
+ crossingPenalty,
60
+ bendPenalty,
61
+ blockValue
62
+ ) {
58
63
 
59
- assert.notEqual(start, undefined, 'start is undefined');
60
- assert.notEqual(start, null, 'start is null');
64
+ assert.defined(field, 'field');
65
+ assert.notNull(field, 'field');
61
66
 
62
- assert.notEqual(goal, undefined, 'end is undefined');
63
- assert.notEqual(goal, null, 'end is null');
64
67
 
65
- assert.typeOf(start, 'number', "start");
66
- assert.typeOf(goal, 'number', "goal");
68
+ assert.isNonNegativeInteger(start, "start");
69
+ assert.isNonNegativeInteger(goal, "goal");
67
70
 
68
- assert.typeOf(crossingPenalty, 'number', 'crossingPenalty');
69
- assert.typeOf(bendPenalty, 'number', 'bendPenalty');
70
- assert.typeOf(blockValue, 'number', 'blockValue');
71
+ assert.isNumber(crossingPenalty, 'crossingPenalty');
72
+ assert.isNumber(bendPenalty, 'bendPenalty');
73
+ assert.isNumber(blockValue, 'blockValue');
71
74
 
72
75
 
73
76
  let limitCycles = 5000000;
@@ -0,0 +1,7 @@
1
+ import { find_path_on_grid_astar } from "./find_path_on_grid_astar.js";
2
+
3
+ test("sanity check on 1x1 grid", () => {
4
+ const path = find_path_on_grid_astar([0], 1, 1, 0, 0, 0, 0, 1);
5
+
6
+ expect(path).toEqual([0]);
7
+ });
@@ -2,22 +2,20 @@ import { BaseProcess } from "../../core/process/BaseProcess.js";
2
2
  import { assert } from "../../core/assert.js";
3
3
 
4
4
  export class EnginePlugin extends BaseProcess {
5
- constructor() {
6
- super();
7
5
 
8
- /**
9
- *
10
- * @type {Class<EnginePlugin>[]}
11
- * @private
12
- */
13
- this.__dependencies = [];
6
+ /**
7
+ *
8
+ * @type {Class<EnginePlugin>[]}
9
+ * @private
10
+ */
11
+ __dependencies = [];
12
+
13
+ /**
14
+ *
15
+ * @type {Engine|null}
16
+ */
17
+ engine = null;
14
18
 
15
- /**
16
- *
17
- * @type {Engine|null}
18
- */
19
- this.engine = null;
20
- }
21
19
 
22
20
  attach() {
23
21
  /**
@@ -0,0 +1,5 @@
1
+ import { EnginePlugin } from "./EnginePlugin.js";
2
+
3
+ test("constructor does not throw", () => {
4
+ new EnginePlugin();
5
+ });
@@ -6,29 +6,25 @@ import { isSubclassOf } from "./isSubclassOf.js";
6
6
  import { assert } from "../../core/assert.js";
7
7
 
8
8
  export class EnginePluginManager extends BaseProcess {
9
- constructor() {
10
- super();
11
-
12
- /**
13
- * @private
14
- * @type {Map<Class, PluginReferenceContext>}
15
- */
16
- this.__plugins = new Map();
17
-
18
- /**
19
- *
20
- * @type {Engine}
21
- */
22
- this.engine = null;
23
-
24
- /**
25
- *
26
- * @type {number}
27
- * @private
28
- */
29
- this.__version = 0;
30
- }
31
9
 
10
+ /**
11
+ * @private
12
+ * @type {Map<Class, PluginReferenceContext>}
13
+ */
14
+ __plugins = new Map();
15
+
16
+ /**
17
+ *
18
+ * @type {Engine}
19
+ */
20
+ engine = null;
21
+
22
+ /**
23
+ *
24
+ * @type {number}
25
+ * @private
26
+ */
27
+ __version = 0;
32
28
 
33
29
  /**
34
30
  *
@@ -9,6 +9,7 @@ import { TaskLoadingScreen } from "../../view/task/TaskLoadingScreen.js";
9
9
  import { actionTask } from "../../core/process/task/util/actionTask.js";
10
10
  import { delayTask } from "../../core/process/task/util/delayTask.js";
11
11
  import { wrapTaskIgnoreFailure } from "../../core/process/task/util/wrapTaskIgnoreFailure.js";
12
+ import { assert } from "../../core/assert.js";
12
13
 
13
14
 
14
15
  /**
@@ -19,7 +20,17 @@ import { wrapTaskIgnoreFailure } from "../../core/process/task/util/wrapTaskIgno
19
20
  * @param {string} [name]
20
21
  * @return {Promise}
21
22
  */
22
- export function transitionToScene({ tasks = [], scene, engine, name }) {
23
+ export function transitionToScene({
24
+ tasks = [],
25
+ scene,
26
+ engine,
27
+ name
28
+ }) {
29
+
30
+ assert.defined(engine, 'engine');
31
+ assert.defined(scene, 'scene');
32
+ assert.isArray(tasks, 'tasks');
33
+
23
34
  if (name === undefined) {
24
35
  if (tasks.length > 0) {
25
36
  //assume name of the first task
@@ -51,7 +51,7 @@ class Ticker {
51
51
  * @param {*} [thisArg]
52
52
  */
53
53
  unsubscribe(callback, thisArg) {
54
- assert.typeOf(callback, 'function', 'callback');
54
+ assert.isFunction(callback, 'callback');
55
55
 
56
56
  const callbacks = this.callbacks;
57
57
  const n = callbacks.length;
@@ -6,7 +6,7 @@
6
6
  import { System } from '../../ecs/System.js';
7
7
  import SoundListener from './SoundListener.js';
8
8
  import { Transform } from '../../ecs/transform/Transform.js';
9
- import { browserInfo } from "../../Platform.js";
9
+ import { browserInfo } from "../../browserInfo.js";
10
10
  import Vector3 from "../../../core/geom/Vector3.js";
11
11
  import { noop } from "../../../core/function/Functions.js";
12
12
  import { assert } from "../../../core/assert.js";
@@ -9,7 +9,7 @@ import {
9
9
  TetrahedronBufferGeometry
10
10
  } from "three";
11
11
  import EntityBuilder from "../../../engine/ecs/EntityBuilder.js";
12
- import Renderable from "../../../engine/ecs/components/Renderable.js";
12
+ import Renderable from "../../../engine/ecs/renderable/Renderable.js";
13
13
  import { Transform } from "../../../engine/ecs/transform/Transform.js";
14
14
  import LabelView from "../../../view/common/LabelView.js";
15
15
  import GUIElement from "../../../engine/ecs/gui/GUIElement.js";
@@ -17,7 +17,7 @@ export class TerrainLayerDescription {
17
17
  }
18
18
 
19
19
  hash() {
20
- return computeStringHash(this.diffuse) ^ this.size.hashCode();
20
+ return computeStringHash(this.diffuse) ^ this.size.hash();
21
21
  }
22
22
 
23
23
  /**
@@ -3,7 +3,6 @@
3
3
  * @copyright Alex Goldring 2016
4
4
  */
5
5
  import View from "../View.js";
6
- import { prettyPrint } from "../../core/NumberFormat.js";
7
6
  import ObservedValue from "../../core/model/ObservedValue.js";
8
7
  import Vector1 from "../../core/geom/Vector1.js";
9
8
  import LinearValue from "../../core/model/LinearValue.js";
@@ -17,6 +16,7 @@ import { assert } from "../../core/assert.js";
17
16
  import ObservedInteger from "../../core/model/ObservedInteger.js";
18
17
  import { noop } from "../../core/function/Functions.js";
19
18
  import { isTypedArray } from "../../core/collection/array/typed/isTypedArray.js";
19
+ import { number_pretty_print } from "../../core/primitives/numbers/number_pretty_print.js";
20
20
 
21
21
 
22
22
  /**
@@ -26,7 +26,7 @@ import { isTypedArray } from "../../core/collection/array/typed/isTypedArray.js"
26
26
  */
27
27
  function format(value) {
28
28
  if (typeof value === 'number') {
29
- return prettyPrint(value);
29
+ return number_pretty_print(value);
30
30
  } else {
31
31
  return value;
32
32
  }
@@ -38,7 +38,7 @@ function format(value) {
38
38
  * @returns {string|number}
39
39
  */
40
40
  function formatNumber(v) {
41
- return prettyPrint(v);
41
+ return number_pretty_print(v);
42
42
  }
43
43
 
44
44
  function formatArray(arr) {