@woosh/meep-engine 2.56.1 → 2.57.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 (227) hide show
  1. package/editor/ecs/component/editors/ColorEditor.js +1 -1
  2. package/editor/ecs/component/editors/ImagePathEditor.js +2 -2
  3. package/editor/ecs/component/editors/{LargeStrongEditor.js → LargeStringEditor.js} +1 -1
  4. package/editor/tools/GridPaintTool.js +3 -3
  5. package/editor/tools/TopDownCameraControlTool.js +1 -1
  6. package/editor/tools/TransformTool.js +1 -1
  7. package/editor/tools/engine/Tool.js +9 -23
  8. package/editor/tools/engine/ToolEngine.js +5 -7
  9. package/editor/tools/paint/TerrainHeightPaintTool.js +2 -2
  10. package/editor/tools/paint/TerrainPaintTool.js +2 -2
  11. package/editor/tools/paint/TerrainTexturePaintTool.js +2 -2
  12. package/package.json +1 -1
  13. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.js +1 -1
  14. package/src/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +1 -1
  15. package/src/core/bvh2/traversal/__process_point_if_within_planes.js +1 -1
  16. package/src/core/cache/LoadingCache.js +3 -2
  17. package/src/core/collection/array/arraySetSortingDiff.spec.js +12 -12
  18. package/src/core/collection/array/weightedRandomFromArray.js +2 -2
  19. package/src/core/color/Color.js +6 -6
  20. package/src/core/color/YCbCr/YCbCr.spec.js +16 -0
  21. package/src/core/color/{YCbCr_to_rgb_uint24.js → YCbCr/YCbCr_to_rgb_uint24.js} +6 -6
  22. package/src/core/color/YCbCr/rgb_to_YCbCr_uint24.js +16 -0
  23. package/src/core/color/{hex2rgb.js → hex/hex2rgb.js} +1 -1
  24. package/src/core/color/{rgb2hex.js → hex/rgb2hex.js} +1 -1
  25. package/src/core/color/{hsv2rgb.js → hsv/hsv2rgb.js} +3 -3
  26. package/src/core/color/hsv/rgb2hsv.js +49 -0
  27. package/src/core/color/{kelvin_to_rgb.js → kelvin/kelvin_to_rgb.js} +1 -1
  28. package/src/core/color/{kelvin_to_rgb.spec.js → kelvin/kelvin_to_rgb.spec.js} +2 -2
  29. package/src/core/color/{prototype_kelvin_to_rgb.js → kelvin/prototype_kelvin_to_rgb.js} +5 -5
  30. package/src/core/color/{rgb_to_kelvin.spec.js → kelvin/rgb_to_kelvin.spec.js} +1 -1
  31. package/src/core/color/{parseColor.js → parse_color.js} +4 -4
  32. package/src/core/color/parse_color.spec.js +18 -0
  33. package/src/core/color/rgb2uint24.js +3 -3
  34. package/src/core/color/sRGB/sRGB.spec.js +16 -0
  35. package/src/core/color/xyz/XYZ.spec.js +16 -0
  36. package/src/core/color/xyz/rgb_to_xyz.js +15 -0
  37. package/src/core/color/xyz/xyz_to_rgb.js +14 -0
  38. package/src/core/events/signal/Signal.js +5 -0
  39. package/src/core/events/signal/{signalAggregateByTimeWindow.js → signal_aggregate_by_time_window.js} +1 -1
  40. package/src/core/events/signal/{SignalUtils.js → signal_filter.js} +1 -2
  41. package/src/core/geom/2d/spline_bezier2_2d.js +26 -0
  42. package/src/core/geom/2d/spline_bezier2_2d.spec.js +16 -0
  43. package/src/core/geom/3d/SurfacePoint3.js +1 -1
  44. package/src/core/geom/3d/aabb/aabb3_compute_plane_side.js +1 -1
  45. package/src/core/geom/3d/aabb/aabb3_detailed_volume_intersection.js +1 -1
  46. package/src/core/geom/3d/aabb/aabb3_transformed_compute_plane_side.js +1 -1
  47. package/src/core/geom/3d/compute_circle_bounding_box.js +1 -1
  48. package/src/core/geom/3d/cone/computeConeBoundingBox.js +1 -1
  49. package/src/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +1 -1
  50. package/src/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +1 -1
  51. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.js +1 -1
  52. package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
  53. package/src/core/geom/3d/normal/spherical/sphere_map_transform.js +1 -1
  54. package/src/core/geom/3d/plane/is_point_within_planes.js +1 -1
  55. package/src/core/geom/3d/plane/lerp_planes_to_array.js +1 -1
  56. package/src/core/geom/3d/plane/plane3_compute_convex_3_plane_intersection.js +1 -1
  57. package/src/core/geom/3d/plane/plane3_compute_line_segment_intersection.js +1 -1
  58. package/src/core/geom/3d/plane/plane3_compute_ray_intersection.js +1 -1
  59. package/src/core/geom/3d/plane/plane3_lerp.js +2 -2
  60. package/src/core/geom/3d/plane/plane3_projectPoint.js +1 -1
  61. package/src/core/geom/3d/plane/plane3_slerp.js +3 -3
  62. package/src/core/geom/3d/ray/ray_computeNearestPointToPoint.js +1 -1
  63. package/src/core/geom/3d/ray/ray_distance_to_point.js +1 -1
  64. package/src/core/geom/3d/shape/UnionShape3D.js +3 -3
  65. package/src/core/geom/3d/shape/UnitCubeShape3D.js +1 -1
  66. package/src/core/geom/3d/shape/UnitSphereShape3D.js +1 -1
  67. package/src/core/geom/3d/sphere/sphere_intersects_ray.js +1 -1
  68. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +6 -0
  69. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.js +1 -1
  70. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +1 -1
  71. package/src/core/geom/3d/tetrahedra/compute_circumsphere.js +1 -1
  72. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +1 -0
  73. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +10 -2
  74. package/src/core/geom/3d/topology/bounds/computeTriangleClusterNormalBoundingCone.js +1 -1
  75. package/src/core/geom/3d/topology/samples/sampleFloodFill.js +1 -1
  76. package/src/core/geom/3d/topology/simplify/compute_face_normal_change_dot_product.js +1 -1
  77. package/src/core/geom/3d/topology/simplify/quadratic/Quadratic3.js +1 -1
  78. package/src/core/geom/3d/topology/simplify/tm_edge_collapse_is_degenerate_flip.js +2 -2
  79. package/src/core/geom/3d/topology/struct/TopoVertex.js +1 -1
  80. package/src/core/geom/3d/topology/util/compute_face_connection_weight.js +2 -2
  81. package/src/core/geom/3d/triangle/computeTrianglePlaneSide.js +1 -1
  82. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.js +1 -1
  83. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentricEdge.js +1 -1
  84. package/src/core/geom/3d/v3_compute_triangle_normal.js +1 -1
  85. package/src/core/geom/Quaternion.js +1 -1
  86. package/src/core/geom/Vector3.js +7 -7
  87. package/src/core/geom/Vector3.spec.js +68 -1
  88. package/src/core/geom/mat2/m2_add.js +17 -0
  89. package/src/core/geom/mat2/m2_determinant.js +8 -0
  90. package/src/core/geom/mat2/m2_multiply.js +17 -0
  91. package/src/core/geom/mat2/m2_multiply_scalar.js +18 -0
  92. package/src/core/geom/mat2/m2_multiply_transposed.js +18 -0
  93. package/src/core/geom/mat2/m2_sub_transposed.js +17 -0
  94. package/src/{view → core/geom/mat3}/m3_cm_compose_transform.js +0 -29
  95. package/src/core/geom/mat3/m3_cm_extract_rotation.js +8 -0
  96. package/src/core/geom/mat3/m3_cm_from_translation.js +19 -0
  97. package/src/{view/multiplyMatrices3.js → core/geom/mat3/m3_multiply.js} +2 -2
  98. package/src/{view → core/geom/mat3}/m3_rm_compose_transform.js +0 -9
  99. package/src/core/geom/mat3/m3_rm_extract_scale.js +7 -0
  100. package/src/core/geom/{3d/vector/allocate_v3.js → vec3/v3_allocate.js} +1 -1
  101. package/src/core/geom/{v3_angle_between.js → vec3/v3_angle_between.js} +1 -1
  102. package/src/core/geom/vec3/v3_dot_array_array.js +20 -0
  103. package/src/core/geom/{v3_lerp.js → vec3/v3_lerp.js} +1 -1
  104. package/src/core/graph/SquareMatrix.js +26 -3
  105. package/src/core/graph/SquareMatrix.spec.js +52 -2
  106. package/src/core/math/clamp01.js +1 -0
  107. package/src/core/math/fract.js +3 -1
  108. package/src/core/math/inverseLerp.js +7 -5
  109. package/src/core/math/lerp.js +5 -5
  110. package/src/core/math/physics/spring/computeHookeForce.js +9 -0
  111. package/src/core/math/remap.js +19 -0
  112. package/src/core/math/remap.spec.js +15 -0
  113. package/src/core/math/smoothStep.spec.js +16 -0
  114. package/src/core/math/spline/spline_bezier2.js +13 -0
  115. package/src/core/math/spline/spline_bezier2.spec.js +13 -0
  116. package/src/core/model/object/compareValues.js +2 -2
  117. package/src/core/model/object/read_property.js +10 -2
  118. package/src/core/model/object/write_property.js +3 -23
  119. package/src/core/model/object/write_property.spec.js +26 -0
  120. package/src/core/primitives/numbers/number_pretty_print.spec.js +19 -0
  121. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
  122. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
  123. package/src/engine/ecs/systems/SteeringSystem.js +1 -1
  124. package/src/engine/ecs/terrain/ecs/splat/SplatMapOptimizerDebugger.js +1 -1
  125. package/src/engine/graphics/ecs/camera/Camera.js +1 -1
  126. package/src/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
  127. package/src/engine/graphics/ecs/decal/v2/FPDecalSystem.js +3 -11
  128. package/src/engine/graphics/ecs/highlight/Highlight.js +20 -102
  129. package/src/engine/graphics/ecs/mesh/Mesh.js +12 -18
  130. package/src/engine/graphics/ecs/mesh/MeshSystem.js +41 -26
  131. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +1 -1
  132. package/src/engine/graphics/ecs/path/tube/build/TubePathBuilder.js +1 -1
  133. package/src/engine/graphics/ecs/path/tube/build/makeTubeGeometry.js +1 -1
  134. package/src/engine/graphics/ecs/path/tube/build/make_cap.js +3 -3
  135. package/src/engine/graphics/ecs/path/tube/build/make_ring_vertices.js +1 -1
  136. package/src/engine/graphics/geometry/MikkT/InitTriInfo.js +5 -6
  137. package/src/engine/graphics/geometry/MikkT/MikkTSpace.js +3 -3
  138. package/src/engine/graphics/geometry/MikkT/NormalizeSafe.js +1 -2
  139. package/src/engine/graphics/geometry/MikkT/STSpace.js +3 -3
  140. package/src/engine/graphics/geometry/MikkT/v3_scale_dot_sub_normalize.js +2 -2
  141. package/src/engine/graphics/geometry/bvh/buffered/BVHGeometryRaycaster.js +1 -1
  142. package/src/engine/graphics/geometry/clipping/ClippedGeometry.js +1 -1
  143. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +102 -95
  144. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +25 -0
  145. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -35
  146. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +39 -2
  147. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +22 -6
  148. package/src/engine/graphics/render/forward_plus/LightManager.js +1 -1
  149. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +2 -2
  150. package/src/engine/graphics/render/forward_plus/prototype/prototypeLightManager.js +3 -3
  151. package/src/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +1 -1
  152. package/src/engine/graphics/render/layers/RenderLayerUtils.js +1 -1
  153. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +3 -2
  154. package/src/engine/graphics/sh3/LightProbeVolume.js +1 -1
  155. package/src/engine/graphics/sh3/path_tracer/PathTracer.js +2 -2
  156. package/src/engine/graphics/sh3/path_tracer/prototypePathTracer.js +2 -2
  157. package/src/engine/graphics/sh3/path_tracer/random_in_hemisphere.js +1 -1
  158. package/src/engine/graphics/sh3/path_tracer/ray_hit_apply_transform.js +1 -1
  159. package/src/engine/graphics/sh3/path_tracer/ray_reflect.js +1 -1
  160. package/src/engine/graphics/sh3/sky/hosek/data.js +3744 -0
  161. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +10 -3786
  162. package/src/engine/graphics/texture/atlas/AbstractTextureAtlas.js +1 -1
  163. package/src/engine/graphics/texture/atlas/AtlasPatch.js +0 -1
  164. package/src/engine/graphics/texture/atlas/AtlasPatchFlag.js +8 -1
  165. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +25 -0
  166. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +54 -0
  167. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +101 -160
  168. package/src/engine/graphics/texture/atlas/TextureAtlas.js +18 -1
  169. package/src/engine/graphics/texture/sampler/sampler2d_ensure_uint8_RGBA.js +22 -0
  170. package/src/engine/graphics/util/projectSphere.js +1 -1
  171. package/src/engine/navigation/ecs/components/Path.js +1 -1
  172. package/src/engine/physics/mls-mpm/MLS_MPM.js +11 -106
  173. package/src/engine/reference/v2/Reference.js +6 -2
  174. package/src/engine/sound/ecs/emitter/SoundEmitter.js +7 -7
  175. package/src/engine/sound/ecs/emitter/SoundTrack.js +6 -6
  176. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +1 -1
  177. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +2 -4
  178. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +2 -2
  179. package/src/generation/theme/ThemeEngine.js +2 -2
  180. package/src/generation/theme/ThemeEngine.spec.js +7 -0
  181. package/src/view/View.js +21 -13
  182. package/src/view/elements/ColorPickerView.js +2 -2
  183. package/src/view/minimap/gl/MarkerGL.js +20 -18
  184. package/src/view/minimap/gl/MinimapMarkersGL.js +2 -1
  185. package/editor/tools/FoliagePaintTool.js +0 -168
  186. package/editor/tools/engine/ToolStateMachine.js +0 -53
  187. package/src/core/NumberFormat.js +0 -4
  188. package/src/core/color/rgb2hsv.js +0 -47
  189. package/src/core/color/rgb_to_YCbCr_uint24.js +0 -16
  190. package/src/core/fsm/StateMachine.js +0 -440
  191. package/src/core/fsm/Transition.js +0 -65
  192. package/src/core/geom/Bezier.js +0 -24
  193. package/src/core/geom/Bezier.spec.js +0 -16
  194. package/src/core/math/spline/quadraticCurve.js +0 -11
  195. package/src/core/math/spline/quadraticCurve.spec.js +0 -13
  196. package/src/core/primitives/numbers/compareNumbers.js +0 -9
  197. package/src/engine/graphics/ecs/decal/Decal.js +0 -10
  198. package/src/engine/graphics/ecs/decal/DecalSystem.js +0 -99
  199. package/src/engine/graphics/ecs/decal/threejs/DecalGeometry.js +0 -298
  200. package/src/engine/graphics/ecs/trail/Trail.js +0 -83
  201. package/src/engine/graphics/ecs/trail/TrailMaterial.js +0 -67
  202. package/src/engine/graphics/ecs/trail/TrailMaterial2.js +0 -73
  203. package/src/engine/graphics/ecs/trail/TrailSystem.js +0 -162
  204. package/src/engine/graphics/ecs/water2/NodeWaterShader1.js +0 -213
  205. package/src/engine/graphics/ecs/water2/shader/JBWaterShader.js +0 -315
  206. package/src/engine/graphics/geometry/MikkT/Length.js +0 -10
  207. package/src/engine/graphics/texture/ImageLoader.js +0 -33
  208. package/src/engine/graphics/three/DDSLoader.js +0 -286
  209. package/src/engine/graphics/three/Water2.js +0 -343
  210. package/src/engine/physics/spring/computeHookeForce.js +0 -9
  211. package/src/engine/reference/v1/ReferenceManager.js +0 -124
  212. /package/src/core/color/{hex2rgb.spec.js → hex/hex2rgb.spec.js} +0 -0
  213. /package/src/core/color/{rgb2hex.spec.js → hex/rgb2hex.spec.js} +0 -0
  214. /package/src/core/color/{hsv2rgb.spec.js → hsv/hsv2rgb.spec.js} +0 -0
  215. /package/src/core/color/{rgb_to_kelvin.js → kelvin/rgb_to_kelvin.js} +0 -0
  216. /package/src/core/color/{linear_to_sRGB.js → sRGB/linear_to_sRGB.js} +0 -0
  217. /package/src/core/color/{sRGB_to_linear.js → sRGB/sRGB_to_linear.js} +0 -0
  218. /package/src/core/geom/{m3_determinant.js → mat3/m3_determinant.js} +0 -0
  219. /package/src/core/geom/{v3_distance.js → vec3/v3_distance.js} +0 -0
  220. /package/src/core/geom/{v3_distance_above_plane.js → vec3/v3_distance_above_plane.js} +0 -0
  221. /package/src/core/geom/{v3_distance_above_plane.spec.js → vec3/v3_distance_above_plane.spec.js} +0 -0
  222. /package/src/core/geom/{v3_distance_sqr.d.ts → vec3/v3_distance_sqr.d.ts} +0 -0
  223. /package/src/core/geom/{v3_distance_sqr.js → vec3/v3_distance_sqr.js} +0 -0
  224. /package/src/core/geom/{v3_dot.js → vec3/v3_dot.js} +0 -0
  225. /package/src/core/geom/{v3_length.js → vec3/v3_length.js} +0 -0
  226. /package/src/core/geom/{v3_length_sqr.js → vec3/v3_length_sqr.js} +0 -0
  227. /package/src/core/geom/{v3_slerp.js → vec3/v3_slerp.js} +0 -0
@@ -1,440 +0,0 @@
1
- /**
2
- * Created by Alex on 01/09/2014.
3
- */
4
-
5
-
6
- import { assert } from "../assert.js";
7
- import { dispatchViaProxy } from "../events/signal/Signal.js";
8
- import Graph from "../graph/Graph.js";
9
- import Future from "../process/Future.js";
10
- import Transition from "./Transition.js";
11
-
12
- /**
13
- *
14
- * @enum {number}
15
- */
16
- export const StateMachineEventType = {
17
- StateEntered: 0,
18
- StateExited: 1
19
- };
20
-
21
- /**
22
- * @template {T}
23
- * @constructor
24
- */
25
- function StateMachine() {
26
- this.graph = new Graph();
27
- this.state = null;
28
- this.isLocked = false;
29
-
30
- /**
31
- *
32
- * @type {Map<any, Array>}
33
- */
34
- this.stateProcessorMap = new Map();
35
-
36
- this.stateEntryHandlers = new Map();
37
- this.stateExitHandlers = new Map();
38
-
39
- /**
40
- * Used for debug mainly
41
- * @type {Array<T>}
42
- * @private
43
- */
44
- this.__history = [];
45
- }
46
-
47
- /**
48
- *
49
- * @param {T} source
50
- * @param {T} target
51
- * @param {Transition~action} action
52
- * @param {Transition~condition} [condition]
53
- * @returns {Transition}
54
- */
55
- StateMachine.prototype.createTransition = function (source, target, action, condition) {
56
- const transition = new Transition(source, target, action, condition);
57
- this.addTransition(transition);
58
- return transition;
59
- };
60
-
61
- /**
62
- *
63
- * @param {T} state
64
- * @param {StateMachineEventType} type
65
- * @param {function} handler
66
- */
67
- StateMachine.prototype.addEventHandler = function (state, type, handler) {
68
- let eventMap;
69
-
70
- if (type === StateMachineEventType.StateEntered) {
71
- eventMap = this.stateEntryHandlers;
72
- } else if (type === StateMachineEventType.StateExited) {
73
- eventMap = this.stateExitHandlers;
74
- } else {
75
- throw new Error(`Unknown event type '${type}'`);
76
- }
77
-
78
- const handlers = eventMap.get(state);
79
- if (handlers === undefined) {
80
- eventMap.set(state, [handler]);
81
- } else {
82
- handlers.push(handler);
83
- }
84
- };
85
-
86
- /**
87
- *
88
- * @param {T} state
89
- * @param {StateMachineEventType} type
90
- * @param {function} handler
91
- */
92
- StateMachine.prototype.removeEventHandler = function (state, type, handler) {
93
- let eventMap;
94
-
95
- if (type === StateMachineEventType.StateEntered) {
96
- eventMap = this.stateEntryHandlers;
97
- } else if (type === StateMachineEventType.StateExited) {
98
- eventMap = this.stateExitHandlers;
99
- } else {
100
- throw new Error(`Unknown event type '${type}'`);
101
- }
102
-
103
-
104
- const handlers = eventMap.get(state);
105
- if (handlers === undefined) {
106
- //no handlers, clearly handler was not registered
107
- console.warn('No listeners registered');
108
- } else {
109
- const i = handlers.indexOf(handler);
110
-
111
- if (i === -1) {
112
- console.warn('Listener not found');
113
- return;
114
- }
115
-
116
- handlers.splice(i, 1);
117
- }
118
- };
119
-
120
- /**
121
- *
122
- * @param {Transition} t
123
- */
124
- StateMachine.prototype.addTransition = function (t) {
125
- this.graph.addEdge(t);
126
- };
127
-
128
- /**
129
- *
130
- * @param {T} s
131
- */
132
- StateMachine.prototype.addState = function (s) {
133
- this.graph.addNode(s);
134
- };
135
-
136
- /**
137
- *
138
- * @param {T} state
139
- * @param {function():Promise<T>} processor
140
- */
141
- StateMachine.prototype.addStateProcessor = function (state, processor) {
142
- assert.notEqual(state, undefined, 'state was undefined');
143
- assert.equal(typeof processor, 'function', `processor must be a function, instead was '${typeof processor}'`)
144
-
145
- if (!this.graph.containsNode(state)) {
146
- throw new Error(`State ${state} is not found in the graph`);
147
- }
148
-
149
- const processors = this.stateProcessorMap.get(state);
150
-
151
- if (processors === undefined) {
152
- this.stateProcessorMap.set(state, [processor]);
153
- } else {
154
- processors.push(state);
155
- }
156
- };
157
-
158
- /**
159
- *
160
- * @param {Array.<*>} states
161
- */
162
- StateMachine.prototype.addAllStates = function (states) {
163
- let i = 0;
164
- const l = states.length;
165
- for (; i < l; i++) {
166
- this.addState(states[i]);
167
- }
168
- };
169
-
170
-
171
- /**
172
- *
173
- * @param {T} s
174
- */
175
- StateMachine.prototype.setState = function (s) {
176
- // console.warn('setState', s);
177
-
178
- const oldState = this.state;
179
-
180
- this.state = s;
181
-
182
- const exitHandlers = this.stateExitHandlers.get(oldState);
183
-
184
- if (exitHandlers !== undefined) {
185
- dispatchViaProxy(exitHandlers, [oldState, s]);
186
- }
187
-
188
- const entryHandlers = this.stateEntryHandlers.get(s);
189
-
190
- if (entryHandlers !== undefined) {
191
- dispatchViaProxy(entryHandlers, [s, oldState]);
192
- }
193
-
194
- this.__history.push(s);
195
- };
196
-
197
- /**
198
- *
199
- * @returns {T}
200
- */
201
- StateMachine.prototype.getState = function () {
202
- return this.state;
203
- };
204
-
205
- /**
206
- * Causes the state machine to enter a given state
207
- * @param {T} s
208
- */
209
- StateMachine.prototype.enterState = function (s) {
210
- if (this.isLocked) {
211
- throw new Error(`State Machine is locked, unable to set state from '${this.state}' to '${s}'`);
212
- }
213
-
214
- this.setState(s);
215
-
216
- //try all state processors in turn until all have been tried and failed or one has succeeded
217
- const processors = this.stateProcessorMap.get(s);
218
-
219
- const self = this;
220
-
221
-
222
- function executeStateProcessors(sm, processors) {
223
-
224
- let i = 0;
225
- const numProcessors = processors.length;
226
-
227
- function lockSM() {
228
- sm.isLocked = true;
229
- }
230
-
231
- function unlockSM() {
232
- sm.isLocked = false;
233
- }
234
-
235
- function executeNext() {
236
-
237
- const processor = processors[i];
238
-
239
- i++;
240
-
241
- let pendingProcess;
242
-
243
- try {
244
- pendingProcess = processor();
245
- } catch (e) {
246
- console.warn('Exception in state processor function, treating as failure and continuing.', e);
247
- handleTaskFailure();
248
- return;
249
- }
250
-
251
- assert.ok((pendingProcess instanceof Promise || pendingProcess instanceof Future), `processor must return a promise or a future, instead returned something else (${pendingProcess})`);
252
-
253
- self.__pendingProcess = pendingProcess;
254
-
255
- pendingProcess.then(handleTaskCompletion, handleTaskFailure);
256
- }
257
-
258
- function handleTaskCompletion(newState) {
259
- if (!self.graph.containsNode(newState)) {
260
- //produced state is not contained in the graph, treat as failure
261
- console.error(`Processor produced state that is not present in the graph, treating as failure.`);
262
-
263
- handleTaskFailure();
264
- } else {
265
- let foundTraversableEdge = false;
266
-
267
- self.graph.findTraversableEdges(s, newState, function (edge) {
268
- foundTraversableEdge = true;
269
- });
270
-
271
- if (!foundTraversableEdge) {
272
- console.error(`Processor requests an illegal move from state '${s}' to '${newState}', no valid transition exists. Treating as failure`);
273
- handleTaskFailure();
274
- } else {
275
- //unlock
276
- unlockSM();
277
- //transition
278
- self.enterState(newState);
279
- }
280
- }
281
- }
282
-
283
- function handleTaskFailure() {
284
- if (i === numProcessors) {
285
- //we're done
286
- unlockSM();
287
- } else {
288
- executeNext();
289
- }
290
- }
291
-
292
- lockSM();
293
-
294
- executeNext();
295
- }
296
-
297
- if (processors === undefined || processors.length === 0) {
298
- //no state processors
299
- } else {
300
- executeStateProcessors(this, processors);
301
- }
302
- };
303
-
304
- StateMachine.prototype.canTransitionTo = function (nextState) {
305
- const source = this.state;
306
- let result = false;
307
- this.traverseValidTransitions(function (node, edge) {
308
- if (node === nextState && edge.condition(source, node)) {
309
- result = true;
310
- //stop traversal
311
- return false;
312
- }
313
- });
314
- return result;
315
- };
316
-
317
- /**
318
- *
319
- * @param {Graph~visitor} visitor
320
- */
321
- StateMachine.prototype.traverseValidTransitions = function (visitor) {
322
- const source = this.state;
323
- this.graph.traverseSuccessors(source, function (node, edge) {
324
- if (edge.condition(source, node)) {
325
- return visitor(node, edge);
326
- }
327
- });
328
- };
329
-
330
-
331
- /**
332
- *
333
- * @param {Transition} transition
334
- * @param {T} targetState
335
- * @returns {Promise}
336
- */
337
- StateMachine.prototype.transitionOn = function (transition, targetState) {
338
- assert.equal(transition.second, targetState, `transition destination is not equal to targetState`);
339
-
340
- const sm = this;
341
- return new Promise(function (resolve, reject) {
342
- if (transition === null) {
343
- //no transition was found
344
- reject("no transition found");
345
- }
346
- //check lock on state machine
347
- if (sm.isLocked) {
348
- reject("state machine is locked, can not execute transition");
349
- }
350
-
351
- const stateFrom = sm.state;
352
-
353
- //lock state machine
354
- sm.isLocked = true;
355
-
356
- let promise;
357
-
358
- try {
359
- promise = transition.action(stateFrom, targetState);
360
- } catch (e) {
361
- //failed to perform transition
362
- promise = Promise.reject(e);
363
- }
364
-
365
- function handleTransitionSuccess() {
366
- sm.isLocked = false;
367
- sm.enterState(targetState);
368
- resolve();
369
- }
370
-
371
- function handleTransitionFailed(e) {
372
- sm.isLocked = false;
373
- reject(e);
374
- }
375
-
376
- promise.then(handleTransitionSuccess, handleTransitionFailed);
377
- });
378
- };
379
-
380
- /**
381
- *
382
- * @param {T} nextState Adjacent state
383
- * @returns {Promise}
384
- */
385
- StateMachine.prototype.transitionTo = function (nextState) {
386
- const sm = this;
387
- const state = sm.state;
388
-
389
- return new Promise(function (resolve, reject) {
390
- if (state === nextState) {
391
- //already there
392
- resolve();
393
- }
394
- let transition = null;
395
-
396
- sm.traverseValidTransitions(function (target, t) {
397
- if (t.second !== nextState) {
398
- //wrong target
399
- return;
400
- }
401
-
402
- transition = t;
403
- //stop traversal
404
- return false;
405
- });
406
-
407
- sm.transitionOn(transition, nextState).then(resolve, reject);
408
- });
409
- };
410
-
411
- /**
412
- *
413
- * @param {*} targetState
414
- * @returns {Promise}
415
- */
416
- StateMachine.prototype.navigateTo = function (targetState) {
417
- //find path
418
- const graph = this.graph;
419
-
420
- const start = this.state;
421
-
422
- const path = graph.findPath(start, targetState);
423
-
424
- if (path === null) {
425
- return Promise.reject(`no path found from ${start} to '${targetState}'`);
426
- }
427
-
428
- let result = Promise.resolve();
429
-
430
- let i = 1;
431
- const l = path.length;
432
- for (; i < l; i++) {
433
- const next = path[i];
434
- result = result.then(this.transitionTo(next));
435
- }
436
-
437
- return result;
438
- };
439
-
440
- export { StateMachine };
@@ -1,65 +0,0 @@
1
- /**
2
- * Created by Alex on 24/03/2016.
3
- */
4
-
5
-
6
- import { Edge, EdgeDirectionType } from "../graph/Edge.js";
7
-
8
- const TransitionExecutionMode = {
9
- Synchronous: 0,
10
- Asynchronous: 1
11
- };
12
-
13
- /**
14
- * @callback Transition~action
15
- * @param {*} source Node of transition origin
16
- * @param {*} target Node of destination
17
- * @returns {Promise} Promise is evaluated to perform transition, and transition is not finished until promise is resolved
18
- */
19
-
20
- /**
21
- * @callback Transition~condition
22
- * @param {*} source
23
- * @param {*} target
24
- * @returns {boolean} judgement on validity of transition from source to target
25
- */
26
-
27
- /**
28
- *
29
- * @param {*} source
30
- * @param {*} target
31
- * @returns {boolean}
32
- */
33
- function fTrue(source, target) {
34
- return true;
35
- }
36
-
37
- class Transition extends Edge {
38
- /**
39
- *
40
- * @param {*} source
41
- * @param {*} target
42
- * @param {Transition~action} action
43
- * @param {Transition~condition} condition
44
- * @constructor
45
- * @extends Edge
46
- */
47
- constructor(source, target, action, condition) {
48
- super(source, target);
49
- //make it a directed edge
50
- this.direction = EdgeDirectionType.Forward;
51
-
52
- this.action = action;
53
- this.condition = (typeof condition === "function") ? condition : fTrue;
54
- }
55
-
56
- /**
57
- * @inheritDoc Transition~action
58
- */
59
- static EmptyAction(source, target) {
60
- return Promise.resolve();
61
- }
62
- }
63
-
64
-
65
- export default Transition;
@@ -1,24 +0,0 @@
1
- /**
2
- *
3
- * @param {Vector2} result
4
- * @param {number} p0x
5
- * @param {number} p0y
6
- * @param {number} p1x
7
- * @param {number} p1y
8
- * @param {number} p2x
9
- * @param {number} p2y
10
- * @param {number} t
11
- */
12
- export function computeQuadraticBezier2D(result, p0x, p0y, p1x, p1y, p2x, p2y, t) {
13
- const minus = 1 - t;
14
- const minus2 = minus * minus;
15
-
16
- const f = minus * 2 * t;
17
- const t2 = t * t;
18
-
19
-
20
- const x0 = p0x * minus2 + p1x * f + p2x * t2;
21
- const y0 = p0y * minus2 + p1y * f + p2y * t2;
22
-
23
- result.set(x0, y0);
24
- }
@@ -1,16 +0,0 @@
1
- import { computeQuadraticBezier2D } from "./Bezier.js";
2
- import Vector2 from "./Vector2.js";
3
-
4
- test("computeQuadraticBezier2D hits knots",()=>{
5
- const v2 = new Vector2();
6
-
7
- computeQuadraticBezier2D(v2,1,3,5,7,11,13,0);
8
-
9
- expect(v2.x).toBeCloseTo(1);
10
- expect(v2.y).toBeCloseTo(3);
11
-
12
- computeQuadraticBezier2D(v2,1,3,5,7,11,13,1);
13
-
14
- expect(v2.x).toBeCloseTo(11);
15
- expect(v2.y).toBeCloseTo(13);
16
- });
@@ -1,11 +0,0 @@
1
- /**
2
- *
3
- * @param {Number} t
4
- * @param {Number} p0
5
- * @param {Number} p1
6
- * @param {Number} p2
7
- * @return {number}
8
- */
9
- export function quadraticCurve(t, p0, p1, p2) {
10
- return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2;
11
- }
@@ -1,13 +0,0 @@
1
- import { quadraticCurve } from "./quadraticCurve.js";
2
-
3
- test("quadraticCurve", () => {
4
- expect(quadraticCurve(2, 0.1, 0.2, 3)).toBe(11.3);
5
-
6
- expect(quadraticCurve(1, -1, -2, -3)).toBe(-3);
7
-
8
- expect(quadraticCurve(-1, -1, 0, 0)).toBe(-4);
9
-
10
- expect(quadraticCurve(-1, -1, 1, 0)).toBe(-8);
11
-
12
- expect(quadraticCurve(-1, 0, 0, 0)).toBe(0);
13
- });
@@ -1,9 +0,0 @@
1
- import { number_compare_ascending } from "./number_compare_ascending.js";
2
-
3
- /**
4
- * @deprecated use {@link number_compare_ascending} directly
5
- * @param {number} a
6
- * @param {number} b
7
- * @returns {number}
8
- */
9
- export const compareNumbers = number_compare_ascending;
@@ -1,10 +0,0 @@
1
- /**
2
- * Created by Alex on 16/09/2015.
3
- */
4
- const Decal = function (options) {
5
- this.target = options.target;
6
- this.size = options.size;
7
- this.material = options.material;
8
- };
9
-
10
- export default Decal;
@@ -1,99 +0,0 @@
1
- /**
2
- * Created by Alex on 16/09/2015.
3
- */
4
- import { System } from '../../../ecs/System.js';
5
- import { Euler as ThreeEuler, MaterialLoader, Mesh as ThreeMesh, Vector3 as ThreeVector3 } from 'three';
6
- import { Transform } from '../../../ecs/transform/Transform.js';
7
- import Mesh from '../mesh/Mesh.js';
8
- import Renderable from '../../../ecs/renderable/Renderable.js';
9
- import LoadMaterial from "../../material/LoadMaterial.js";
10
-
11
- import Decal from "./Decal.js";
12
- import DecalGeometry from "./threejs/DecalGeometry.js";
13
- import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
14
-
15
- const MaterialCache = function () {
16
- this.materialLoader = new MaterialLoader();
17
- this.table = {};
18
- };
19
-
20
- MaterialCache.prototype.get = function (json) {
21
- const str = JSON.stringify(json);
22
- const hash = computeStringHash(str);
23
- if (this.table.hasOwnProperty(hash)) {
24
- return this.table[hash];
25
- } else {
26
- const options = Object.assign({ assetManager }, json);
27
-
28
- const material = LoadMaterial(options);
29
- material.depthTest = true;
30
- material.depthWrite = false;
31
- material.polygonOffset = true;
32
- material.polygonOffsetFactor = -4;
33
- this.table[hash] = material;
34
- return material;
35
- }
36
- };
37
-
38
- class DecalSystem extends System {
39
- /**
40
- *
41
- * @param scene
42
- * @param {AssetManager} assetManager
43
- */
44
- constructor(scene, assetManager) {
45
- super();
46
- this.scene = scene;
47
- this.assetManager = assetManager;
48
-
49
- this.dependencies = [Decal];
50
-
51
- this.materialCache = new MaterialCache();
52
- }
53
-
54
- remove(component, entity) {
55
- this.scene.remove(component.mesh);
56
- }
57
-
58
- add(component, entity) {
59
- const meshes = [];
60
-
61
- const targetModel = this.entityManager.getComponent(component.target, Mesh);
62
- const targetRenderable = this.entityManager.getComponent(component.target, Renderable);
63
-
64
- if (targetModel !== null) {
65
- //TODO implement
66
- }
67
-
68
- if (targetRenderable !== null) {
69
- processObjectTHREE(targetRenderable.mesh, meshes);
70
- }
71
-
72
- const transform = this.entityManager.getComponent(entity, Transform);
73
-
74
- const material = this.materialCache.get(component.material);
75
-
76
- const r = new ThreeEuler();
77
- r.setFromQuaternion(transform.rotation);
78
- const size = new ThreeVector3(component.size, component.size, component.size);
79
- const check = new ThreeVector3(1, 1, 1);
80
- const geometry = new DecalGeometry(meshes, transform.position, r, size, check);
81
- const mesh = component.mesh = new ThreeMesh(geometry, material);
82
- this.scene.add(mesh);
83
- }
84
- }
85
-
86
-
87
- function processObjectTHREE(object, meshes) {
88
- if (object.hasOwnProperty("geometry")) {
89
- meshes.push(object);
90
- }
91
- let i = 0;
92
- const l = object.children.length;
93
- for (; i < l; i++) {
94
- const c = object.children[i];
95
- processObjectTHREE(c, meshes);
96
- }
97
- }
98
-
99
- export default DecalSystem;