@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
@@ -229,7 +229,7 @@ class EntityBuilder {
229
229
  /**
230
230
  *
231
231
  * @param {string} eventName
232
- * @param {*} event
232
+ * @param {*} [event]
233
233
  */
234
234
  sendEvent(eventName, event) {
235
235
  if (this.getFlag(EntityBuilderFlags.Built)) {
@@ -368,6 +368,8 @@ class EntityBuilder {
368
368
  const subscription = listeners[i];
369
369
  dataset.addEntityEventListener(entity, subscription.name, subscription.listener, subscription.context);
370
370
  }
371
+ // reset listeners
372
+ this.deferredListeners.splice(0, listeners_count);
371
373
 
372
374
  const element = this.element;
373
375
  const element_count = element.length;
@@ -55,13 +55,18 @@ test("'Built' flag is reset when entity is removed without invoking 'destroy' me
55
55
 
56
56
  const b = new EntityBuilder();
57
57
 
58
+ expect(b.getFlag(EntityBuilderFlags.Built)).toBe(false);
59
+ expect(b.isBuilt).toBe(false);
60
+
58
61
  b.build(dataset);
59
62
 
60
63
  expect(b.getFlag(EntityBuilderFlags.Built)).toBe(true);
64
+ expect(b.isBuilt).toBe(true);
61
65
 
62
66
  dataset.removeEntity(b.entity);
63
67
 
64
68
  expect(b.getFlag(EntityBuilderFlags.Built)).toBe(false);
69
+ expect(b.isBuilt).toBe(false);
65
70
  });
66
71
 
67
72
  test("removeAllComponents from empty", () => {
@@ -131,4 +136,20 @@ test("adding component to live entity results in component being added to the da
131
136
  entity.add(component);
132
137
 
133
138
  expect(ecd.getComponent(entity.entity, DummyComponent)).toBe(component);
139
+
140
+ });
141
+
142
+ test("promiseEvent", async () => {
143
+
144
+ const entity = new EntityBuilder();
145
+
146
+ const ecd = sampleDataset();
147
+
148
+ entity.build(ecd)
149
+
150
+ const promise = entity.promiseEvent("x");
151
+
152
+ entity.sendEvent("x");
153
+
154
+ await promise;
134
155
  });
@@ -45,62 +45,63 @@ const revealMaskTableSpec = new RowFirstTableSpec([
45
45
 
46
46
  const fadeRow = [];
47
47
 
48
+ /**
49
+ * @class
50
+ */
48
51
  export class FogOfWar {
49
- constructor() {
50
- /**
51
- *
52
- * @type {boolean}
53
- */
54
- this.textureNeedsUpdate = false;
55
- /**
56
- *
57
- * @type {boolean}
58
- */
59
- this.distanceFieldNeedsUpdate = false;
60
52
 
61
- /**
62
- *
63
- * @type {Sampler2D}
64
- */
65
- this.sampler = null;
66
- /**
67
- *
68
- * @type {Sampler2D}
69
- */
70
- this.distanceSampler = null;
53
+ /**
54
+ *
55
+ * @type {boolean}
56
+ */
57
+ textureNeedsUpdate = true;
58
+ /**
59
+ *
60
+ * @type {boolean}
61
+ */
62
+ distanceFieldNeedsUpdate = false;
71
63
 
72
- /**
73
- *
74
- * @type {DataTexture|null}
75
- */
76
- this.texture = null;
64
+ /**
65
+ *
66
+ * @type {DataTexture|null}
67
+ */
68
+ texture = null;
77
69
 
78
- /**
79
- * Resolution scale of FoW versus terrain resolution, higher number makes FoW more detailed
80
- * @type {Vector1}
81
- */
82
- this.scale = new Vector1(1);
70
+ /**
71
+ * Resolution scale of FoW versus terrain resolution, higher number makes FoW more detailed
72
+ * @type {Vector1}
73
+ */
74
+ scale = new Vector1(1);
83
75
 
84
- /**
85
- * Size of the fog area
86
- * @type {Vector2}
87
- */
88
- this.size = new Vector2(0, 0);
76
+ /**
77
+ * Size of the fog area
78
+ * @type {Vector2}
79
+ */
80
+ size = new Vector2(0, 0);
89
81
 
90
- this.color = new Vector4(0.1, 0.1, 0.1, 1);
82
+ color = new Vector4(0.1, 0.1, 0.1, 1);
91
83
 
92
- /**
93
- * Contains indices of pixes that are currently being updated
94
- * @type {RowFirstTable}
95
- */
96
- this.fadeMask = new RowFirstTable(revealMaskTableSpec);
84
+ /**
85
+ * Contains indices of pixes that are currently being updated
86
+ * @type {RowFirstTable}
87
+ */
88
+ fadeMask = new RowFirstTable(revealMaskTableSpec);
97
89
 
98
- this.on = {
99
- textureChanged: new Signal()
100
- };
90
+ on = {
91
+ textureChanged: new Signal()
92
+ };
101
93
 
102
- this.initialize();
103
- }
94
+ /**
95
+ *
96
+ * @type {Sampler2D}
97
+ */
98
+ sampler = Sampler2D.uint8(1, 0, 0);
99
+
100
+ /**
101
+ *
102
+ * @type {Sampler2D}
103
+ */
104
+ distanceSampler = Sampler2D.uint8(1, 0, 0);
104
105
 
105
106
  /**
106
107
  *
@@ -159,13 +160,6 @@ export class FogOfWar {
159
160
  }
160
161
  }
161
162
 
162
- initialize() {
163
- this.sampler = new Sampler2D(new Uint8Array(0), 1, 0, 0);
164
- this.distanceSampler = new Sampler2D(new Uint8Array(0), 1, 0, 0);
165
-
166
- this.textureNeedsUpdate = true;
167
- }
168
-
169
163
  /**
170
164
  *
171
165
  * @param {number} x
@@ -171,7 +171,7 @@ class GUIElement {
171
171
  return computeHashIntegerArray(
172
172
  this.flags,
173
173
  computeStringHash(this.klass),
174
- this.anchor.hashCode(),
174
+ this.anchor.hash(),
175
175
  computeStringHash(this.group),
176
176
  this.visible.hashCode()
177
177
  )
@@ -97,9 +97,9 @@ class ViewportPosition {
97
97
 
98
98
  hash() {
99
99
  return computeHashIntegerArray(
100
- this.position.hashCode(),
101
- this.offset.hashCode(),
102
- this.anchor.hashCode(),
100
+ this.position.hash(),
101
+ this.offset.hash(),
102
+ this.anchor.hash(),
103
103
  this.resolveGuiCollisions ? 1 : 0,
104
104
  computeHashFloat(this.screenEdgeWidth),
105
105
  this.stickToScreenEdge ? 1 : 0,
@@ -1,6 +1,6 @@
1
1
  import {System} from "../System";
2
2
  import {GraphicsEngine} from "../../graphics/GraphicsEngine";
3
- import Renderable from "../components/Renderable";
3
+ import Renderable from "./Renderable";
4
4
 
5
5
  export default class RenderSystem extends System<Renderable> {
6
6
  constructor(graphics: GraphicsEngine)
@@ -2,15 +2,15 @@
2
2
  * Created by Alex on 01/04/2014.
3
3
  */
4
4
  import { System } from '../System.js';
5
- import Renderable from '../components/Renderable.js';
5
+ import Renderable from './Renderable.js';
6
6
  import { Transform } from '../transform/Transform.js';
7
7
  import { SignalBinding } from "../../../core/events/signal/SignalBinding.js";
8
- import { RenderableFlags } from "../components/RenderableFlags.js";
8
+ import { RenderableFlags } from "./RenderableFlags.js";
9
9
  import { rootObject3DFastMatrixUpdate } from "../../graphics/ecs/mesh/rootObject3DFastMatrixUpdate.js";
10
10
  import { updateNodeByTransformAndBBB } from "../../graphics/ecs/mesh/updateNodeByTransformAndBBB.js";
11
- import { three_computeObjectBoundingBox } from "../../graphics/three/three_computeObjectBoundingBox.js";
12
11
  import { ResourceAccessSpecification } from "../../../core/model/ResourceAccessSpecification.js";
13
12
  import { ResourceAccessKind } from "../../../core/model/ResourceAccessKind.js";
13
+ import { copy_transform_to_threejs_object } from "../../graphics/copy_transform_to_threejs_object.js";
14
14
 
15
15
 
16
16
  /**
@@ -111,37 +111,11 @@ class RenderSystem extends System {
111
111
 
112
112
  if (renderable.getFlag(RenderableFlags.BoundingBoxNeedsUpdate)) {
113
113
  // compute bounding box
114
- three_computeObjectBoundingBox(renderable.object, renderable.boundingBox);
115
-
116
- renderable.clearFlag(RenderableFlags.BoundingBoxNeedsUpdate);
114
+ renderable.computeBoundsFromObject();
117
115
  }
118
116
 
119
- function copyPositionOfMesh(x, y, z) {
120
- const m = renderable.object;
121
- const p = m.position;
122
- if (p.x !== x || p.y !== y || p.z !== z) {
123
- p.set(x, y, z);
124
- }
125
- updateMeshTransform(renderable);
126
- updateNodeByTransformAndBBB(renderable.bvh, renderable.boundingBox, transform);
127
- }
128
-
129
- function copyScaleOfMesh(x, y, z) {
130
- const m = renderable.object;
131
- const scale = m.scale;
132
- if (scale.x !== x || scale.y !== y || scale.z !== z) {
133
- scale.set(x, y, z);
134
- }
135
- updateMeshTransform(renderable);
136
- updateNodeByTransformAndBBB(renderable.bvh, renderable.boundingBox, transform);
137
- }
138
-
139
- function handleRotationChange() {
140
- const m = renderable.object;
141
- const euler = m.rotation;
142
-
143
- transform.rotation.__setFromEuler(euler.x, euler.y, euler.z, euler.order);
144
-
117
+ function handle_transform_change() {
118
+ copy_transform_to_threejs_object(renderable.object, transform);
145
119
  updateMeshTransform(renderable);
146
120
  updateNodeByTransformAndBBB(renderable.bvh, renderable.boundingBox, transform);
147
121
  }
@@ -149,9 +123,9 @@ class RenderSystem extends System {
149
123
  const position = transform.position;
150
124
  const scale = transform.scale;
151
125
 
152
- const bPosition = new SignalBinding(position.onChanged, copyPositionOfMesh);
153
- const bRotation = new SignalBinding(transform.rotation.onChanged, handleRotationChange);
154
- const bScale = new SignalBinding(scale.onChanged, copyScaleOfMesh);
126
+ const bPosition = new SignalBinding(position.onChanged, handle_transform_change);
127
+ const bRotation = new SignalBinding(transform.rotation.onChanged, handle_transform_change);
128
+ const bScale = new SignalBinding(scale.onChanged, handle_transform_change);
155
129
 
156
130
  bPosition.link();
157
131
  bRotation.link();
@@ -163,9 +137,7 @@ class RenderSystem extends System {
163
137
  bScale
164
138
  ];
165
139
 
166
- copyPositionOfMesh(position.x, position.y, position.z);
167
- copyScaleOfMesh(scale.x, scale.y, scale.z);
168
- handleRotationChange();
140
+ handle_transform_change();
169
141
 
170
142
  this.bvh.insertNode(renderable.bvh);
171
143
  }
@@ -0,0 +1,25 @@
1
+ import {Object3D} from "three";
2
+ import {AABB3} from "../../../core/geom/3d/aabb/AABB3";
3
+ import {LeafNode} from "../../../core/bvh2/LeafNode";
4
+
5
+ export default class Renderable {
6
+ readonly object: Object3D
7
+ readonly boundingBox: AABB3
8
+
9
+ matrixAutoUpdate: boolean
10
+ boundingBoxNeedsUpdate: boolean
11
+
12
+ readonly bvh: LeafNode<Object3D>
13
+
14
+ constructor(object: Object3D)
15
+
16
+ setFlag(flag: number): void
17
+
18
+ clearFlag(flag: number): void
19
+
20
+ writeFlag(flag: number, value: boolean): void
21
+
22
+ getFlag(flag: number): boolean
23
+
24
+ computeBoundsFromObject(): void
25
+ }
@@ -5,29 +5,15 @@
5
5
 
6
6
  import { LeafNode } from "../../../core/bvh2/LeafNode.js";
7
7
  import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
8
- import { Vector3 as ThreeVector3 } from "three";
9
- import { max2 } from "../../../core/math/max2.js";
10
- import { min2 } from "../../../core/math/min2.js";
11
8
  import { RenderableFlags } from "./RenderableFlags.js";
9
+ import { MATRIX_4_IDENTITY } from "../../../core/geom/3d/matrix/MATRIX_4_IDENTITY.js";
10
+ import {
11
+ expand_aabb_by_transformed_three_object
12
+ } from "../../graphics/three/expand_aabb_by_transformed_three_object.js";
12
13
 
13
14
  const DEFAULT_FLAGS = RenderableFlags.UpdateMatrix | RenderableFlags.BoundingBoxNeedsUpdate;
14
15
 
15
16
 
16
- /**
17
- *
18
- * @type {Vector3[]}
19
- */
20
- const scratch_corners = [
21
- new ThreeVector3(),
22
- new ThreeVector3(),
23
- new ThreeVector3(),
24
- new ThreeVector3(),
25
- new ThreeVector3(),
26
- new ThreeVector3(),
27
- new ThreeVector3(),
28
- new ThreeVector3()
29
- ];
30
-
31
17
  /**
32
18
  @deprecated use {@link ShadedGeometry} instead
33
19
  */
@@ -157,83 +143,32 @@ class Renderable {
157
143
  computeBoundsFromObject() {
158
144
  const object = this.object;
159
145
 
160
- let x0 = Infinity,
161
- y0 = Infinity,
162
- z0 = Infinity,
163
- x1 = -Infinity,
164
- y1 = -Infinity,
165
- z1 = -Infinity;
166
-
167
- object.updateMatrixWorld(false, true);
168
-
169
- object.traverse(function (object) {
170
- if (object.isLine || object.isMesh) {
171
-
172
-
173
- const geometry = object.geometry;
174
-
175
- geometry.computeBoundingBox();
176
-
177
- const boundingBox = geometry.boundingBox;
146
+ object.updateMatrixWorld();
178
147
 
179
- const bbMin = boundingBox.min;
180
- const bbMax = boundingBox.max;
148
+ const aabb = new Float32Array([
149
+ Infinity, Infinity, Infinity,
150
+ -Infinity, -Infinity, -Infinity
151
+ ]);
181
152
 
182
- if (bbMax.equals(bbMin)) {
183
- // object has 0 bounds, skip
184
- return;
185
- }
186
-
187
- object.updateMatrixWorld();
188
-
189
- const worldMatrix = object.matrixWorld;
190
-
191
- // set corner data
192
- scratch_corners[0].set(bbMin.x, bbMin.y, bbMin.z);
193
- scratch_corners[1].set(bbMin.x, bbMin.y, bbMax.z);
194
- scratch_corners[2].set(bbMin.x, bbMax.y, bbMin.z);
195
- scratch_corners[3].set(bbMin.x, bbMax.y, bbMax.z);
196
- scratch_corners[4].set(bbMax.x, bbMin.y, bbMin.z);
197
- scratch_corners[5].set(bbMax.x, bbMin.y, bbMax.z);
198
- scratch_corners[6].set(bbMax.x, bbMax.y, bbMin.z);
199
- scratch_corners[7].set(bbMax.x, bbMax.y, bbMax.z);
200
-
201
- for (let i = 0; i < 8; i++) {
202
- const corner = scratch_corners[i];
203
-
204
- corner.applyMatrix4(worldMatrix);
205
-
206
- x0 = min2(x0, corner.x);
207
- y0 = min2(y0, corner.y);
208
- z0 = min2(z0, corner.z);
209
-
210
- x1 = max2(x1, corner.x);
211
- y1 = max2(y1, corner.y);
212
- z1 = max2(z1, corner.z);
213
- }
214
- }
215
- });
153
+ expand_aabb_by_transformed_three_object(aabb, object, MATRIX_4_IDENTITY);
216
154
 
217
155
  // sanity checks to ensure valid bounds
218
- if (!Number.isFinite(x0)) {
219
- x0 = 0;
220
- x1 = 0;
156
+ if (!Number.isFinite(aabb[0])) {
157
+ aabb[0] = aabb[3] = 0;
221
158
  }
222
159
 
223
- if (!Number.isFinite(y0)) {
224
- y0 = 0;
225
- y1 = 0;
160
+ if (!Number.isFinite(aabb[1])) {
161
+ aabb[1] = aabb[4] = 0;
226
162
  }
227
163
 
228
- if (!Number.isFinite(z0)) {
229
- z0 = 0;
230
- z1 = 0;
164
+ if (!Number.isFinite(aabb[2])) {
165
+ aabb[2] = aabb[5] = 0;
231
166
  }
232
167
 
233
168
 
234
- this.boundingBox.setBounds(x0, y0, z0, x1, y1, z1);
169
+ this.boundingBox.readFromArray(aabb);
235
170
 
236
- this.bvh.resize(x0, y0, z0, x1, y1, z1);
171
+ this.clearFlag(RenderableFlags.BoundingBoxNeedsUpdate);
237
172
  }
238
173
  }
239
174
 
@@ -0,0 +1,10 @@
1
+ import Renderable from "./Renderable.js";
2
+ import { Object3D } from "three";
3
+ import { RenderableFlags } from "./RenderableFlags.js";
4
+
5
+ test("constructor", () => {
6
+
7
+ const unit = new Renderable(new Object3D());
8
+
9
+ expect(unit.getFlag(RenderableFlags.BoundingBoxNeedsUpdate)).toBe(true);
10
+ });
@@ -20,7 +20,6 @@ import { Blackboard } from "../../intelligence/blackboard/Blackboard.js";
20
20
  import { VoiceFlags } from "./VoiceFlags.js";
21
21
  import { assert } from "../../../core/assert.js";
22
22
  import { weightedRandomFromArray } from "../../../core/collection/array/weightedRandomFromArray.js";
23
- import { MeepSettings } from "../../MeepSettings.js";
24
23
  import { GameAssetType } from "../../asset/GameAssetType.js";
25
24
  import { DomSizeObserver } from "../../../view/util/DomSizeObserver.js";
26
25
  import { SpeechBubbleView } from "./SpeechBubbleView.js";
@@ -140,8 +139,6 @@ class Context extends SystemEntityContext {
140
139
  }
141
140
  }
142
141
 
143
- const VOICE_SETTINGS = MeepSettings.ecs.Voice;
144
-
145
142
  const SPEECH_BUBBLE_ANIMATION_INTRO = new AnimationTrack(['alpha']);
146
143
  SPEECH_BUBBLE_ANIMATION_INTRO.addKey(0, [0]);
147
144
  SPEECH_BUBBLE_ANIMATION_INTRO.addKey(0.1, [1]);
@@ -167,8 +164,12 @@ export class VoiceSystem extends AbstractContextSystem {
167
164
  /**
168
165
  *
169
166
  * @param {Engine} engine
167
+ * @param settings
170
168
  */
171
- constructor(engine) {
169
+ constructor(engine, settings = {
170
+ font: "unknown.ttf", //path to font file
171
+ font_size: 16
172
+ }) {
172
173
  super(Context);
173
174
 
174
175
  this.dependencies = [Voice];
@@ -239,9 +240,16 @@ export class VoiceSystem extends AbstractContextSystem {
239
240
 
240
241
  /**
241
242
  *
243
+ * @type {string}
242
244
  * @private
243
245
  */
244
- this.__font_size = VOICE_SETTINGS.font_size;
246
+ this.__font_path = settings.font;
247
+
248
+ /**
249
+ *
250
+ * @private
251
+ */
252
+ this.__font_size = settings.font_size;
245
253
 
246
254
  /**
247
255
  * Print debug output into console
@@ -274,11 +282,9 @@ export class VoiceSystem extends AbstractContextSystem {
274
282
  assert.defined(this.lines, 'lines');
275
283
  assert.defined(this.sets, 'sets');
276
284
 
277
- const p_font_setting = engine.assetManager.promise(VOICE_SETTINGS.font, GameAssetType.Font).then(font_asset => {
278
-
279
- const font = font_asset.create();
285
+ const p_font_setting = engine.assetManager.promise(this.__font_path, GameAssetType.Font).then(font_asset => {
280
286
 
281
- this.__font = font;
287
+ this.__font = font_asset.create();
282
288
  });
283
289
 
284
290
  p_font_setting.then(() => {
@@ -52,7 +52,7 @@ function classify(terrain, mask) {
52
52
 
53
53
  const maxSamples = 50;
54
54
 
55
- const hash = maskCenter.hashCode();
55
+ const hash = maskCenter.hash();
56
56
 
57
57
  /**
58
58
  *
@@ -16,7 +16,7 @@ import { assert } from "../../../../../core/assert.js";
16
16
  import Vector2 from "../../../../../core/geom/Vector2.js";
17
17
  import { TerrainLayer } from "./TerrainLayer.js";
18
18
  import { Sampler2D } from "../../../../graphics/texture/sampler/Sampler2D.js";
19
- import { scaleSampler2D } from "../../../../graphics/texture/sampler/scaleSampler2D.js";
19
+ import { sampler2d_scale } from "../../../../graphics/texture/sampler/resize/sampler2d_scale.js";
20
20
  import List from "../../../../../core/collection/list/List.js";
21
21
  import { Cache } from "../../../../../core/cache/Cache.js";
22
22
  import { BinaryClassSerializationAdapter } from "../../../storage/binary/BinaryClassSerializationAdapter.js";
@@ -50,7 +50,7 @@ class ScaledTextureKey {
50
50
  }
51
51
 
52
52
  hash() {
53
- return computeStringHash(this.uri) ^ this.size.hashCode();
53
+ return computeStringHash(this.uri) ^ this.size.hash();
54
54
  }
55
55
 
56
56
  equals(other) {
@@ -363,7 +363,7 @@ export class TerrainLayers {
363
363
 
364
364
  const scaledLayerSampler = Sampler2D.uint8(3, resolution_x, resolution_y);
365
365
 
366
- scaleSampler2D(layerSampler, scaledLayerSampler);
366
+ sampler2d_scale(layerSampler, scaledLayerSampler);
367
367
 
368
368
  // write scaled texture into the cache
369
369
  scaled_texture_cache.put(key, scaledLayerSampler);
@@ -2,9 +2,9 @@ import { Sampler2D } from "../../../../graphics/texture/sampler/Sampler2D.js";
2
2
  import convertSampler2D2Canvas from "../../../../graphics/texture/sampler/Sampler2D2Canvas.js";
3
3
  import { CanvasView } from "../../../../../view/elements/CanvasView.js";
4
4
  import EmptyView from "../../../../../view/elements/EmptyView.js";
5
- import { scaleSampler2D } from "../../../../graphics/texture/sampler/scaleSampler2D.js";
5
+ import { sampler2d_scale } from "../../../../graphics/texture/sampler/resize/sampler2d_scale.js";
6
6
  import { passThrough } from "../../../../../core/function/Functions.js";
7
- import AABB2 from "../../../../../core/geom/AABB2.js";
7
+ import AABB2 from "../../../../../core/geom/2d/aabb/AABB2.js";
8
8
  import View from "../../../../../view/View.js";
9
9
  import SVG from "../../../../../view/SVG.js";
10
10
  import Vector2 from "../../../../../core/geom/Vector2.js";
@@ -218,7 +218,7 @@ export class SplatMapOptimizerDebugger {
218
218
 
219
219
  const s2 = Sampler2D.uint8(4, rW, rH);
220
220
 
221
- scaleSampler2D(sampler, s2);
221
+ sampler2d_scale(sampler, s2);
222
222
 
223
223
  const canvasView = new CanvasView();
224
224
  canvasView.size.set(rW, rH);
@@ -4,7 +4,7 @@ import { max2 } from "../../../../../core/math/max2.js";
4
4
  import { min2 } from "../../../../../core/math/min2.js";
5
5
  import { Sampler2D } from "../../../../graphics/texture/sampler/Sampler2D.js";
6
6
  import { assert } from "../../../../../core/assert.js";
7
- import { scaleSampler2D } from "../../../../graphics/texture/sampler/scaleSampler2D.js";
7
+ import { sampler2d_scale } from "../../../../graphics/texture/sampler/resize/sampler2d_scale.js";
8
8
  import { array_copy } from "../../../../../core/collection/array/array_copy.js";
9
9
  import { typed_array_copy } from "../../../../../core/collection/array/typed/typed_array_copy.js";
10
10
  import { Base64 } from "../../../../../core/binary/Base64.js";
@@ -520,7 +520,7 @@ export class SplatMapping {
520
520
  const source = new Sampler2D(oldWeightData.subarray(d * oldLayerSize, (d + 1) * oldLayerSize), 1, oldWidth, oldHeight);
521
521
  const target = new Sampler2D(weightImage.data.subarray(d * newLayerSize, (d + 1) * newLayerSize), 1, width, height);
522
522
 
523
- scaleSampler2D(source, target);
523
+ sampler2d_scale(source, target);
524
524
  }
525
525
  }
526
526
 
@@ -11,7 +11,7 @@ import { assert } from "../../../../core/assert.js";
11
11
  import ObservedString from "../../../../core/model/ObservedString.js";
12
12
  import { ClampToEdgeWrapping, DataTexture, NearestFilter } from "three";
13
13
  import { Sampler2D } from "../../../graphics/texture/sampler/Sampler2D.js";
14
- import { scaleSampler2D } from "../../../graphics/texture/sampler/scaleSampler2D.js";
14
+ import { sampler2d_scale } from "../../../graphics/texture/sampler/resize/sampler2d_scale.js";
15
15
  import { uint82float } from "../../../../core/binary/uint82float.js";
16
16
  import { float2uint8 } from "../../../../core/binary/float2uint8.js";
17
17
  import { isTypedArray } from "../../../../core/collection/array/typed/isTypedArray.js";
@@ -314,7 +314,7 @@ export class TerrainOverlay {
314
314
 
315
315
  // rescale source if needed
316
316
  const scaled_source = Sampler2D.uint8(4, dWidth, dHeight);
317
- scaleSampler2D(source, scaled_source);
317
+ sampler2d_scale(source, scaled_source);
318
318
 
319
319
  this.sampler.paint(scaled_source, 0, 0, dx, dy, dWidth, dHeight);
320
320
 
@@ -2,7 +2,7 @@ import { Sampler2D } from "../../../graphics/texture/sampler/Sampler2D.js";
2
2
  import { ParameterLookupTable } from "../../../graphics/particles/particular/engine/parameter/ParameterLookupTable.js";
3
3
  import { passThrough } from "../../../../core/function/Functions.js";
4
4
  import { clamp01 } from "../../../../core/math/clamp01.js";
5
- import { scaleSampler2D } from "../../../graphics/texture/sampler/scaleSampler2D.js";
5
+ import { sampler2d_scale } from "../../../graphics/texture/sampler/resize/sampler2d_scale.js";
6
6
 
7
7
 
8
8
  const heatmap_lut = new ParameterLookupTable(4);
@@ -43,7 +43,7 @@ export function paintTerrainOverlayViaLookupTable({
43
43
  // rescale source
44
44
  const scaled_sampler = sampler.clone();
45
45
  scaled_sampler.resize(w, h);
46
- scaleSampler2D(sampler, scaled_sampler);
46
+ sampler2d_scale(sampler, scaled_sampler);
47
47
 
48
48
  for (j = 0; j < h; j++) {
49
49
 
@@ -25,6 +25,7 @@ const scratch_matrix = new Float32Array(16);
25
25
  const FLAGS_DEFAULT = TransformFlags.AutomaticChangeDetection;
26
26
 
27
27
  /**
28
+ * Described position/rotation/scale in 3d space
28
29
  * @class
29
30
  */
30
31
  export class Transform {