@woosh/meep-engine 2.110.13 → 2.110.15

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 (439) hide show
  1. package/package.json +4 -3
  2. package/src/engine/graphics/camera/CameraShake.d.ts +6 -6
  3. package/src/engine/graphics/camera/CameraShake.d.ts.map +1 -1
  4. package/src/engine/graphics/camera/CameraShake.js +13 -13
  5. package/src/engine/graphics/ecs/water2/shader/testWaterShader.js +4 -4
  6. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +0 -30
  7. package/src/core/IdPool.spec.js +0 -29
  8. package/src/core/UUID.spec.js +0 -8
  9. package/src/core/binary/32BitEncoder.spec.js +0 -11
  10. package/src/core/binary/Base64.spec.js +0 -14
  11. package/src/core/binary/BinaryBuffer.spec.js +0 -324
  12. package/src/core/binary/BitSet.spec.js +0 -468
  13. package/src/core/binary/EncodingBinaryBuffer.spec.js +0 -16
  14. package/src/core/binary/align_32.spec.js +0 -11
  15. package/src/core/binary/align_4.spec.js +0 -20
  16. package/src/core/binary/data_view/DataViewStructAccessor.spec.js +0 -20
  17. package/src/core/binary/de_interleave_2_bits.spec.js +0 -21
  18. package/src/core/binary/dec2hex.spec.js +0 -13
  19. package/src/core/binary/hex2dec.spec.js +0 -22
  20. package/src/core/binary/int32_to_binary_string.spec.js +0 -9
  21. package/src/core/binary/operations/bitCount.spec.js +0 -19
  22. package/src/core/binary/operations/ceilPowerOfTwo.spec.js +0 -17
  23. package/src/core/binary/reverse_bits_uint32.spec.js +0 -18
  24. package/src/core/binary/split_by_2.spec.js +0 -22
  25. package/src/core/binary/split_by_3.spec.js +0 -22
  26. package/src/core/binary/uint8_to_float.spec.js +0 -7
  27. package/src/core/bvh2/binary/2/BinaryUint32BVH.spec.js +0 -136
  28. package/src/core/bvh2/bvh3/BVH.spec.js +0 -361
  29. package/src/core/bvh2/bvh3/BvhClient.spec.js +0 -51
  30. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.spec.js +0 -60
  31. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.spec.js +0 -22
  32. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.spec.js +0 -64
  33. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.spec.js +0 -29
  34. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point.spec.js +0 -209
  35. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.spec.js +0 -41
  36. package/src/core/cache/Cache.spec.js +0 -277
  37. package/src/core/cache/FrequencySketch.spec.js +0 -5
  38. package/src/core/cache/LoadingCache.spec.js +0 -120
  39. package/src/core/codegen/LineBuilder.spec.js +0 -41
  40. package/src/core/collection/CuckooFilter.spec.js +0 -111
  41. package/src/core/collection/RingBuffer.spec.js +0 -59
  42. package/src/core/collection/Stack.spec.js +0 -63
  43. package/src/core/collection/array/arrayPickBestElement.spec.js +0 -7
  44. package/src/core/collection/array/arraySetSortingDiff.spec.js +0 -74
  45. package/src/core/collection/array/array_contains_duplicates.spec.js +0 -14
  46. package/src/core/collection/array/array_copy.spec.js +0 -19
  47. package/src/core/collection/array/array_deduplicate.spec.js +0 -11
  48. package/src/core/collection/array/array_get_index_in_range.spec.js +0 -16
  49. package/src/core/collection/array/array_remove_first.spec.js +0 -39
  50. package/src/core/collection/array/array_shuffle.spec.js +0 -27
  51. package/src/core/collection/array/binarySearchHighIndex.spec.js +0 -51
  52. package/src/core/collection/array/isArrayEqual.spec.js +0 -25
  53. package/src/core/collection/array/typed/is_typed_array_equals.spec.js +0 -71
  54. package/src/core/collection/array/weightedRandomFromArray.spec.js +0 -22
  55. package/src/core/collection/heap/BinaryHeap.spec.js +0 -137
  56. package/src/core/collection/heap/Uint32Heap.spec.js +0 -172
  57. package/src/core/collection/list/List.spec.js +0 -438
  58. package/src/core/collection/list/ListForwarder.spec.js +0 -101
  59. package/src/core/collection/map/HashMap.spec.js +0 -291
  60. package/src/core/collection/queue/Deque.spec.js +0 -276
  61. package/src/core/collection/set/HashSet.spec.js +0 -39
  62. package/src/core/collection/set/compute_set_difference.spec.js +0 -45
  63. package/src/core/collection/set/compute_set_intersection.spec.js +0 -45
  64. package/src/core/collection/table/RowFirstTable.spec.js +0 -323
  65. package/src/core/collection/table/RowFirstTableSpec.spec.js +0 -49
  66. package/src/core/collection/table/bind/TableRecord.spec.js +0 -27
  67. package/src/core/color/Color.spec.js +0 -174
  68. package/src/core/color/YCbCr/YCbCr.spec.js +0 -16
  69. package/src/core/color/hex/hex2rgb.spec.js +0 -10
  70. package/src/core/color/hex/rgb2hex.spec.js +0 -13
  71. package/src/core/color/hsv/hsv2rgb.spec.js +0 -43
  72. package/src/core/color/kelvin/kelvin_to_rgb.spec.js +0 -61
  73. package/src/core/color/kelvin/rgb_to_kelvin.spec.js +0 -15
  74. package/src/core/color/oklab/Okhsv.spec.js +0 -17
  75. package/src/core/color/oklab/XYZ.spec.js +0 -17
  76. package/src/core/color/oklab/oklab_to_xyz.spec.js +0 -31
  77. package/src/core/color/oklab/xyz_to_oklab.spec.js +0 -31
  78. package/src/core/color/parse_color.spec.js +0 -18
  79. package/src/core/color/sRGB/sRGB.spec.js +0 -16
  80. package/src/core/color/xyz/XYZ.spec.js +0 -16
  81. package/src/core/events/signal/Signal.spec.js +0 -253
  82. package/src/core/events/signal/SignalBinding.spec.js +0 -58
  83. package/src/core/fsm/simple/SimpleStateMachine.spec.js +0 -107
  84. package/src/core/fsm/simple/SimpleStateMachineDescription.spec.js +0 -103
  85. package/src/core/function/extractFunctionBody.spec.js +0 -15
  86. package/src/core/geom/2d/Rectangle.spec.js +0 -62
  87. package/src/core/geom/2d/aabb/AABB2.spec.js +0 -153
  88. package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.spec.js +0 -11
  89. package/src/core/geom/2d/aabb/aabb2_compute_overlap.spec.js +0 -56
  90. package/src/core/geom/2d/aabb/aabb2_contains.spec.js +0 -40
  91. package/src/core/geom/2d/aabb/aabb2_distance_to_point.spec.js +0 -17
  92. package/src/core/geom/2d/aabb/aabb2_intersects_ray.spec.js +0 -28
  93. package/src/core/geom/2d/aabb/aabb2_signed_distance_sqr_to_point.spec.js +0 -40
  94. package/src/core/geom/2d/bvh/BVH2D.spec.js +0 -359
  95. package/src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.js +0 -89
  96. package/src/core/geom/2d/circle/circle_compute_circle_intersection.spec.js +0 -79
  97. package/src/core/geom/2d/compute_polygon_area_2d.spec.js +0 -10
  98. package/src/core/geom/2d/compute_triangle_area_2d.spec.js +0 -9
  99. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.spec.js +0 -33
  100. package/src/core/geom/2d/convex-hull/convex_hull_monotone_2d.spec.js +0 -33
  101. package/src/core/geom/2d/hash-grid/SpatialHashGrid.spec.js +0 -254
  102. package/src/core/geom/2d/hash-grid/shg_query_elements_circle.spec.js +0 -85
  103. package/src/core/geom/2d/hash-grid/shg_query_elements_line.spec.js +0 -102
  104. package/src/core/geom/2d/quad-tree/QuadTreeNode.spec.js +0 -235
  105. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.spec.js +0 -86
  106. package/src/core/geom/2d/quad-tree-binary/QuadTree.spec.js +0 -53
  107. package/src/core/geom/2d/r-tree/StaticR2Tree.spec.js +0 -62
  108. package/src/core/geom/2d/spline_bezier2_2d.spec.js +0 -16
  109. package/src/core/geom/2d/uv_map_circle_to_square.spec.js +0 -28
  110. package/src/core/geom/2d/uv_map_square_to_circle.spec.js +0 -30
  111. package/src/core/geom/3d/SurfacePoint3.spec.js +0 -116
  112. package/src/core/geom/3d/aabb/AABB3.spec.js +0 -257
  113. package/src/core/geom/3d/aabb/aabb3_array_intersects_point.spec.js +0 -48
  114. package/src/core/geom/3d/aabb/aabb3_build_corners.spec.js +0 -27
  115. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_max.spec.js +0 -8
  116. package/src/core/geom/3d/aabb/aabb3_compute_plane_side.spec.js +0 -25
  117. package/src/core/geom/3d/aabb/aabb3_corner_edge_mapping.spec.js +0 -39
  118. package/src/core/geom/3d/aabb/aabb3_edge_corner_mapping.spec.js +0 -32
  119. package/src/core/geom/3d/aabb/aabb3_expand_array.spec.js +0 -16
  120. package/src/core/geom/3d/aabb/aabb3_from_v3_array.spec.js +0 -32
  121. package/src/core/geom/3d/aabb/aabb3_intersects_aabb3.spec.js +0 -115
  122. package/src/core/geom/3d/aabb/aabb3_intersects_ray.spec.js +0 -161
  123. package/src/core/geom/3d/aabb/aabb3_matrix4_project.spec.js +0 -54
  124. package/src/core/geom/3d/aabb/aabb3_raycast.spec.js +0 -37
  125. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.spec.js +0 -14
  126. package/src/core/geom/3d/cone/computeConePlaneSide.spec.js +0 -13
  127. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.spec.js +0 -95
  128. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.spec.js +0 -61
  129. package/src/core/geom/3d/mat4/MATRIX_4_IDENTITY.spec.js +0 -10
  130. package/src/core/geom/3d/mat4/m4_multiply.spec.js +0 -34
  131. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.spec.js +0 -35
  132. package/src/core/geom/3d/morton/v3_morton_encode_transformed.spec.js +0 -20
  133. package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +0 -41
  134. package/src/core/geom/3d/normal/octahedron/encoding.spec.js +0 -54
  135. package/src/core/geom/3d/plane/plane3_projectPoint.spec.js +0 -54
  136. package/src/core/geom/3d/plane/plane3_slerp.spec.js +0 -209
  137. package/src/core/geom/3d/ray/ray3_array_compose.spec.js +0 -14
  138. package/src/core/geom/3d/shape/TransformedShape3D.spec.js +0 -55
  139. package/src/core/geom/3d/shape/UnitCubeShape3D.spec.js +0 -42
  140. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.spec.js +0 -53
  141. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js +0 -27
  142. package/src/core/geom/3d/sphere/sphere_intersects_point.spec.js +0 -134
  143. package/src/core/geom/3d/sphere/sphere_intersects_ray.spec.js +0 -60
  144. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.spec.js +0 -8
  145. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.spec.js +0 -233
  146. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +0 -66
  147. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +0 -36
  148. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.js +0 -61
  149. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_compute_sub_determinant.spec.js +0 -30
  150. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.spec.js +0 -24
  151. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.spec.js +0 -66
  152. package/src/core/geom/3d/topology/simplify/collapseEdge.spec.js +0 -24
  153. package/src/core/geom/3d/topology/struct/TopoEdge.spec.js +0 -52
  154. package/src/core/geom/3d/topology/struct/TopoVertex.spec.js +0 -128
  155. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.spec.js +0 -36
  156. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.spec.js +0 -16
  157. package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.spec.js +0 -84
  158. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.spec.js +0 -15
  159. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_other_vertex.spec.js +0 -16
  160. package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.spec.js +0 -100
  161. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.spec.js +0 -25
  162. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.spec.js +0 -26
  163. package/src/core/geom/3d/v3_compute_triangle_normal.spec.js +0 -46
  164. package/src/core/geom/ConicRay.spec.js +0 -24
  165. package/src/core/geom/Quaternion.spec.js +0 -429
  166. package/src/core/geom/Vector1.spec.js +0 -74
  167. package/src/core/geom/Vector2.spec.js +0 -295
  168. package/src/core/geom/Vector3.spec.js +0 -285
  169. package/src/core/geom/Vector4.spec.js +0 -11
  170. package/src/core/geom/normalize_angle_rad.spec.js +0 -45
  171. package/src/core/geom/packing/computeBoundingSphereOfSpheres.spec.js +0 -24
  172. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.spec.js +0 -60
  173. package/src/core/geom/packing/miniball/Miniball.spec.js +0 -35
  174. package/src/core/geom/packing/miniball/Subspan.spec.js +0 -51
  175. package/src/core/geom/random/randomPointOnBox.spec.js +0 -57
  176. package/src/core/geom/vec/vector_normalize.spec.js +0 -15
  177. package/src/core/geom/vec3/v3_angle_cos_between.spec.js +0 -124
  178. package/src/core/geom/vec3/v3_displace_in_direction.spec.js +0 -80
  179. package/src/core/geom/vec3/v3_distance_above_plane.spec.js +0 -40
  180. package/src/core/graph/Edge.spec.js +0 -85
  181. package/src/core/graph/SquareMatrix.spec.js +0 -102
  182. package/src/core/graph/coloring/colorizeGraphGreedy.spec.js +0 -26
  183. package/src/core/graph/convert_graph_to_dot_string.spec.js +0 -28
  184. package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +0 -57
  185. package/src/core/graph/graph_k_means_cluster.spec.js +0 -23
  186. package/src/core/graph/mn_graph_coarsen.spec.js +0 -45
  187. package/src/core/graph/v2/Graph.spec.js +0 -364
  188. package/src/core/json/resolvePath.spec.js +0 -14
  189. package/src/core/lang/reactive/compileReactiveExpression.spec.js +0 -169
  190. package/src/core/math/bessel_j0.spec.js +0 -43
  191. package/src/core/math/clamp.spec.js +0 -15
  192. package/src/core/math/computeGreatestCommonDivisor.spec.js +0 -9
  193. package/src/core/math/computeIsoscelesTriangleApexAngle.spec.js +0 -6
  194. package/src/core/math/computeWholeDivisorLow.spec.js +0 -9
  195. package/src/core/math/copysign.spec.js +0 -13
  196. package/src/core/math/epsilonEquals.spec.js +0 -17
  197. package/src/core/math/factorial.spec.js +0 -9
  198. package/src/core/math/fract.spec.js +0 -11
  199. package/src/core/math/hash/computeHashFloatArray.spec.js +0 -11
  200. package/src/core/math/hash/computeObjectHash.spec.js +0 -42
  201. package/src/core/math/hash/murmur3_32.spec.js +0 -8
  202. package/src/core/math/hash/squirrel3.spec.js +0 -16
  203. package/src/core/math/iabs.spec.js +0 -9
  204. package/src/core/math/interval/NumericInterval.spec.js +0 -89
  205. package/src/core/math/interval/isValueBetween.spec.js +0 -11
  206. package/src/core/math/interval/isValueBetweenInclusive.spec.js +0 -16
  207. package/src/core/math/interval/overlap1D.spec.js +0 -10
  208. package/src/core/math/inverseLerp.spec.js +0 -13
  209. package/src/core/math/isPowerOfTwo.spec.js +0 -9
  210. package/src/core/math/isqrt.spec.js +0 -9
  211. package/src/core/math/lerp.spec.js +0 -15
  212. package/src/core/math/linalg/solve_linear_system.spec.js +0 -70
  213. package/src/core/math/max.spec.js +0 -25
  214. package/src/core/math/max2.spec.js +0 -13
  215. package/src/core/math/max3.spec.js +0 -29
  216. package/src/core/math/min2.spec.js +0 -37
  217. package/src/core/math/min3.spec.js +0 -29
  218. package/src/core/math/newton_solver_1d.spec.js +0 -9
  219. package/src/core/math/nextOdd.spec.js +0 -9
  220. package/src/core/math/noise/create_simplex_noise_2d.spec.js +0 -21
  221. package/src/core/math/noise/sdnoise.spec.js +0 -87
  222. package/src/core/math/physics/irradiance/interpolate_irradiance_linear.spec.js +0 -20
  223. package/src/core/math/physics/irradiance/interpolate_irradiance_lograrithmic.spec.js +0 -18
  224. package/src/core/math/physics/irradiance/interpolate_irradiance_smith.spec.js +0 -20
  225. package/src/core/math/pingpong.spec.js +0 -11
  226. package/src/core/math/random/MersenneTwister.spec.js +0 -19
  227. package/src/core/math/random/randomFloatBetween.spec.js +0 -9
  228. package/src/core/math/random/randomGaussian.spec.js +0 -9
  229. package/src/core/math/random/randomIntegerBetween.spec.js +0 -8
  230. package/src/core/math/random/roundFair.spec.js +0 -12
  231. package/src/core/math/random/seededRandomMersenneTwister.spec.js +0 -10
  232. package/src/core/math/random/seededRandom_Mulberry32.spec.js +0 -19
  233. package/src/core/math/remap.spec.js +0 -15
  234. package/src/core/math/sign.spec.js +0 -13
  235. package/src/core/math/smoothStep.spec.js +0 -16
  236. package/src/core/math/smootherStep.spec.js +0 -16
  237. package/src/core/math/solveQuadratic.spec.js +0 -18
  238. package/src/core/math/spline/cubicCurve.spec.js +0 -13
  239. package/src/core/math/spline/makeCubicCurve.spec.js +0 -9
  240. package/src/core/math/spline/spline_bezier2.spec.js +0 -13
  241. package/src/core/math/spline/spline_bezier3_bounds.spec.js +0 -37
  242. package/src/core/math/spline/spline_hermite3.spec.js +0 -18
  243. package/src/core/math/spline/spline_hermite3_bounds.spec.js +0 -37
  244. package/src/core/math/statistics/computeSampleSize_Cochran.spec.js +0 -12
  245. package/src/core/math/statistics/computeStatisticalMean.spec.js +0 -9
  246. package/src/core/math/statistics/computeStatisticalPartialMedian.spec.js +0 -13
  247. package/src/core/math/statistics/computeStatisticalPercentile.spec.js +0 -11
  248. package/src/core/math/statistics/computeStatisticalVariance.spec.js +0 -10
  249. package/src/core/math/statistics/halton_sequence.spec.js +0 -40
  250. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +0 -9
  251. package/src/core/math/statistics/softmax.spec.js +0 -9
  252. package/src/core/model/BooleanVector3.spec.js +0 -51
  253. package/src/core/model/BoundedValue.spec.js +0 -17
  254. package/src/core/model/ModuleRegistry.spec.js +0 -31
  255. package/src/core/model/ObservedBoolean.spec.js +0 -81
  256. package/src/core/model/ObservedInteger.spec.js +0 -51
  257. package/src/core/model/node-graph/Connection.spec.js +0 -33
  258. package/src/core/model/node-graph/NodeGraph.spec.js +0 -107
  259. package/src/core/model/node-graph/node/NodeDescription.spec.js +0 -81
  260. package/src/core/model/node-graph/node/NodeInstance.spec.js +0 -82
  261. package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +0 -109
  262. package/src/core/model/node-graph/node/NodeRegistry.spec.js +0 -123
  263. package/src/core/model/node-graph/node/Port.spec.js +0 -102
  264. package/src/core/model/node-graph/type/DataType.spec.js +0 -47
  265. package/src/core/model/node-graph/type/ParametricDataType.spec.js +0 -63
  266. package/src/core/model/node-graph/visual/PortVisualData.spec.js +0 -16
  267. package/src/core/model/object/ObjectPoolFactory.spec.js +0 -54
  268. package/src/core/model/object/objectDeepEquals.spec.js +0 -54
  269. package/src/core/model/object/write_property.spec.js +0 -26
  270. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +0 -158
  271. package/src/core/model/reactive/js/compileReactiveToJS.spec.js +0 -14
  272. package/src/core/model/reactive/model/logic/ReactiveAnd.spec.js +0 -51
  273. package/src/core/model/reactive/model/logic/ReactiveOr.spec.js +0 -53
  274. package/src/core/model/reactive/model/terminal/ReactiveReference.spec.js +0 -26
  275. package/src/core/model/reactive/trigger/BlackboardTrigger.spec.js +0 -24
  276. package/src/core/model/reactive/trigger/ReactiveTrigger.spec.js +0 -5
  277. package/src/core/model/stat/LinearModifier.spec.js +0 -96
  278. package/src/core/model/stat/Stat.spec.js +0 -111
  279. package/src/core/parser/simple/readHexToken.spec.js +0 -21
  280. package/src/core/parser/simple/readIdentifierToken.spec.js +0 -32
  281. package/src/core/parser/simple/readNumberToken.spec.js +0 -17
  282. package/src/core/parser/simple/readReferenceToken.spec.js +0 -18
  283. package/src/core/parser/simple/readStringToken.spec.js +0 -57
  284. package/src/core/parser/simple/readUnsignedIntegerToken.spec.js +0 -6
  285. package/src/core/path/computeFileExtension.spec.js +0 -13
  286. package/src/core/path/computePathBase.spec.js +0 -13
  287. package/src/core/path/computePathDirectory.spec.js +0 -8
  288. package/src/core/primitives/array/computeStridedIntegerArrayHash.spec.js +0 -28
  289. package/src/core/primitives/numbers/computeHashFloat.spec.js +0 -14
  290. package/src/core/primitives/numbers/number_compare_ascending.spec.js +0 -9
  291. package/src/core/primitives/numbers/number_compare_descending.spec.js +0 -9
  292. package/src/core/primitives/numbers/number_format_by_thousands.spec.js +0 -12
  293. package/src/core/primitives/numbers/number_pretty_print.spec.js +0 -19
  294. package/src/core/primitives/strings/compareStrings.spec.js +0 -12
  295. package/src/core/primitives/strings/computeStringHash.spec.js +0 -20
  296. package/src/core/primitives/strings/insert_after.spec.js +0 -16
  297. package/src/core/primitives/strings/insert_before.spec.js +0 -16
  298. package/src/core/primitives/strings/string_capitalize.spec.js +0 -13
  299. package/src/core/primitives/strings/string_compute_common_prefix.spec.js +0 -23
  300. package/src/core/primitives/strings/string_format_camel_to_kebab.spec.js +0 -8
  301. package/src/core/primitives/strings/string_jaro_winkler.spec.js +0 -39
  302. package/src/core/primitives/strings/string_strip_trailing.spec.js +0 -27
  303. package/src/core/process/PromiseWatcher.spec.js +0 -69
  304. package/src/core/process/executor/ConcurrentExecutor.spec.js +0 -135
  305. package/src/core/process/task/util/actionTask.spec.js +0 -14
  306. package/src/core/process/task/util/countTask.spec.js +0 -18
  307. package/src/core/process/undo/ActionProcessor.spec.js +0 -64
  308. package/src/engine/Clock.spec.js +0 -26
  309. package/src/engine/Engine.spec.js +0 -15
  310. package/src/engine/achievements/Achievement.spec.js +0 -21
  311. package/src/engine/animation/curve/AnimationCurve.spec.js +0 -248
  312. package/src/engine/animation/curve/Keyframe.spec.js +0 -42
  313. package/src/engine/animation/curve/animation_curve_optimize.spec.js +0 -50
  314. package/src/engine/animation/curve/compression/downsample_float_array_curve_by_error.spec.js +0 -47
  315. package/src/engine/animation/curve/compression/sample_animation_curve_to_float_array.spec.js +0 -29
  316. package/src/engine/animation/keyed2/AnimationTrackPlayback.spec.js +0 -94
  317. package/src/engine/asset/AssetDescription.spec.js +0 -27
  318. package/src/engine/asset/AssetManager.spec.js +0 -50
  319. package/src/engine/asset/loaders/image/png/PNG.spec.js +0 -5
  320. package/src/engine/asset/loaders/image/png/PNGReader.spec.js +0 -5
  321. package/src/engine/asset/loaders/image/png/crc.spec.js +0 -15
  322. package/src/engine/control/ControlContext.spec.js +0 -81
  323. package/src/engine/ecs/Entity.spec.js +0 -188
  324. package/src/engine/ecs/EntityBlueprint.spec.js +0 -52
  325. package/src/engine/ecs/EntityComponentDataset.spec.js +0 -895
  326. package/src/engine/ecs/EntityManager.spec.js +0 -210
  327. package/src/engine/ecs/EntityObserver.spec.js +0 -184
  328. package/src/engine/ecs/animation/Animation.spec.js +0 -22
  329. package/src/engine/ecs/animation/AnimationClip.spec.js +0 -5
  330. package/src/engine/ecs/components/Tag.spec.js +0 -47
  331. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.spec.js +0 -126
  332. package/src/engine/ecs/fow/FogOfWar.spec.js +0 -13
  333. package/src/engine/ecs/guid/UUID.spec.js +0 -100
  334. package/src/engine/ecs/guid/UUIDSerializationAdapter.spec.js +0 -21
  335. package/src/engine/ecs/parent/EntityNode.spec.js +0 -104
  336. package/src/engine/ecs/renderable/Renderable.spec.js +0 -10
  337. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.spec.js +0 -139
  338. package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerialization.spec.js +0 -259
  339. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.spec.js +0 -59
  340. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.spec.js +0 -123
  341. package/src/engine/ecs/terrain/ecs/Terrain.spec.js +0 -5
  342. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.spec.js +0 -38
  343. package/src/engine/ecs/terrain/overlay/TerrainOverlay.spec.js +0 -6
  344. package/src/engine/ecs/terrain/tiles/TerrainTile.spec.js +0 -25
  345. package/src/engine/ecs/tooltip/TooltipComponent.spec.js +0 -47
  346. package/src/engine/ecs/transform/Transform.spec.js +0 -310
  347. package/src/engine/ecs/transform/TransformSerializationAdapter.spec.js +0 -28
  348. package/src/engine/ecs/transform-attachment/TransformAttachment.spec.js +0 -103
  349. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.spec.js +0 -5
  350. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.spec.js +0 -5
  351. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.spec.js +0 -94
  352. package/src/engine/graphics/ecs/decal/v2/Decal.spec.js +0 -5
  353. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.spec.js +0 -19
  354. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.spec.js +0 -5
  355. package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.spec.js +0 -79
  356. package/src/engine/graphics/ecs/path/tube/TubePathStyle.spec.js +0 -5
  357. package/src/engine/graphics/ecs/path/tube/build/build_geometry_catmullrom.spec.js +0 -32
  358. package/src/engine/graphics/geometry/MikkT/MikkTSpace.spec.js +0 -28
  359. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.spec.js +0 -22
  360. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.spec.js +0 -70
  361. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.spec.js +0 -47
  362. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +0 -100
  363. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +0 -225
  364. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.spec.js +0 -215
  365. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.spec.js +0 -75
  366. package/src/engine/graphics/particles/particular/group/ParticleGroup.spec.js +0 -270
  367. package/src/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.spec.js +0 -21
  368. package/src/engine/graphics/render/forward_plus/LightManager.spec.js +0 -94
  369. package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.spec.js +0 -79
  370. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.spec.js +0 -102
  371. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +0 -78
  372. package/src/engine/graphics/texture/atlas/TextureAtlas.spec.js +0 -319
  373. package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +0 -99
  374. package/src/engine/graphics/texture/sampler/Sampler2D.spec.js +0 -224
  375. package/src/engine/graphics/texture/sampler/copy_Sampler2D_channel_data.spec.js +0 -90
  376. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_NaiveFlood.spec.js +0 -183
  377. package/src/engine/graphics/texture/sampler/distance/computeUnsignedDistanceField.spec.js +0 -183
  378. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale.spec.js +0 -73
  379. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.spec.js +0 -31
  380. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_linear.spec.js +0 -44
  381. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_mipmap.spec.js +0 -13
  382. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_up_linear.spec.js +0 -14
  383. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.spec.js +0 -40
  384. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.spec.js +0 -15
  385. package/src/engine/graphics/texture/sampler/sampler2d_copy_with_margins.spec.js +0 -31
  386. package/src/engine/graphics/texture/sampler/sampler2d_to_data_url.spec.js +0 -10
  387. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.spec.js +0 -52
  388. package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.spec.js +0 -38
  389. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.spec.js +0 -108
  390. package/src/engine/graphics/trail/x/RibbonX.spec.js +0 -5
  391. package/src/engine/grid/obstacle/GridObstacle.spec.js +0 -175
  392. package/src/engine/input/devices/InputDeviceSwitch.spec.js +0 -5
  393. package/src/engine/input/devices/KeyboardDevice.spec.js +0 -12
  394. package/src/engine/input/devices/PointerDevice.spec.js +0 -12
  395. package/src/engine/intelligence/behavior/Behavior.spec.js +0 -15
  396. package/src/engine/intelligence/behavior/SelectorBehavior.spec.js +0 -18
  397. package/src/engine/intelligence/behavior/behavior_to_dot.spec.js +0 -25
  398. package/src/engine/intelligence/behavior/composite/ParallelBehavior.spec.js +0 -166
  399. package/src/engine/intelligence/behavior/composite/SequenceBehavior.spec.js +0 -17
  400. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.spec.js +0 -32
  401. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.spec.js +0 -75
  402. package/src/engine/intelligence/behavior/util/ConditionBehavior.spec.js +0 -24
  403. package/src/engine/intelligence/blackboard/Blackboard.spec.js +0 -111
  404. package/src/engine/intelligence/blackboard/BlackboardSerializationAdapter.spec.js +0 -30
  405. package/src/engine/intelligence/blackboard/make_blackboard_proxy.spec.js +0 -23
  406. package/src/engine/intelligence/mcts/MonteCarlo.spec.js +0 -244
  407. package/src/engine/intelligence/mcts/StateNode.spec.js +0 -49
  408. package/src/engine/intelligence/optimization/RandomOptimizer.spec.js +0 -57
  409. package/src/engine/intelligence/resource/ResourceAllocationSolver.spec.js +0 -104
  410. package/src/engine/intelligence/resource/StrategicResourceAllocator.spec.js +0 -46
  411. package/src/engine/knowledge/database/StaticKnowledgeDataTable.spec.js +0 -26
  412. package/src/engine/knowledge/database/StaticKnowledgeDatabase.spec.js +0 -23
  413. package/src/engine/navigation/ecs/components/Path.spec.js +0 -195
  414. package/src/engine/navigation/ecs/path_following/PathFollower.spec.js +0 -27
  415. package/src/engine/navigation/grid/find_path_on_grid_astar.spec.js +0 -87
  416. package/src/engine/notify/NotificationLog.spec.js +0 -17
  417. package/src/engine/options/Option.spec.js +0 -69
  418. package/src/engine/options/OptionGroup.spec.js +0 -61
  419. package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.js +0 -46
  420. package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.js +0 -43
  421. package/src/engine/plugin/EnginePlugin.spec.js +0 -5
  422. package/src/engine/reference/v2/Reference.spec.js +0 -44
  423. package/src/engine/scene/Scene.spec.js +0 -20
  424. package/src/engine/scene/SceneManager.spec.js +0 -131
  425. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.spec.js +0 -49
  426. package/src/engine/ui/tiles2d/TileGrid.spec.js +0 -20
  427. package/src/engine/ui/tiles2d/computeTileGridMove.spec.js +0 -54
  428. package/src/generation/automata/CaveGeneratorCellularAutomata.spec.js +0 -12
  429. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.spec.js +0 -30
  430. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.spec.js +0 -17
  431. package/src/generation/filtering/numeric/process/computeCellFilterGradient.spec.js +0 -288
  432. package/src/generation/grid/GridData.spec.js +0 -46
  433. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.spec.js +0 -116
  434. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +0 -106
  435. package/src/generation/placement/action/GridCellActionPlaceTags.spec.js +0 -21
  436. package/src/generation/rules/CellMatcherLayerBitMaskTest.spec.js +0 -22
  437. package/src/generation/rules/cell/GridPatternMatcher.spec.js +0 -285
  438. package/src/generation/theme/ThemeEngine.spec.js +0 -7
  439. package/src/view/tooltip/gml/TooltipParser.spec.js +0 -142
@@ -1,895 +0,0 @@
1
- import { jest } from '@jest/globals';
2
- import { noop } from "../../core/function/noop.js";
3
- import { EntityComponentDataset } from "./EntityComponentDataset.js";
4
- import { EventType } from "./EntityManager.js";
5
- import { EntityObserver } from "./EntityObserver.js";
6
-
7
- class DummyComponentA {
8
- }
9
-
10
- DummyComponentA.typeName = "DummyComponentA";
11
-
12
- class DummyComponentB {
13
- }
14
-
15
- DummyComponentB.typeName = "DummyComponentB";
16
-
17
- test("constructor doesn't throw", () => {
18
- new EntityComponentDataset();
19
- });
20
-
21
- test("create empty entity", () => {
22
- const dataset = new EntityComponentDataset();
23
- const entity = dataset.createEntity();
24
-
25
- expect(dataset.entityExists(entity)).toBe(true);
26
- });
27
-
28
-
29
- test("create empty entity then destroy", () => {
30
- const dataset = new EntityComponentDataset();
31
- const entity = dataset.createEntity();
32
-
33
- expect(dataset.entityExists(entity)).toBe(true);
34
-
35
- dataset.removeEntity(entity);
36
-
37
- expect(dataset.entityExists(entity)).toBe(false);
38
- });
39
-
40
- test("onEntityCreated signal", () => {
41
- const fn = jest.fn();
42
-
43
- const dataset = new EntityComponentDataset();
44
-
45
- dataset.onEntityCreated.add(fn);
46
-
47
- const entityId = dataset.createEntity();
48
-
49
- expect(fn).toHaveBeenCalledTimes(1);
50
-
51
- expect(fn).toHaveBeenLastCalledWith(entityId);
52
- });
53
-
54
- test("onEntityRemoved signal", () => {
55
- const fn = jest.fn();
56
-
57
- const dataset = new EntityComponentDataset();
58
-
59
- dataset.onEntityRemoved.add(fn);
60
-
61
- const entityId = dataset.createEntity();
62
-
63
- expect(fn).not.toHaveBeenCalled();
64
-
65
- dataset.removeEntity(entityId);
66
-
67
- expect(fn).toHaveBeenCalledTimes(1);
68
-
69
- expect(fn).toHaveBeenLastCalledWith(entityId);
70
- });
71
-
72
- test("can alter component map when number of entities is > 0 when no live components are affected", () => {
73
- const dataset = new EntityComponentDataset();
74
-
75
- dataset.createEntity();
76
-
77
- dataset.setComponentTypeMap([DummyComponentA]);
78
-
79
- expect(dataset.getComponentTypeMap()).toEqual([DummyComponentA]);
80
-
81
- expect(dataset.getComponentTypeCount()).toBe(1);
82
- });
83
-
84
- test("componentTypeCount is updated correctly when component map is set", () => {
85
- const dataset = new EntityComponentDataset();
86
-
87
- expect(dataset.getComponentTypeCount()).toBe(0);
88
-
89
- dataset.setComponentTypeMap([DummyComponentA]);
90
-
91
- expect(dataset.getComponentTypeCount()).toBe(1);
92
-
93
- dataset.setComponentTypeMap([DummyComponentB]);
94
-
95
- expect(dataset.getComponentTypeCount()).toBe(1);
96
-
97
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
98
-
99
- expect(dataset.getComponentTypeCount()).toBe(2);
100
-
101
- dataset.setComponentTypeMap([]);
102
-
103
- expect(dataset.getComponentTypeCount()).toBe(0);
104
- });
105
-
106
- test("entityCount is updated correctly when entities are added and removed", () => {
107
- const dataset = new EntityComponentDataset();
108
-
109
- expect(dataset.getEntityCount()).toBe(0);
110
-
111
- const a = dataset.createEntity();
112
-
113
- expect(dataset.getEntityCount()).toBe(1);
114
-
115
- const b = dataset.createEntity();
116
- const c = dataset.createEntity();
117
-
118
- expect(dataset.getEntityCount()).toBe(3);
119
-
120
- dataset.removeEntity(b);
121
-
122
- expect(dataset.getEntityCount()).toBe(2);
123
-
124
- dataset.removeEntity(a);
125
-
126
- expect(dataset.getEntityCount()).toBe(1);
127
-
128
- dataset.removeEntity(c);
129
-
130
- expect(dataset.getEntityCount()).toBe(0);
131
- });
132
-
133
- test("addComponentToEntity", () => {
134
- const dataset = new EntityComponentDataset();
135
-
136
- dataset.setComponentTypeMap([DummyComponentA]);
137
-
138
- const entityA = dataset.createEntity();
139
-
140
- const componentA = new DummyComponentA();
141
-
142
- dataset.addComponentToEntityByIndex(entityA, 0, componentA);
143
-
144
- expect(dataset.getComponentByIndex(entityA, 0)).toBe(componentA);
145
-
146
- dataset.removeEntity(entityA);
147
-
148
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
149
-
150
- const componentB = new DummyComponentB();
151
-
152
- const entityB = dataset.createEntity();
153
-
154
- dataset.addComponentToEntityByIndex(entityB, 1, componentA);
155
- dataset.addComponentToEntityByIndex(entityB, 0, componentB);
156
-
157
- expect(dataset.getComponentByIndex(entityB, 0)).toBe(componentB);
158
- expect(dataset.getComponentByIndex(entityB, 1)).toBe(componentA);
159
- });
160
-
161
- test("removeComponentFromEntity", () => {
162
- const dataset = new EntityComponentDataset();
163
-
164
- dataset.setComponentTypeMap([DummyComponentA]);
165
-
166
- const entityA = dataset.createEntity();
167
-
168
- const componentA = new DummyComponentA();
169
-
170
- dataset.addComponentToEntityByIndex(entityA, 0, componentA);
171
- dataset.removeComponentFromEntityByIndex(entityA, 0);
172
-
173
- expect(dataset.getComponentByIndex(entityA, 0)).toBe(undefined);
174
-
175
- dataset.removeEntity(entityA);
176
-
177
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
178
-
179
- const componentB = new DummyComponentB();
180
-
181
- const entityB = dataset.createEntity();
182
-
183
- dataset.addComponentToEntityByIndex(entityB, 1, componentA);
184
- dataset.addComponentToEntityByIndex(entityB, 0, componentB);
185
-
186
- dataset.removeComponentFromEntityByIndex(entityB, 0);
187
-
188
- expect(dataset.getComponentByIndex(entityB, 0)).toBe(undefined);
189
- expect(dataset.getComponentByIndex(entityB, 1)).toBe(componentA);
190
-
191
- dataset.removeComponentFromEntityByIndex(entityB, 1);
192
-
193
- expect(dataset.getComponentByIndex(entityB, 0)).toBe(undefined);
194
- expect(dataset.getComponentByIndex(entityB, 1)).toBe(undefined);
195
- });
196
-
197
- test("removing entity will remove its components also", () => {
198
- const dataset = new EntityComponentDataset();
199
- dataset.setComponentTypeMap([DummyComponentA]);
200
- const handler = jest.fn();
201
-
202
- const entity = dataset.createEntity();
203
-
204
- dataset.addEntityEventListener(entity, EventType.ComponentRemoved, handler);
205
-
206
- const componentInstance = new DummyComponentA();
207
-
208
- dataset.addComponentToEntityByIndex(entity, 0, componentInstance);
209
-
210
- dataset.removeEntity(entity);
211
-
212
- expect(handler).toHaveBeenCalledTimes(1);
213
- });
214
-
215
- test("removeObserver for multiple components cleans up correctly", () => {
216
- const dataset = new EntityComponentDataset();
217
-
218
- dataset.setComponentTypeMap([DummyComponentA, DummyComponentB]);
219
-
220
- const observer = new EntityObserver([DummyComponentA, DummyComponentB], noop, noop);
221
-
222
- dataset.addObserver(observer);
223
-
224
-
225
- dataset.removeObserver(observer);
226
-
227
-
228
- //check all retained observers to make sure removal has cleaned up correctly
229
- dataset.observers.forEach(store => {
230
- expect(store.indexOf(observer)).toBe(-1);
231
- });
232
- });
233
-
234
- test("remapping components preserves observers", () => {
235
- const dataset = new EntityComponentDataset();
236
- dataset.setComponentTypeMap([DummyComponentA]);
237
-
238
- const aLinked = jest.fn();
239
- const aUnlinked = jest.fn();
240
-
241
- const observerA = new EntityObserver([DummyComponentA], aLinked, aUnlinked);
242
-
243
- dataset.addObserver(observerA);
244
-
245
- //Adding a component
246
- dataset.setComponentTypeMap([DummyComponentA, DummyComponentB]);
247
-
248
- //validate existing observer A
249
- const e0 = dataset.createEntity();
250
-
251
- const a0 = new DummyComponentA();
252
- dataset.addComponentToEntity(e0, a0);
253
-
254
- expect(aLinked).toHaveBeenLastCalledWith(a0, e0);
255
-
256
- const abLinked = jest.fn();
257
- const abUnlinked = jest.fn();
258
-
259
- //introduce second observer
260
- const observerAB = new EntityObserver([DummyComponentA, DummyComponentB], abLinked, abUnlinked);
261
-
262
- dataset.addObserver(observerAB);
263
-
264
- //Changing component order
265
- dataset.setComponentTypeMap([DummyComponentB, DummyComponentA]);
266
-
267
- const b0 = new DummyComponentB();
268
- dataset.addComponentToEntity(e0, b0);
269
-
270
- expect(abLinked).toHaveBeenLastCalledWith(a0, b0, e0);
271
-
272
- const e1 = dataset.createEntity();
273
-
274
- const a1 = new DummyComponentA();
275
- dataset.addComponentToEntity(e1, a1);
276
-
277
- expect(aLinked).toHaveBeenLastCalledWith(a1, e1);
278
-
279
- dataset.removeComponentFromEntity(e0, DummyComponentB);
280
-
281
- //remove AB observer
282
- dataset.removeObserver(observerAB);
283
-
284
- //Remove component from the map
285
- dataset.setComponentTypeMap([DummyComponentA]);
286
-
287
- const e2 = dataset.createEntity();
288
-
289
- const a2 = new DummyComponentA();
290
-
291
- dataset.addComponentToEntity(e2, a2);
292
-
293
- expect(aLinked).toHaveBeenLastCalledWith(a2, e2);
294
- });
295
-
296
- test('traverseComponents with empty', () => {
297
- const ecd = new EntityComponentDataset();
298
-
299
- ecd.setComponentTypeMap([DummyComponentA]);
300
-
301
- const visitor = jest.fn();
302
-
303
- ecd.traverseComponents(DummyComponentA, visitor);
304
-
305
- expect(visitor).not.toHaveBeenCalled();
306
- });
307
-
308
- test('traverseComponents with 1 entity and 1 component', () => {
309
- const ecd = new EntityComponentDataset();
310
-
311
- ecd.setComponentTypeMap([DummyComponentA]);
312
-
313
- const visitor = jest.fn();
314
-
315
- const entity = ecd.createEntity();
316
- const cA = new DummyComponentA();
317
-
318
- ecd.addComponentToEntity(entity, cA);
319
-
320
- ecd.traverseComponents(DummyComponentA, visitor);
321
-
322
- expect(visitor).toHaveBeenCalledTimes(1);
323
- expect(visitor).toHaveBeenCalledWith(cA, entity);
324
- });
325
-
326
- test('traverseComponents with 2 entity and 2 component', () => {
327
- const ecd = new EntityComponentDataset();
328
-
329
- ecd.setComponentTypeMap([DummyComponentA]);
330
-
331
- const visitor = jest.fn();
332
-
333
- const entity_0 = ecd.createEntity();
334
- const cA_0 = new DummyComponentA();
335
-
336
- ecd.addComponentToEntity(entity_0, cA_0);
337
-
338
- const entity_1 = ecd.createEntity();
339
- const cA_1 = new DummyComponentA();
340
-
341
- ecd.addComponentToEntity(entity_1, cA_1);
342
-
343
- ecd.traverseComponents(DummyComponentA, visitor);
344
-
345
- expect(visitor).toHaveBeenCalledTimes(2);
346
- expect(visitor).toHaveBeenCalledWith(cA_0, entity_0);
347
- expect(visitor).toHaveBeenCalledWith(cA_1, entity_1);
348
- });
349
-
350
- test('traverseComponents with 2 entity and 1 component', () => {
351
- const ecd = new EntityComponentDataset();
352
-
353
- ecd.setComponentTypeMap([DummyComponentA]);
354
-
355
- const visitor = jest.fn();
356
-
357
- const entity_0 = ecd.createEntity();
358
-
359
- const entity_1 = ecd.createEntity();
360
- const cA_1 = new DummyComponentA();
361
-
362
- ecd.addComponentToEntity(entity_1, cA_1);
363
-
364
- ecd.traverseComponents(DummyComponentA, visitor);
365
-
366
- expect(visitor).toHaveBeenCalledTimes(1);
367
- expect(visitor).toHaveBeenCalledWith(cA_1, entity_1);
368
- });
369
-
370
- test('traverseComponents with early exist', () => {
371
- const ecd = new EntityComponentDataset();
372
-
373
- ecd.setComponentTypeMap([DummyComponentA]);
374
-
375
- const visitor = jest.fn(() => false);
376
-
377
- const entity_0 = ecd.createEntity();
378
- const cA_0 = new DummyComponentA();
379
-
380
- ecd.addComponentToEntity(entity_0, cA_0);
381
-
382
- const entity_1 = ecd.createEntity();
383
- const cA_1 = new DummyComponentA();
384
-
385
- ecd.addComponentToEntity(entity_1, cA_1);
386
-
387
- ecd.traverseComponents(DummyComponentA, visitor);
388
-
389
- expect(visitor).toHaveBeenCalledTimes(1);
390
- });
391
-
392
- test('traverseEntities with no entities and no components', () => {
393
- const ecd = new EntityComponentDataset();
394
-
395
- ecd.setComponentTypeMap([DummyComponentA]);
396
-
397
- const visitor = jest.fn();
398
-
399
- ecd.traverseEntities([], visitor);
400
-
401
- expect(visitor).not.toHaveBeenCalled();
402
-
403
- ecd.traverseEntities([DummyComponentA], visitor);
404
-
405
- expect(visitor).not.toHaveBeenCalled();
406
- });
407
-
408
- test('traverseEntities with 1 entity and no components', () => {
409
- const ecd = new EntityComponentDataset();
410
-
411
- ecd.setComponentTypeMap([DummyComponentA]);
412
-
413
- const entity_0 = ecd.createEntity();
414
- const cA_0 = new DummyComponentA();
415
-
416
- ecd.addComponentToEntity(entity_0, cA_0);
417
-
418
- const component = ecd.getComponent(entity_0, DummyComponentA);
419
-
420
- expect(component).toBeDefined();
421
-
422
- expect(component).toBe(cA_0);
423
- });
424
-
425
- test('getComponent with 1 entity and 1 component', () => {
426
- const ecd = new EntityComponentDataset();
427
-
428
- ecd.setComponentTypeMap([DummyComponentA]);
429
-
430
- const visitor_0 = jest.fn();
431
-
432
- const entity_0 = ecd.createEntity();
433
-
434
- ecd.traverseEntities([], visitor_0);
435
-
436
- expect(visitor_0).toHaveBeenCalledWith(entity_0);
437
-
438
- const visitor_1 = jest.fn();
439
-
440
- ecd.traverseEntities([DummyComponentA], visitor_1);
441
-
442
- expect(visitor_1).not.toHaveBeenCalled();
443
- });
444
-
445
- test("getComponent on unregistered component class", () => {
446
-
447
- const ecd = new EntityComponentDataset();
448
-
449
- const entity = ecd.createEntity();
450
-
451
- expect(ecd.getComponent(entity, DummyComponentA)).toBe(undefined);
452
- });
453
-
454
- test("getComponentSafe", () => {
455
-
456
- const ecd = new EntityComponentDataset();
457
- ecd.registerComponentType(DummyComponentA);
458
-
459
- const entity = ecd.createEntity();
460
-
461
- expect(() => ecd.getComponentSafe(entity, DummyComponentA)).toThrow();
462
-
463
- const component = new DummyComponentA();
464
-
465
- ecd.addComponentToEntity(entity, component);
466
-
467
- expect(ecd.getComponentSafe(entity, DummyComponentA)).toBe(component);
468
- });
469
-
470
- test('isComponentTypeRegistered', () => {
471
- const ecd = new EntityComponentDataset();
472
-
473
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(false);
474
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(false);
475
-
476
- ecd.setComponentTypeMap([DummyComponentA]);
477
-
478
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(true);
479
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(false);
480
-
481
- ecd.setComponentTypeMap([DummyComponentB]);
482
-
483
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(false);
484
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(true);
485
-
486
- ecd.setComponentTypeMap([DummyComponentA, DummyComponentB]);
487
-
488
- expect(ecd.isComponentTypeRegistered(DummyComponentA)).toBe(true);
489
- expect(ecd.isComponentTypeRegistered(DummyComponentB)).toBe(true);
490
- });
491
-
492
- test('isEmpty', () => {
493
-
494
- const ecd = new EntityComponentDataset();
495
-
496
- expect(ecd.isEmpty()).toBe(true);
497
-
498
- const entity = ecd.createEntity();
499
-
500
- expect(ecd.isEmpty()).toBe(false);
501
-
502
- });
503
-
504
- test("getComponentClassByName", () => {
505
-
506
- const ecd = new EntityComponentDataset();
507
-
508
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(null);
509
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(null);
510
-
511
- ecd.setComponentTypeMap([DummyComponentA]);
512
-
513
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(DummyComponentA);
514
-
515
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(null);
516
-
517
- expect(ecd.getComponentClassByName('cat')).toBe(null);
518
-
519
- ecd.setComponentTypeMap([DummyComponentB]);
520
-
521
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(null);
522
-
523
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(DummyComponentB);
524
-
525
- ecd.setComponentTypeMap([DummyComponentA, DummyComponentB]);
526
-
527
- expect(ecd.getComponentClassByName(DummyComponentA.typeName)).toBe(DummyComponentA);
528
-
529
- expect(ecd.getComponentClassByName(DummyComponentB.typeName)).toBe(DummyComponentB);
530
-
531
- });
532
-
533
- test("traverseEntityIndices", () => {
534
- const u = new EntityComponentDataset();
535
-
536
- const f = jest.fn();
537
-
538
- u.traverseEntityIndices(f);
539
-
540
- expect(f).not.toHaveBeenCalled();
541
-
542
- const entity_id = u.createEntity();
543
-
544
- u.traverseEntityIndices(f);
545
-
546
- expect(f).toHaveBeenCalledTimes(1);
547
- expect(f).toHaveBeenCalledWith(entity_id);
548
-
549
- });
550
-
551
- test("traverseEntitiesCompactedFiltered traverse empty set, empty component list", () => {
552
- const u = new EntityComponentDataset();
553
-
554
- const f = jest.fn();
555
-
556
- u.traverseEntitiesCompactedFiltered([], f);
557
-
558
- expect(f).not.toHaveBeenCalled();
559
- });
560
-
561
- test("traverseEntitiesCompactedFiltered traverse non-empty set, empty component list", () => {
562
- const u = new EntityComponentDataset();
563
-
564
- u.setComponentTypeMap([DummyComponentA]);
565
-
566
- const entity = u.createEntity();
567
-
568
- u.addComponentToEntity(entity, new DummyComponentA());
569
-
570
- const f = jest.fn();
571
-
572
- u.traverseEntitiesCompactedFiltered([], f);
573
-
574
- expect(f).toHaveBeenCalledTimes(1);
575
- expect(f).toHaveBeenCalledWith(entity, [], 0);
576
- });
577
-
578
- test("traverseEntitiesCompactedFiltered traverse empty set, non-empty component list", () => {
579
- const u = new EntityComponentDataset();
580
-
581
- u.setComponentTypeMap([DummyComponentA]);
582
-
583
- const f = jest.fn();
584
-
585
- u.traverseEntitiesCompactedFiltered([DummyComponentA], f);
586
-
587
- expect(f).not.toHaveBeenCalled();
588
- });
589
-
590
- test("traverseEntitiesCompactedFiltered traverse non-empty set, non-empty component list", () => {
591
- const u = new EntityComponentDataset();
592
-
593
- u.setComponentTypeMap([DummyComponentA]);
594
-
595
- const entity = u.createEntity();
596
-
597
- const dummyComponentA = new DummyComponentA();
598
- u.addComponentToEntity(entity, dummyComponentA);
599
-
600
- const f = jest.fn();
601
-
602
- u.traverseEntitiesCompactedFiltered([DummyComponentA], f);
603
-
604
- expect(f).toHaveBeenCalledTimes(1);
605
- expect(f).toHaveBeenCalledWith(entity, [dummyComponentA], 1);
606
- });
607
-
608
- test('entityHasComponents', () => {
609
- const ecd = new EntityComponentDataset();
610
- ecd.registerComponentType(DummyComponentA);
611
-
612
- const a = ecd.createEntity();
613
-
614
- expect(ecd.entityHasComponents(a)).toBe(false);
615
-
616
- ecd.addComponentToEntity(a, new DummyComponentA());
617
-
618
- expect(ecd.entityHasComponents(a)).toBe(true);
619
- });
620
-
621
- test("getAnyComponent", () => {
622
-
623
- const ecd = new EntityComponentDataset();
624
-
625
- ecd.registerManyComponentTypes([
626
- DummyComponentA,
627
- DummyComponentB
628
- ]);
629
-
630
- const a = ecd.createEntity();
631
-
632
- expect(ecd.getAnyComponent(DummyComponentA)).toEqual({
633
- entity: -1,
634
- component: null
635
- });
636
-
637
- const component_a = new DummyComponentA();
638
- ecd.addComponentToEntity(a, component_a);
639
- ecd.addComponentToEntity(a, new DummyComponentB());
640
-
641
- expect(ecd.getAnyComponent(DummyComponentA)).toEqual({
642
- entity: a,
643
- component: component_a
644
- });
645
-
646
- });
647
-
648
- test("hasComponent", () => {
649
-
650
-
651
- const ecd = new EntityComponentDataset();
652
-
653
- ecd.registerManyComponentTypes([
654
- DummyComponentA,
655
- DummyComponentB
656
- ]);
657
-
658
- const a = ecd.createEntity();
659
-
660
- expect(ecd.hasComponent(a, DummyComponentA)).toBe(false);
661
- expect(ecd.hasComponent(a, DummyComponentB)).toBe(false);
662
-
663
- ecd.addComponentToEntity(a, new DummyComponentA());
664
-
665
- expect(ecd.hasComponent(a, DummyComponentA)).toBe(true);
666
- expect(ecd.hasComponent(a, DummyComponentB)).toBe(false);
667
-
668
- ecd.addComponentToEntity(a, new DummyComponentB());
669
-
670
- expect(ecd.hasComponent(a, DummyComponentA)).toBe(true);
671
- expect(ecd.hasComponent(a, DummyComponentB)).toBe(true);
672
- });
673
-
674
- describe('event management', () => {
675
-
676
- test("shouldn't be able to add event listener to non-existent entity", () => {
677
- const dataset = new EntityComponentDataset();
678
- const fn = jest.fn();
679
-
680
- expect(() => dataset.addEntityEventListener(0, 'test', fn)).toThrow();
681
- });
682
-
683
-
684
- test("shouldn't be able to add event listener to removed entity", () => {
685
- const dataset = new EntityComponentDataset();
686
- const fn = jest.fn();
687
-
688
- const entity = dataset.createEntity();
689
- dataset.removeEntity(entity);
690
-
691
- expect(() => dataset.addEntityEventListener(entity, 'test', fn)).toThrow();
692
- });
693
-
694
- test("should be able to add event listener to existing entity", () => {
695
- const dataset = new EntityComponentDataset();
696
- const fn = jest.fn();
697
-
698
- const entity = dataset.createEntity();
699
-
700
- expect(() => dataset.addEntityEventListener(entity, 'test', fn)).not.toThrow();
701
- });
702
-
703
- test("entity event dispatch does not interfere with other event listeners", () => {
704
- const dataset = new EntityComponentDataset();
705
-
706
- const handlerA = jest.fn();
707
- const handlerB = jest.fn();
708
-
709
- const entity = dataset.createEntity();
710
-
711
- dataset.addEntityEventListener(entity, 'a', handlerA);
712
- dataset.addEntityEventListener(entity, 'b', handlerB);
713
-
714
- expect(handlerA).not.toHaveBeenCalled();
715
- expect(handlerB).not.toHaveBeenCalled();
716
-
717
- dataset.sendEvent(entity, 'a', 'ahoy!');
718
-
719
- expect(handlerA).toHaveBeenLastCalledWith('ahoy!', entity);
720
- expect(handlerA).toHaveBeenCalledTimes(1);
721
-
722
- expect(handlerB).not.toHaveBeenCalled();
723
-
724
- dataset.sendEvent(entity, 'a', 'hey hey');
725
-
726
- expect(handlerA).toHaveBeenLastCalledWith('hey hey', entity);
727
- expect(handlerA).toHaveBeenCalledTimes(2);
728
-
729
- expect(handlerB).not.toHaveBeenCalled();
730
-
731
- dataset.removeEntityEventListener(entity, 'a', handlerA);
732
-
733
- dataset.sendEvent(entity, 'a', 'surprise!');
734
-
735
- //A shouldn't be invoked anymore
736
- expect(handlerA).toHaveBeenCalledTimes(2);
737
-
738
- dataset.sendEvent(entity, 'b', 'hello');
739
-
740
- expect(handlerB).toHaveBeenLastCalledWith('hello', entity);
741
- expect(handlerB).toHaveBeenCalledTimes(1);
742
- });
743
-
744
- test("removing listener during its invocation works correctly", () => {
745
- const dataset = new EntityComponentDataset();
746
-
747
- const handler = jest.fn(function () {
748
- //remove own handler
749
- dataset.removeEntityEventListener(entity, 'a', handler);
750
- });
751
-
752
- const entity = dataset.createEntity();
753
-
754
- dataset.addEntityEventListener(entity, 'a', handler);
755
-
756
- dataset.sendEvent(entity, 'a', 'hey hey');
757
-
758
- expect(handler).toHaveBeenCalledTimes(1);
759
- expect(handler).toHaveBeenCalledWith('hey hey', entity);
760
-
761
- //dispatch again, this time handler should not be invoked
762
- dataset.sendEvent(entity, 'a', 'woof');
763
-
764
- expect(handler).toHaveBeenCalledTimes(1);
765
- });
766
-
767
- test("entity event dispatch without listeners should not throw", () => {
768
- const dataset = new EntityComponentDataset();
769
-
770
- const entity = dataset.createEntity();
771
-
772
- expect(() => dataset.sendEvent(entity, 'a', 'hello')).not.toThrow();
773
- });
774
-
775
- test("entity event listener is automatically removed when entity is removed", () => {
776
- const dataset = new EntityComponentDataset();
777
- const handler = jest.fn();
778
-
779
- const entity = dataset.createEntity();
780
-
781
- dataset.addEntityEventListener(entity, 'a', handler);
782
-
783
- dataset.removeEntity(entity);
784
-
785
- //rebuild entity with the same id
786
- dataset.createEntitySpecific(entity);
787
-
788
- dataset.sendEvent(entity, 'a', 'hello');
789
-
790
- expect(handler).not.toHaveBeenCalled();
791
- });
792
-
793
- test("entity removal dispatches EntityRemoved event", () => {
794
- const dataset = new EntityComponentDataset();
795
- const handler = jest.fn();
796
-
797
- const entity = dataset.createEntity();
798
-
799
- dataset.addEntityEventListener(entity, EventType.EntityRemoved, handler);
800
-
801
- dataset.removeEntity(entity);
802
-
803
- expect(handler).toHaveBeenCalledTimes(1);
804
- expect(handler).toHaveBeenLastCalledWith(entity, entity);
805
- });
806
-
807
- test("adding component dispatches ComponentAdded event", () => {
808
- const dataset = new EntityComponentDataset();
809
- dataset.setComponentTypeMap([DummyComponentA]);
810
- const handler = jest.fn();
811
-
812
- const entity = dataset.createEntity();
813
-
814
- dataset.addEntityEventListener(entity, EventType.ComponentAdded, handler);
815
-
816
- const componentInstance = new DummyComponentA();
817
- dataset.addComponentToEntityByIndex(entity, 0, componentInstance);
818
-
819
- expect(handler).toHaveBeenCalledTimes(1);
820
- expect(handler).toHaveBeenLastCalledWith({ instance: componentInstance, klass: DummyComponentA }, entity);
821
- });
822
-
823
- test("removing component dispatches ComponentRemoved event", () => {
824
- const dataset = new EntityComponentDataset();
825
- dataset.setComponentTypeMap([DummyComponentA]);
826
- const handler = jest.fn();
827
-
828
- const entity = dataset.createEntity();
829
-
830
- dataset.addEntityEventListener(entity, EventType.ComponentRemoved, handler);
831
-
832
- const componentInstance = new DummyComponentA();
833
-
834
- dataset.addComponentToEntityByIndex(entity, 0, componentInstance);
835
-
836
- dataset.removeComponentFromEntityByIndex(entity, 0);
837
-
838
- expect(handler).toHaveBeenCalledTimes(1);
839
- expect(handler).toHaveBeenLastCalledWith({ instance: componentInstance, klass: DummyComponentA }, entity);
840
- });
841
- });
842
-
843
-
844
- describe('entity any event listener', () => {
845
- test('addEntityAnyEventListener to non-existing entity should throw an error', () => {
846
- const ecd = new EntityComponentDataset();
847
-
848
- expect(() => ecd.addEntityAnyEventListener(0, noop)).toThrow();
849
- });
850
-
851
- test('any event listener successfully captures an event', () => {
852
- const ecd = new EntityComponentDataset();
853
-
854
- const entity = ecd.createEntity();
855
-
856
- const f = jest.fn();
857
-
858
- ecd.addEntityAnyEventListener(entity, f);
859
-
860
- ecd.sendEvent(entity, 'x', 'event-data');
861
-
862
- expect(f).toHaveBeenCalledTimes(1);
863
- expect(f).toHaveBeenCalledWith('x', 'event-data', entity);
864
- });
865
-
866
- test('any event listener does not capture an events of another entity', () => {
867
- const ecd = new EntityComponentDataset();
868
-
869
- const entity_a = ecd.createEntity();
870
- const entity_b = ecd.createEntity();
871
-
872
- const f = jest.fn();
873
-
874
- ecd.addEntityAnyEventListener(entity_a, f);
875
-
876
- ecd.sendEvent(entity_b, 'x', 'event-data');
877
-
878
- expect(f).not.toHaveBeenCalled();
879
- });
880
-
881
- test('any event listener does not capture an events after being removed', () => {
882
- const ecd = new EntityComponentDataset();
883
-
884
- const entity = ecd.createEntity();
885
-
886
- const f = jest.fn();
887
-
888
- ecd.addEntityAnyEventListener(entity, f);
889
- ecd.removeAnyEventListener(entity, f);
890
-
891
- ecd.sendEvent(entity, 'x', 'event-data');
892
-
893
- expect(f).not.toHaveBeenCalled();
894
- });
895
- })