@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,107 +0,0 @@
1
- /**
2
- * Created by Alex on 30/06/2014.
3
- */
4
- import { System } from '../System.js';
5
- import TargetAI from '../components/TargetAI.js';
6
- import Attacker from '../components/Attacker.js';
7
- import { Transform } from '../transform/Transform.js';
8
- import Tag from '../components/Tag.js';
9
-
10
-
11
- class TargetAISystem extends System {
12
- constructor() {
13
- super();
14
-
15
- this.dependencies = [TargetAI];
16
-
17
- this.entityManager = null;
18
- this.managedTargets = [];
19
- }
20
-
21
- reset() {
22
- this.managedTargets = [];
23
- }
24
-
25
- startup(entityManager, readyCallback, errorCallback) {
26
- this.entityManager = entityManager;
27
- const self = this;
28
- entityManager.on.entityRemoved.add(function (entity) {
29
- //check if it's a managed entity
30
- const managedTarget = self.managedTargets[entity];
31
- if (managedTarget !== void 0) {
32
- managedTarget.target = null;
33
- }
34
- });
35
- readyCallback();
36
- }
37
-
38
- remove(component, entity) {
39
- if (component.target !== null) {
40
- delete this.managedTargets[component.target];
41
- }
42
- }
43
-
44
- update(timeDelta) {
45
- const self = this;
46
- //go through target pickers
47
- const em = this.entityManager;
48
- em.traverseEntities([TargetAI, Attacker, Transform], function (picker, attacker, source, entity) {
49
- const sourcePosition = source.global.position;
50
- let targetEntity = attacker.target;
51
- let targetPosition;
52
- if (targetEntity !== null) {
53
- const targetTransform = em.getComponent(targetEntity, Transform);
54
- if (targetTransform === null) {
55
- //target entity no longer exists
56
- loseTarget(em, entity, attacker, self);
57
- } else {
58
- targetPosition = targetTransform.global.position;
59
- const d = targetPosition.distanceTo(sourcePosition);
60
- if (d > picker.range) {
61
- //reset target if too far
62
- loseTarget(em, entity, attacker, self);
63
- } else {
64
- //we already have a decent target
65
- return;
66
- }
67
- }
68
- }
69
- if (attacker.target === null) {
70
- let range = picker.range;
71
- const tags = picker.tags;
72
- //find a new nearest target
73
- em.traverseEntities([Tag, Transform], function (tag, transform, entity) {
74
- if (!tag.containsOneOf(tags)) {
75
- //not a tag we care about
76
- return;
77
- }
78
- //check distance
79
- let d = transform.global.position.distanceTo(sourcePosition);
80
- if (d < range) {
81
- range = d; //reduce search radius
82
- targetEntity = entity;
83
- }
84
- });
85
- if (targetEntity !== null) {
86
- gainTarget(em, entity, attacker, targetEntity, self);
87
- }
88
- }
89
- });
90
- }
91
- }
92
-
93
-
94
- function loseTarget(em, entity, attacker, ts) {
95
- const oldTarget = attacker.target;
96
- attacker.target = null;
97
- em.sendEvent(entity, "target-lost", oldTarget);
98
- delete ts.managedTargets[oldTarget];
99
- }
100
-
101
- function gainTarget(em, entity, attacker, target, ts) {
102
- attacker.target = target;
103
- em.sendEvent(entity, "target-gained", target);
104
- ts.managedTargets[target] = attacker;
105
- }
106
-
107
- export default TargetAISystem;
@@ -1,68 +0,0 @@
1
- /**
2
- * Created by Alex on 18/12/2014.
3
- */
4
- import { System } from '../System.js';
5
- import { Transform } from '../transform/Transform.js';
6
- import Renderable from '../components/Renderable.js';
7
- import GeometryBVH from '../components/GeometryBVH.js';
8
- import ViewportMeshProjection from '../components/ViewportMeshProjection.js';
9
- import { Vector3 as ThreeVector3 } from 'three';
10
-
11
- class VMPS extends System {
12
- /**
13
- *
14
- * @param {GraphicsEngine} graphicsEngine
15
- * @constructor
16
- */
17
- constructor(graphicsEngine) {
18
- super();
19
- this.graphicEngine = graphicsEngine;
20
-
21
- this.dependencies = [ViewportMeshProjection];
22
-
23
- //small number
24
- this.update = (function () {
25
- const source = new ThreeVector3();
26
- const target = new ThreeVector3();
27
-
28
- function update(timeDelta) {
29
- const ge = this.graphicEngine;
30
- const em = this.entityManager;
31
- em.traverseEntities([ViewportMeshProjection, Transform], function (p, t, e) {
32
- const v2 = p.position;
33
- const geometryBVH = em.getComponent(p.entity, GeometryBVH);
34
- if (geometryBVH !== null) {
35
- //bvh exists
36
- ge.viewportProjectionRay(v2.x, v2.y, source, target);
37
- geometryBVH.raycast(source, target, function (point) {
38
- if (t.position.distanceToSquared(point) > EPSILON) {
39
- t.position.copy(point);
40
- }
41
- });
42
- } else {
43
- //no bvh, use mesh directly
44
- const renderable = em.getComponent(p.entity, Renderable);
45
- const hits = ge.intersectObjectUnderViewportPoint(v2.x, v2.y, renderable.mesh, true);
46
- if (hits !== void 0 && hits.length > 0) {
47
- //take first hit
48
- const hit = hits[0];
49
- const point = hit.point;
50
- if (t.position.distanceToSquared(point) > EPSILON) {
51
- t.position.copy(point);
52
- }
53
- }
54
- }
55
-
56
-
57
- });
58
- }
59
-
60
- return update;
61
- })();
62
- }
63
- }
64
-
65
-
66
- const EPSILON = 0.00001;
67
-
68
- export default VMPS;
@@ -1,87 +0,0 @@
1
- import { ParticleEmitter } from "./particular/engine/emitter/ParticleEmitter.js";
2
- import { GameAssetType } from "../../asset/GameAssetType.js";
3
- import { assert } from "../../../core/assert.js";
4
- import { JsonAssetLoader } from "../../asset/loaders/JsonAssetLoader.js";
5
-
6
- /**
7
- * @deprecated Use "Effect" API to achieve the same results
8
- */
9
- export class ParticleEmitterLibrary {
10
- /**
11
- *
12
- * @param {AssetManager} assetManager
13
- */
14
- constructor(assetManager) {
15
- /**
16
- *
17
- * @type {AssetManager}
18
- */
19
- this.assetManager = assetManager;
20
-
21
- this.data = {};
22
- }
23
-
24
- /**
25
- *
26
- * @param {string} path
27
- * @returns {Promise<void>}
28
- */
29
- async load_from_registry_file(path) {
30
-
31
- const am = this.assetManager;
32
-
33
- if (am.getLoaderByType(GameAssetType.JSON) === undefined) {
34
- // add missing loader
35
- await am.registerLoader(GameAssetType.JSON, new JsonAssetLoader());
36
- }
37
-
38
- const asset = await am.promise(path, GameAssetType.JSON)
39
- const particleSet = asset.create();
40
-
41
- await this.load(particleSet);
42
- }
43
-
44
- /**
45
- * @param {Object} listing
46
- * @returns {Promise}
47
- */
48
- load(listing) {
49
- const assetManager = this.assetManager;
50
- const data = this.data;
51
-
52
- const promises = [];
53
-
54
- for (let id in listing) {
55
- const url = listing[id];
56
-
57
- assert.typeOf(id, "string", "id");
58
- assert.typeOf(url, "string", "url");
59
-
60
- const assetPromise = assetManager.promise(url, GameAssetType.JSON);
61
-
62
- promises.push(assetPromise);
63
-
64
- assetPromise.then(asset => {
65
- const json = asset.create();
66
-
67
- data[id] = json;
68
- });
69
- }
70
-
71
- return Promise.all(promises);
72
- }
73
-
74
- /**
75
- * @param {string} id
76
- * @returns {ParticleEmitter}
77
- */
78
- create(id) {
79
- const definition = this.data[id];
80
-
81
- if (definition === undefined) {
82
- throw new Error(`No definition found for emitter '${id}'`);
83
- }
84
-
85
- return ParticleEmitter.fromJSON(definition);
86
- }
87
- }
@@ -1,65 +0,0 @@
1
- /**
2
- *
3
- * @param {Sampler2D} sampler
4
- * @param {number} scale
5
- * @param {number} offset
6
- * @return {function(index:int, array:ArrayLike, x:int, y:int)}
7
- */
8
- export function sampler2d_make_array_filler_function(sampler, scale=255, offset=0){
9
-
10
- const v4 = [1 / scale, 1 / scale, 1 / scale, 1 / scale];
11
-
12
- //
13
- function fillDD1(index, array, x, y) {
14
- const val = (sampler.sampleChannelBilinear(x, y, 0) + offset) * scale | 0;
15
- array[index] = val;
16
- array[index + 1] = val;
17
- array[index + 2] = val;
18
- array[index + 3] = 255;
19
- }
20
-
21
- function fillDD2(index, array, x, y) {
22
- sampler.sampleBilinear(x, y, v4, 0);
23
- const val = (v4[0] + offset) * scale | 0;
24
- array.fill(val, index, index + 3);
25
- array[index + 3] = (v4[1] + offset) * scale | 0;
26
- }
27
-
28
- function fillDD3(index, array, x, y) {
29
-
30
- sampler.sampleBilinear(x, y, v4, 0);
31
-
32
- array[index] = (v4[0] + offset) * scale | 0;
33
- array[index + 1] = (v4[1] + offset) * scale | 0;
34
- array[index + 2] = (v4[2] + offset) * scale | 0;
35
- array[index + 3] = 255;
36
- }
37
-
38
- function fillDD4(index, array, x, y) {
39
- sampler.sampleBilinear(x, y, v4, 0);
40
- array[index] = (v4[0] + offset) * scale | 0;
41
- array[index + 1] = (v4[1] + offset) * scale | 0;
42
- array[index + 2] = (v4[2] + offset) * scale | 0;
43
- array[index + 3] = (v4[3] + offset) * scale | 0;
44
- }
45
-
46
- let fillDD;
47
- switch (sampler.itemSize) {
48
- case 1:
49
- fillDD = fillDD1;
50
- break;
51
- case 2:
52
- fillDD = fillDD2;
53
- break;
54
- case 3:
55
- fillDD = fillDD3;
56
- break;
57
- case 4:
58
- fillDD = fillDD4;
59
- break;
60
- default :
61
- throw new Error("unsupported item size");
62
- break;
63
- }
64
- return fillDD;
65
- }
@@ -1,17 +0,0 @@
1
- import { Sampler2D } from "./Sampler2D.js";
2
- import { sampler2d_scale_down_linear } from "./sampler2d_scale_down_linear.js";
3
-
4
- test('2x2 -> 1x1 2x channel', () => {
5
- const input = Sampler2D.float32(2, 2, 2);
6
- const output = Sampler2D.float32(2, 1, 1);
7
-
8
- input.set(0, 0, [1, 3]);
9
- input.set(1, 0, [5, 7]);
10
- input.set(0, 1, [11, 13]);
11
- input.set(1, 1, [17, 19]);
12
-
13
- sampler2d_scale_down_linear(input, output);
14
-
15
- expect(output.data[0]).toEqual(8.5);
16
- expect(output.data[1]).toEqual(10.5);
17
- });
@@ -1,10 +0,0 @@
1
- export class RibbonState {
2
- constructor() {
3
-
4
- /**
5
- *
6
- * @type {RibbonX}
7
- */
8
- this.ribbon = null;
9
- }
10
- }
@@ -1,131 +0,0 @@
1
- /**
2
- * Created by Alex on 13/10/2014.
3
- */
4
- import GridField from '../navigation/grid/GridField.js';
5
- import Vector2 from '../../core/geom/Vector2.js';
6
- import Vector3 from "../../core/geom/Vector3.js";
7
-
8
- const Grid = function () {
9
- let gridScale = 2;
10
- let gridScaleX = gridScale;
11
- let gridScaleY = gridScale;
12
-
13
- this.size = new Vector2();
14
- this.field = null;
15
-
16
- this.init = function (width, height, worldScale) {
17
- if (worldScale === undefined) {
18
- worldScale = 2;
19
- }
20
- gridScale = worldScale;
21
- this.field = new GridField(width, height);
22
- this.size.set(width, height);
23
-
24
- updateGridScale(width, height);
25
- };
26
-
27
- function updateGridScale(width, height) {
28
- //scale is not exact as number of points in the mesh will be greater by 1 than number of tiles, for obvious reasons.
29
- gridScaleX = gridScale * (width / (width - 1));
30
- gridScaleY = gridScale * (height / (height - 1));
31
- }
32
-
33
- this.resize = function (width, height) {
34
- const oldSize = this.size;
35
-
36
- if (oldSize.x !== width || oldSize.y !== height) {
37
- const newField = new GridField(width, height);
38
- updateGridScale(width, height);
39
- //copy values from old field to new one
40
- if (this.field !== null) {
41
- this.field.rectTraverse(0, 0, oldSize.x, oldSize.y, function (x, y, value) {
42
- newField.pointSet(x, y, value);
43
- });
44
- }
45
-
46
- this.field = newField;
47
- this.size.set(width, height);
48
- }
49
- };
50
-
51
- /**
52
- *
53
- * @param {number} x
54
- * @param {number} y
55
- * @param {Vector3} resultV3
56
- */
57
- function pointGrid2World2(x, y, resultV3) {
58
- resultV3.x = (x) * gridScaleX;
59
- resultV3.z = (y) * gridScaleY;
60
- }
61
-
62
- /**
63
- *
64
- * @param {Vector3} v3
65
- * @param {Vector2} resultV2
66
- */
67
- function pointWorld2Grid(v3, resultV2) {
68
- resultV2.x = v3.x / gridScaleX;
69
- resultV2.y = v3.z / gridScaleY;
70
- }
71
-
72
- this.pointWorld2Grid = pointWorld2Grid;
73
- this.pointGrid2World = pointGrid2World2;
74
- const point2 = new Vector2();
75
-
76
- function mapHeightToPath(path, terrain, width, height, callback) {
77
- let mappedCount = 0;
78
- const l = path.length;
79
-
80
- function mapPoint(p) {
81
- terrain.sampleHeight(p.x, p.z, function (y) {
82
- p.y = y;
83
- if (++mappedCount >= l) {
84
- callback(path);
85
- }
86
- });
87
- }
88
-
89
- for (let i = 0; i < l; i++) {
90
- const p = path[i];
91
- mapPoint(p);
92
- }
93
- }
94
-
95
- const self = this;
96
- this.findPath = (function () {
97
- const start = new Vector2(0, 0);
98
- const goal = new Vector2(0, 0);
99
-
100
- /**
101
- *
102
- * @param {Vector3} from
103
- * @param {Vector3} to
104
- * @param {number} clearance
105
- * @param callback
106
- */
107
- function findPath(from, to, clearance, callback) {
108
- pointWorld2Grid(from, start);
109
- start.ceil();
110
- pointWorld2Grid(to, goal);
111
- goal.ceil();
112
- const field = self.field;
113
- const indexPath = field.findPath(start, goal, 10000, 0);
114
- const path = [];
115
- let i, point;
116
- for (i = 0; i < indexPath.length; i++) {
117
- const index = indexPath[i];
118
- field.index2point(index, point2);
119
- point = new Vector3(0, 0, 0);
120
- pointGrid2World2(point2.x, point2.y, point);
121
- path.push(point);
122
- }
123
- const terrain = self.terrain;
124
-
125
- mapHeightToPath(path, terrain, self.size.x * gridScaleX, self.size.y * gridScaleY, callback);
126
- }
127
-
128
- return findPath;
129
- })();
130
- };
131
- export default Grid;
@@ -1,20 +0,0 @@
1
- /**
2
- * Created by Alex on 28/01/2015.
3
- */
4
- import { Matrix4 as ThreeMatrix4 } from 'three';
5
-
6
- const emptyHash = {};
7
-
8
- function ViewportGridProjection(options) {
9
- if (options === void 0) {
10
- options = emptyHash;
11
- }
12
- this.x = options.x || 0;
13
- this.y = options.y || 0;
14
- this.prevX = void 0;
15
- this.prevY = void 0;
16
- this.prevProjectionMatrix = new ThreeMatrix4();
17
- this.snap = options.snap !== void 0 ? options.snap : true;
18
- }
19
-
20
- export default ViewportGridProjection;
@@ -1,58 +0,0 @@
1
- /**
2
- * Created by Alex on 13/10/2014.
3
- */
4
- import { System } from '../../ecs/System.js';
5
- import GridPosition from '../components/GridPosition.js';
6
- import GridObstacle from '../components/GridObstacle.js';
7
-
8
- class GridObstacleSystem extends System {
9
- constructor() {
10
- super();
11
-
12
- this.dependencies = [GridObstacle, GridPosition];
13
-
14
- this.pathsNeedUpdate = false;
15
- }
16
-
17
- startup(entityManager, success, failure) {
18
- this.entityManager = entityManager;
19
-
20
- success();
21
- }
22
-
23
- recalculatePaths() {
24
- //todo this should be somewhere else
25
- }
26
-
27
- /**
28
- *
29
- * @param {GridObstacle} obstacle
30
- * @param {GridPosition} p
31
- * @param {int} entityId
32
- */
33
- link(obstacle, p, entityId) {
34
-
35
- this.pathsNeedUpdate = true;
36
- }
37
-
38
- /**
39
- *
40
- * @param {GridObstacle} obstacle
41
- * @param {GridPosition} p
42
- * @param {int} entityId
43
- */
44
- unlink(obstacle, p, entityId) {
45
-
46
- this.pathsNeedUpdate = true;
47
- }
48
-
49
- update(timeDelta) {
50
- if (this.pathsNeedUpdate) {
51
- this.recalculatePaths();
52
- this.pathsNeedUpdate = false;
53
- }
54
- }
55
- }
56
-
57
-
58
- export default GridObstacleSystem;
@@ -1,105 +0,0 @@
1
- /**
2
- * Created by Alex on 28/01/2015.
3
- */
4
- import { System } from '../../ecs/System.js';
5
- import GeometryBVH from '../../ecs/components/GeometryBVH.js';
6
- import GridPosition from '../components/GridPosition.js';
7
- import ViewportGridProjection from '../components/ViewportGridProjection.js';
8
- import Vector2 from "../../../core/geom/Vector2.js";
9
- import Vector3 from "../../../core/geom/Vector3.js";
10
- import { obtainTerrain } from "../../ecs/terrain/util/obtainTerrain.js";
11
-
12
- class ViewportGridProjectionSystem extends System {
13
- constructor(grid, graphicsEngine) {
14
- super();
15
-
16
- this.dependencies = [ViewportGridProjection];
17
-
18
- this.graphicsEngine = graphicsEngine;
19
- this.grid = grid;
20
- }
21
-
22
- add(component, entity) {
23
- }
24
-
25
- remove(component, entity) {
26
- }
27
-
28
- update(timeDelta) {
29
- const grid = this.grid;
30
- const em = this.entityManager;
31
- const renderer = this.graphicsEngine;
32
- //
33
- let terrain = null;
34
- let terrainEntity = void 0;
35
- obtainTerrain(em.dataset, function (t, entity) {
36
- terrain = t;
37
- terrainEntity = entity;
38
- });
39
-
40
- if (terrain === void 0) {
41
- //terrain failed to bind, can't project
42
- return;
43
- }
44
- //try to get bvh for terrain
45
- const geometryBVH = em.getComponent(terrainEntity, GeometryBVH);
46
-
47
- const terrainMesh = terrain.surfaceMesh;
48
- if (terrainMesh === void 0) {
49
- //mesh doesn't exist, can't project
50
- return;
51
- }
52
- const v2 = new Vector2();
53
- em.traverseEntities([ViewportGridProjection, GridPosition], function (p, gridPosition, entity) {
54
- const worldProjectionMatrix = renderer.camera.projectionMatrix;
55
- if (p.x === p.prevX && p.y === p.prevY && matricesEqual(worldProjectionMatrix, p.prevProjectionMatrix)) {
56
- //NOTE: Assumes mesh is static in transform and topology
57
- //result same as before, do nothing
58
- return;
59
- }
60
- p.prevX = p.x;
61
- p.prevY = p.y;
62
- p.prevProjectionMatrix.copy(worldProjectionMatrix);
63
- v2.set(p.x, p.y);
64
- renderer.normalizeViewportPoint(v2, v2);
65
- if (geometryBVH !== null) {
66
- //see if there's a bvh for this entity
67
- const source = new Vector3();
68
- const target = new Vector3();
69
- renderer.viewportProjectionRay(v2.x, v2.y, source, target);
70
- geometryBVH.raycast(source, target, function (point) {
71
- processIntersection(grid, point, p, gridPosition);
72
- });
73
- } else {
74
- const hits = renderer.intersectObjectUnderViewportPoint(v2.x, v2.y, terrainMesh, true);
75
- if (hits !== void 0 && hits.length > 0) {
76
- //take first hit
77
- const hit = hits[0];
78
- const point = hit.point;
79
- processIntersection(grid, point, p, gridPosition);
80
- }
81
- }
82
- });
83
- }
84
- }
85
-
86
-
87
- function matricesEqual(m0, m1) {
88
- for (let i = 0; i < 16; i++) {
89
- if (m0.elements[i] !== m1.elements[i]) {
90
- return false;
91
- }
92
- }
93
- return true;
94
- }
95
-
96
- function processIntersection(grid, point, p, gridPosition) {
97
- grid.pointWorld2Grid(point, gridPosition);
98
- if (p.snap) {
99
- //snap to grid
100
- gridPosition.x = Math.round(gridPosition.x);
101
- gridPosition.y = Math.round(gridPosition.y);
102
- }
103
- }
104
-
105
- export default ViewportGridProjectionSystem;