@woosh/meep-engine 2.110.14 → 2.111.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 (465) hide show
  1. package/build/meep.cjs +442 -370
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +442 -370
  4. package/editor/tools/v2/BlenderCameraOrientationGizmo.js +4 -2
  5. package/package.json +4 -2
  6. package/src/core/events/signal/Signal.d.ts.map +1 -1
  7. package/src/core/events/signal/Signal.js +289 -255
  8. package/src/core/events/signal/SignalHandler.d.ts +7 -2
  9. package/src/core/events/signal/SignalHandler.d.ts.map +1 -1
  10. package/src/core/events/signal/SignalHandler.js +12 -6
  11. package/src/core/events/signal/signal_handler_list_find.d.ts +8 -0
  12. package/src/core/events/signal/signal_handler_list_find.d.ts.map +1 -0
  13. package/src/core/events/signal/signal_handler_list_find.js +23 -0
  14. package/src/core/events/signal/signal_handler_list_last.d.ts +7 -0
  15. package/src/core/events/signal/signal_handler_list_last.d.ts.map +1 -0
  16. package/src/core/events/signal/signal_handler_list_last.js +14 -0
  17. package/src/core/events/signal/signal_handler_list_validate.d.ts +8 -0
  18. package/src/core/events/signal/signal_handler_list_validate.d.ts.map +1 -0
  19. package/src/core/events/signal/signal_handler_list_validate.js +29 -0
  20. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts +2 -3
  21. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
  22. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +3 -3
  23. package/src/engine/graphics/ecs/camera/Camera.d.ts.map +1 -1
  24. package/src/engine/graphics/ecs/camera/Camera.js +2 -2
  25. package/src/engine/graphics/ecs/camera/CameraSystem.d.ts.map +1 -1
  26. package/src/engine/graphics/ecs/camera/CameraSystem.js +10 -2
  27. package/src/engine/graphics/ecs/camera/quaternion_invert_orientation.d.ts +7 -0
  28. package/src/engine/graphics/ecs/camera/quaternion_invert_orientation.d.ts.map +1 -0
  29. package/src/engine/graphics/ecs/camera/{InvertQuaternionOrientation.js → quaternion_invert_orientation.js} +6 -5
  30. package/editor/actions/concrete/ModifyPatchSampler2DAction.spec.js +0 -30
  31. package/src/core/IdPool.spec.js +0 -29
  32. package/src/core/UUID.spec.js +0 -8
  33. package/src/core/binary/32BitEncoder.spec.js +0 -11
  34. package/src/core/binary/Base64.spec.js +0 -14
  35. package/src/core/binary/BinaryBuffer.spec.js +0 -324
  36. package/src/core/binary/BitSet.spec.js +0 -468
  37. package/src/core/binary/EncodingBinaryBuffer.spec.js +0 -16
  38. package/src/core/binary/align_32.spec.js +0 -11
  39. package/src/core/binary/align_4.spec.js +0 -20
  40. package/src/core/binary/data_view/DataViewStructAccessor.spec.js +0 -20
  41. package/src/core/binary/de_interleave_2_bits.spec.js +0 -21
  42. package/src/core/binary/dec2hex.spec.js +0 -13
  43. package/src/core/binary/hex2dec.spec.js +0 -22
  44. package/src/core/binary/int32_to_binary_string.spec.js +0 -9
  45. package/src/core/binary/operations/bitCount.spec.js +0 -19
  46. package/src/core/binary/operations/ceilPowerOfTwo.spec.js +0 -17
  47. package/src/core/binary/reverse_bits_uint32.spec.js +0 -18
  48. package/src/core/binary/split_by_2.spec.js +0 -22
  49. package/src/core/binary/split_by_3.spec.js +0 -22
  50. package/src/core/binary/uint8_to_float.spec.js +0 -7
  51. package/src/core/bvh2/binary/2/BinaryUint32BVH.spec.js +0 -136
  52. package/src/core/bvh2/bvh3/BVH.spec.js +0 -361
  53. package/src/core/bvh2/bvh3/BvhClient.spec.js +0 -51
  54. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_morton.spec.js +0 -60
  55. package/src/core/bvh2/bvh3/query/bvh_query_leaves_generic.spec.js +0 -22
  56. package/src/core/bvh2/bvh3/query/bvh_query_leaves_ray.spec.js +0 -64
  57. package/src/core/bvh2/bvh3/query/bvh_query_user_data_generic.spec.js +0 -29
  58. package/src/core/bvh2/bvh3/query/bvh_query_user_data_nearest_to_point.spec.js +0 -209
  59. package/src/core/bvh2/bvh3/query/compute_tight_near_far_clipping_planes.spec.js +0 -41
  60. package/src/core/cache/Cache.spec.js +0 -277
  61. package/src/core/cache/FrequencySketch.spec.js +0 -5
  62. package/src/core/cache/LoadingCache.spec.js +0 -120
  63. package/src/core/codegen/LineBuilder.spec.js +0 -41
  64. package/src/core/collection/CuckooFilter.spec.js +0 -111
  65. package/src/core/collection/RingBuffer.spec.js +0 -59
  66. package/src/core/collection/Stack.spec.js +0 -63
  67. package/src/core/collection/array/arrayPickBestElement.spec.js +0 -7
  68. package/src/core/collection/array/arraySetSortingDiff.spec.js +0 -74
  69. package/src/core/collection/array/array_contains_duplicates.spec.js +0 -14
  70. package/src/core/collection/array/array_copy.spec.js +0 -19
  71. package/src/core/collection/array/array_deduplicate.spec.js +0 -11
  72. package/src/core/collection/array/array_get_index_in_range.spec.js +0 -16
  73. package/src/core/collection/array/array_remove_first.spec.js +0 -39
  74. package/src/core/collection/array/array_shuffle.spec.js +0 -27
  75. package/src/core/collection/array/binarySearchHighIndex.spec.js +0 -51
  76. package/src/core/collection/array/isArrayEqual.spec.js +0 -25
  77. package/src/core/collection/array/typed/is_typed_array_equals.spec.js +0 -71
  78. package/src/core/collection/array/weightedRandomFromArray.spec.js +0 -22
  79. package/src/core/collection/heap/BinaryHeap.spec.js +0 -137
  80. package/src/core/collection/heap/Uint32Heap.spec.js +0 -172
  81. package/src/core/collection/list/List.spec.js +0 -438
  82. package/src/core/collection/list/ListForwarder.spec.js +0 -101
  83. package/src/core/collection/map/HashMap.spec.js +0 -291
  84. package/src/core/collection/queue/Deque.spec.js +0 -276
  85. package/src/core/collection/set/HashSet.spec.js +0 -39
  86. package/src/core/collection/set/compute_set_difference.spec.js +0 -45
  87. package/src/core/collection/set/compute_set_intersection.spec.js +0 -45
  88. package/src/core/collection/table/RowFirstTable.spec.js +0 -323
  89. package/src/core/collection/table/RowFirstTableSpec.spec.js +0 -49
  90. package/src/core/collection/table/bind/TableRecord.spec.js +0 -27
  91. package/src/core/color/Color.spec.js +0 -174
  92. package/src/core/color/YCbCr/YCbCr.spec.js +0 -16
  93. package/src/core/color/hex/hex2rgb.spec.js +0 -10
  94. package/src/core/color/hex/rgb2hex.spec.js +0 -13
  95. package/src/core/color/hsv/hsv2rgb.spec.js +0 -43
  96. package/src/core/color/kelvin/kelvin_to_rgb.spec.js +0 -61
  97. package/src/core/color/kelvin/rgb_to_kelvin.spec.js +0 -15
  98. package/src/core/color/oklab/Okhsv.spec.js +0 -17
  99. package/src/core/color/oklab/XYZ.spec.js +0 -17
  100. package/src/core/color/oklab/oklab_to_xyz.spec.js +0 -31
  101. package/src/core/color/oklab/xyz_to_oklab.spec.js +0 -31
  102. package/src/core/color/parse_color.spec.js +0 -18
  103. package/src/core/color/sRGB/sRGB.spec.js +0 -16
  104. package/src/core/color/xyz/XYZ.spec.js +0 -16
  105. package/src/core/events/signal/Signal.spec.js +0 -253
  106. package/src/core/events/signal/SignalBinding.spec.js +0 -58
  107. package/src/core/fsm/simple/SimpleStateMachine.spec.js +0 -107
  108. package/src/core/fsm/simple/SimpleStateMachineDescription.spec.js +0 -103
  109. package/src/core/function/extractFunctionBody.spec.js +0 -15
  110. package/src/core/geom/2d/Rectangle.spec.js +0 -62
  111. package/src/core/geom/2d/aabb/AABB2.spec.js +0 -153
  112. package/src/core/geom/2d/aabb/aabb2_compute_center_from_multiple.spec.js +0 -11
  113. package/src/core/geom/2d/aabb/aabb2_compute_overlap.spec.js +0 -56
  114. package/src/core/geom/2d/aabb/aabb2_contains.spec.js +0 -40
  115. package/src/core/geom/2d/aabb/aabb2_distance_to_point.spec.js +0 -17
  116. package/src/core/geom/2d/aabb/aabb2_intersects_ray.spec.js +0 -28
  117. package/src/core/geom/2d/aabb/aabb2_signed_distance_sqr_to_point.spec.js +0 -40
  118. package/src/core/geom/2d/bvh/BVH2D.spec.js +0 -359
  119. package/src/core/geom/2d/bvh/bvh2d_query_all_data_by_circle.spec.js +0 -89
  120. package/src/core/geom/2d/circle/circle_compute_circle_intersection.spec.js +0 -79
  121. package/src/core/geom/2d/compute_polygon_area_2d.spec.js +0 -10
  122. package/src/core/geom/2d/compute_triangle_area_2d.spec.js +0 -9
  123. package/src/core/geom/2d/convex-hull/convex_hull_jarvis_2d.spec.js +0 -33
  124. package/src/core/geom/2d/convex-hull/convex_hull_monotone_2d.spec.js +0 -33
  125. package/src/core/geom/2d/hash-grid/SpatialHashGrid.spec.js +0 -254
  126. package/src/core/geom/2d/hash-grid/shg_query_elements_circle.spec.js +0 -85
  127. package/src/core/geom/2d/hash-grid/shg_query_elements_line.spec.js +0 -102
  128. package/src/core/geom/2d/quad-tree/QuadTreeNode.spec.js +0 -235
  129. package/src/core/geom/2d/quad-tree/qt_match_data_by_circle.spec.js +0 -86
  130. package/src/core/geom/2d/quad-tree-binary/QuadTree.spec.js +0 -53
  131. package/src/core/geom/2d/r-tree/StaticR2Tree.spec.js +0 -62
  132. package/src/core/geom/2d/spline_bezier2_2d.spec.js +0 -16
  133. package/src/core/geom/2d/uv_map_circle_to_square.spec.js +0 -28
  134. package/src/core/geom/2d/uv_map_square_to_circle.spec.js +0 -30
  135. package/src/core/geom/3d/SurfacePoint3.spec.js +0 -116
  136. package/src/core/geom/3d/aabb/AABB3.spec.js +0 -257
  137. package/src/core/geom/3d/aabb/aabb3_array_intersects_point.spec.js +0 -48
  138. package/src/core/geom/3d/aabb/aabb3_build_corners.spec.js +0 -27
  139. package/src/core/geom/3d/aabb/aabb3_compute_distance_above_plane_max.spec.js +0 -8
  140. package/src/core/geom/3d/aabb/aabb3_compute_plane_side.spec.js +0 -25
  141. package/src/core/geom/3d/aabb/aabb3_corner_edge_mapping.spec.js +0 -39
  142. package/src/core/geom/3d/aabb/aabb3_edge_corner_mapping.spec.js +0 -32
  143. package/src/core/geom/3d/aabb/aabb3_expand_array.spec.js +0 -16
  144. package/src/core/geom/3d/aabb/aabb3_from_v3_array.spec.js +0 -32
  145. package/src/core/geom/3d/aabb/aabb3_intersects_aabb3.spec.js +0 -115
  146. package/src/core/geom/3d/aabb/aabb3_intersects_ray.spec.js +0 -161
  147. package/src/core/geom/3d/aabb/aabb3_matrix4_project.spec.js +0 -54
  148. package/src/core/geom/3d/aabb/aabb3_raycast.spec.js +0 -37
  149. package/src/core/geom/3d/aabb/aabb3_score_boxes_SAH.spec.js +0 -14
  150. package/src/core/geom/3d/cone/computeConePlaneSide.spec.js +0 -13
  151. package/src/core/geom/3d/cone/compute_bounding_cone_of_2_cones.spec.js +0 -95
  152. package/src/core/geom/3d/line/line3_compute_nearest_point_to_point.spec.js +0 -61
  153. package/src/core/geom/3d/mat4/MATRIX_4_IDENTITY.spec.js +0 -10
  154. package/src/core/geom/3d/mat4/m4_multiply.spec.js +0 -34
  155. package/src/core/geom/3d/mat4/m4_multiply_alphatensor.spec.js +0 -35
  156. package/src/core/geom/3d/morton/v3_morton_encode_transformed.spec.js +0 -20
  157. package/src/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +0 -41
  158. package/src/core/geom/3d/normal/octahedron/encoding.spec.js +0 -54
  159. package/src/core/geom/3d/plane/plane3_projectPoint.spec.js +0 -54
  160. package/src/core/geom/3d/plane/plane3_slerp.spec.js +0 -209
  161. package/src/core/geom/3d/ray/ray3_array_compose.spec.js +0 -14
  162. package/src/core/geom/3d/shape/TransformedShape3D.spec.js +0 -55
  163. package/src/core/geom/3d/shape/UnitCubeShape3D.spec.js +0 -42
  164. package/src/core/geom/3d/sphere/harmonics/sh3_dering_optimize_positive.spec.js +0 -53
  165. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js +0 -27
  166. package/src/core/geom/3d/sphere/sphere_intersects_point.spec.js +0 -134
  167. package/src/core/geom/3d/sphere/sphere_intersects_ray.spec.js +0 -60
  168. package/src/core/geom/3d/sphere/sphere_radius_sqr_from_v3_array_transformed.spec.js +0 -8
  169. package/src/core/geom/3d/tetrahedra/TetrahedralMesh.spec.js +0 -233
  170. package/src/core/geom/3d/tetrahedra/compute_bounding_simplex_3d.spec.js +0 -66
  171. package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.spec.js +0 -36
  172. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.js +0 -61
  173. package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_compute_sub_determinant.spec.js +0 -30
  174. package/src/core/geom/3d/tetrahedra/tetrahedron_compute_signed_volume.spec.js +0 -24
  175. package/src/core/geom/3d/tetrahedra/tetrahedron_contains_point.spec.js +0 -66
  176. package/src/core/geom/3d/topology/simplify/collapseEdge.spec.js +0 -24
  177. package/src/core/geom/3d/topology/struct/TopoEdge.spec.js +0 -52
  178. package/src/core/geom/3d/topology/struct/TopoVertex.spec.js +0 -128
  179. package/src/core/geom/3d/topology/struct/binary/BinaryElementPool.spec.js +0 -36
  180. package/src/core/geom/3d/topology/struct/binary/BinaryTopology.spec.js +0 -16
  181. package/src/core/geom/3d/topology/struct/binary/io/bt_index_geometry_to_topology.spec.js +0 -84
  182. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_has_vertex.spec.js +0 -15
  183. package/src/core/geom/3d/topology/struct/binary/query/bt_mesh_edge_other_vertex.spec.js +0 -16
  184. package/src/core/geom/3d/triangle/computeTriangleClosestPointToPointBarycentric.spec.js +0 -100
  185. package/src/core/geom/3d/triangle/computeTriangleRayIntersection.spec.js +0 -25
  186. package/src/core/geom/3d/triangle/computeTriangleRayIntersectionBarycentric.spec.js +0 -26
  187. package/src/core/geom/3d/v3_compute_triangle_normal.spec.js +0 -46
  188. package/src/core/geom/ConicRay.spec.js +0 -24
  189. package/src/core/geom/Quaternion.spec.js +0 -429
  190. package/src/core/geom/Vector1.spec.js +0 -74
  191. package/src/core/geom/Vector2.spec.js +0 -295
  192. package/src/core/geom/Vector3.spec.js +0 -285
  193. package/src/core/geom/Vector4.spec.js +0 -11
  194. package/src/core/geom/normalize_angle_rad.spec.js +0 -45
  195. package/src/core/geom/packing/computeBoundingSphereOfSpheres.spec.js +0 -24
  196. package/src/core/geom/packing/max-rect/MaxRectanglesPacker.spec.js +0 -60
  197. package/src/core/geom/packing/miniball/Miniball.spec.js +0 -35
  198. package/src/core/geom/packing/miniball/Subspan.spec.js +0 -51
  199. package/src/core/geom/random/randomPointOnBox.spec.js +0 -57
  200. package/src/core/geom/vec/vector_normalize.spec.js +0 -15
  201. package/src/core/geom/vec3/v3_angle_cos_between.spec.js +0 -124
  202. package/src/core/geom/vec3/v3_displace_in_direction.spec.js +0 -80
  203. package/src/core/geom/vec3/v3_distance_above_plane.spec.js +0 -40
  204. package/src/core/graph/Edge.spec.js +0 -85
  205. package/src/core/graph/SquareMatrix.spec.js +0 -102
  206. package/src/core/graph/coloring/colorizeGraphGreedy.spec.js +0 -26
  207. package/src/core/graph/convert_graph_to_dot_string.spec.js +0 -28
  208. package/src/core/graph/eigen/matrix_eigenvalues_in_place.spec.js +0 -57
  209. package/src/core/graph/graph_k_means_cluster.spec.js +0 -23
  210. package/src/core/graph/mn_graph_coarsen.spec.js +0 -45
  211. package/src/core/graph/v2/Graph.spec.js +0 -364
  212. package/src/core/json/resolvePath.spec.js +0 -14
  213. package/src/core/lang/reactive/compileReactiveExpression.spec.js +0 -169
  214. package/src/core/math/bessel_j0.spec.js +0 -43
  215. package/src/core/math/clamp.spec.js +0 -15
  216. package/src/core/math/computeGreatestCommonDivisor.spec.js +0 -9
  217. package/src/core/math/computeIsoscelesTriangleApexAngle.spec.js +0 -6
  218. package/src/core/math/computeWholeDivisorLow.spec.js +0 -9
  219. package/src/core/math/copysign.spec.js +0 -13
  220. package/src/core/math/epsilonEquals.spec.js +0 -17
  221. package/src/core/math/factorial.spec.js +0 -9
  222. package/src/core/math/fract.spec.js +0 -11
  223. package/src/core/math/hash/computeHashFloatArray.spec.js +0 -11
  224. package/src/core/math/hash/computeObjectHash.spec.js +0 -42
  225. package/src/core/math/hash/murmur3_32.spec.js +0 -8
  226. package/src/core/math/hash/squirrel3.spec.js +0 -16
  227. package/src/core/math/iabs.spec.js +0 -9
  228. package/src/core/math/interval/NumericInterval.spec.js +0 -89
  229. package/src/core/math/interval/isValueBetween.spec.js +0 -11
  230. package/src/core/math/interval/isValueBetweenInclusive.spec.js +0 -16
  231. package/src/core/math/interval/overlap1D.spec.js +0 -10
  232. package/src/core/math/inverseLerp.spec.js +0 -13
  233. package/src/core/math/isPowerOfTwo.spec.js +0 -9
  234. package/src/core/math/isqrt.spec.js +0 -9
  235. package/src/core/math/lerp.spec.js +0 -15
  236. package/src/core/math/linalg/solve_linear_system.spec.js +0 -70
  237. package/src/core/math/max.spec.js +0 -25
  238. package/src/core/math/max2.spec.js +0 -13
  239. package/src/core/math/max3.spec.js +0 -29
  240. package/src/core/math/min2.spec.js +0 -37
  241. package/src/core/math/min3.spec.js +0 -29
  242. package/src/core/math/newton_solver_1d.spec.js +0 -9
  243. package/src/core/math/nextOdd.spec.js +0 -9
  244. package/src/core/math/noise/create_simplex_noise_2d.spec.js +0 -21
  245. package/src/core/math/noise/sdnoise.spec.js +0 -87
  246. package/src/core/math/physics/irradiance/interpolate_irradiance_linear.spec.js +0 -20
  247. package/src/core/math/physics/irradiance/interpolate_irradiance_lograrithmic.spec.js +0 -18
  248. package/src/core/math/physics/irradiance/interpolate_irradiance_smith.spec.js +0 -20
  249. package/src/core/math/pingpong.spec.js +0 -11
  250. package/src/core/math/random/MersenneTwister.spec.js +0 -19
  251. package/src/core/math/random/randomFloatBetween.spec.js +0 -9
  252. package/src/core/math/random/randomGaussian.spec.js +0 -9
  253. package/src/core/math/random/randomIntegerBetween.spec.js +0 -8
  254. package/src/core/math/random/roundFair.spec.js +0 -12
  255. package/src/core/math/random/seededRandomMersenneTwister.spec.js +0 -10
  256. package/src/core/math/random/seededRandom_Mulberry32.spec.js +0 -19
  257. package/src/core/math/remap.spec.js +0 -15
  258. package/src/core/math/sign.spec.js +0 -13
  259. package/src/core/math/smoothStep.spec.js +0 -16
  260. package/src/core/math/smootherStep.spec.js +0 -16
  261. package/src/core/math/solveQuadratic.spec.js +0 -18
  262. package/src/core/math/spline/cubicCurve.spec.js +0 -13
  263. package/src/core/math/spline/makeCubicCurve.spec.js +0 -9
  264. package/src/core/math/spline/spline_bezier2.spec.js +0 -13
  265. package/src/core/math/spline/spline_bezier3_bounds.spec.js +0 -37
  266. package/src/core/math/spline/spline_hermite3.spec.js +0 -18
  267. package/src/core/math/spline/spline_hermite3_bounds.spec.js +0 -37
  268. package/src/core/math/statistics/computeSampleSize_Cochran.spec.js +0 -12
  269. package/src/core/math/statistics/computeStatisticalMean.spec.js +0 -9
  270. package/src/core/math/statistics/computeStatisticalPartialMedian.spec.js +0 -13
  271. package/src/core/math/statistics/computeStatisticalPercentile.spec.js +0 -11
  272. package/src/core/math/statistics/computeStatisticalVariance.spec.js +0 -10
  273. package/src/core/math/statistics/halton_sequence.spec.js +0 -40
  274. package/src/core/math/statistics/radical_inverse_VdC_base_2.spec.js +0 -9
  275. package/src/core/math/statistics/softmax.spec.js +0 -9
  276. package/src/core/model/BooleanVector3.spec.js +0 -51
  277. package/src/core/model/BoundedValue.spec.js +0 -17
  278. package/src/core/model/ModuleRegistry.spec.js +0 -31
  279. package/src/core/model/ObservedBoolean.spec.js +0 -81
  280. package/src/core/model/ObservedInteger.spec.js +0 -51
  281. package/src/core/model/node-graph/Connection.spec.js +0 -33
  282. package/src/core/model/node-graph/NodeGraph.spec.js +0 -107
  283. package/src/core/model/node-graph/node/NodeDescription.spec.js +0 -81
  284. package/src/core/model/node-graph/node/NodeInstance.spec.js +0 -82
  285. package/src/core/model/node-graph/node/NodeInstancePortReference.spec.js +0 -109
  286. package/src/core/model/node-graph/node/NodeRegistry.spec.js +0 -123
  287. package/src/core/model/node-graph/node/Port.spec.js +0 -102
  288. package/src/core/model/node-graph/type/DataType.spec.js +0 -47
  289. package/src/core/model/node-graph/type/ParametricDataType.spec.js +0 -63
  290. package/src/core/model/node-graph/visual/PortVisualData.spec.js +0 -16
  291. package/src/core/model/object/ObjectPoolFactory.spec.js +0 -54
  292. package/src/core/model/object/objectDeepEquals.spec.js +0 -54
  293. package/src/core/model/object/write_property.spec.js +0 -26
  294. package/src/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +0 -158
  295. package/src/core/model/reactive/js/compileReactiveToJS.spec.js +0 -14
  296. package/src/core/model/reactive/model/logic/ReactiveAnd.spec.js +0 -51
  297. package/src/core/model/reactive/model/logic/ReactiveOr.spec.js +0 -53
  298. package/src/core/model/reactive/model/terminal/ReactiveReference.spec.js +0 -26
  299. package/src/core/model/reactive/trigger/BlackboardTrigger.spec.js +0 -24
  300. package/src/core/model/reactive/trigger/ReactiveTrigger.spec.js +0 -5
  301. package/src/core/model/stat/LinearModifier.spec.js +0 -96
  302. package/src/core/model/stat/Stat.spec.js +0 -111
  303. package/src/core/parser/simple/readHexToken.spec.js +0 -21
  304. package/src/core/parser/simple/readIdentifierToken.spec.js +0 -32
  305. package/src/core/parser/simple/readNumberToken.spec.js +0 -17
  306. package/src/core/parser/simple/readReferenceToken.spec.js +0 -18
  307. package/src/core/parser/simple/readStringToken.spec.js +0 -57
  308. package/src/core/parser/simple/readUnsignedIntegerToken.spec.js +0 -6
  309. package/src/core/path/computeFileExtension.spec.js +0 -13
  310. package/src/core/path/computePathBase.spec.js +0 -13
  311. package/src/core/path/computePathDirectory.spec.js +0 -8
  312. package/src/core/primitives/array/computeStridedIntegerArrayHash.spec.js +0 -28
  313. package/src/core/primitives/numbers/computeHashFloat.spec.js +0 -14
  314. package/src/core/primitives/numbers/number_compare_ascending.spec.js +0 -9
  315. package/src/core/primitives/numbers/number_compare_descending.spec.js +0 -9
  316. package/src/core/primitives/numbers/number_format_by_thousands.spec.js +0 -12
  317. package/src/core/primitives/numbers/number_pretty_print.spec.js +0 -19
  318. package/src/core/primitives/strings/compareStrings.spec.js +0 -12
  319. package/src/core/primitives/strings/computeStringHash.spec.js +0 -20
  320. package/src/core/primitives/strings/insert_after.spec.js +0 -16
  321. package/src/core/primitives/strings/insert_before.spec.js +0 -16
  322. package/src/core/primitives/strings/string_capitalize.spec.js +0 -13
  323. package/src/core/primitives/strings/string_compute_common_prefix.spec.js +0 -23
  324. package/src/core/primitives/strings/string_format_camel_to_kebab.spec.js +0 -8
  325. package/src/core/primitives/strings/string_jaro_winkler.spec.js +0 -39
  326. package/src/core/primitives/strings/string_strip_trailing.spec.js +0 -27
  327. package/src/core/process/PromiseWatcher.spec.js +0 -69
  328. package/src/core/process/executor/ConcurrentExecutor.spec.js +0 -135
  329. package/src/core/process/task/util/actionTask.spec.js +0 -14
  330. package/src/core/process/task/util/countTask.spec.js +0 -18
  331. package/src/core/process/undo/ActionProcessor.spec.js +0 -64
  332. package/src/engine/Clock.spec.js +0 -26
  333. package/src/engine/Engine.spec.js +0 -15
  334. package/src/engine/achievements/Achievement.spec.js +0 -21
  335. package/src/engine/animation/curve/AnimationCurve.spec.js +0 -248
  336. package/src/engine/animation/curve/Keyframe.spec.js +0 -42
  337. package/src/engine/animation/curve/animation_curve_optimize.spec.js +0 -50
  338. package/src/engine/animation/curve/compression/downsample_float_array_curve_by_error.spec.js +0 -47
  339. package/src/engine/animation/curve/compression/sample_animation_curve_to_float_array.spec.js +0 -29
  340. package/src/engine/animation/keyed2/AnimationTrackPlayback.spec.js +0 -94
  341. package/src/engine/asset/AssetDescription.spec.js +0 -27
  342. package/src/engine/asset/AssetManager.spec.js +0 -50
  343. package/src/engine/asset/loaders/image/png/PNG.spec.js +0 -5
  344. package/src/engine/asset/loaders/image/png/PNGReader.spec.js +0 -5
  345. package/src/engine/asset/loaders/image/png/crc.spec.js +0 -15
  346. package/src/engine/control/ControlContext.spec.js +0 -81
  347. package/src/engine/ecs/Entity.spec.js +0 -188
  348. package/src/engine/ecs/EntityBlueprint.spec.js +0 -52
  349. package/src/engine/ecs/EntityComponentDataset.spec.js +0 -895
  350. package/src/engine/ecs/EntityManager.spec.js +0 -210
  351. package/src/engine/ecs/EntityObserver.spec.js +0 -184
  352. package/src/engine/ecs/animation/Animation.spec.js +0 -22
  353. package/src/engine/ecs/animation/AnimationClip.spec.js +0 -5
  354. package/src/engine/ecs/components/Tag.spec.js +0 -47
  355. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.spec.js +0 -126
  356. package/src/engine/ecs/fow/FogOfWar.spec.js +0 -13
  357. package/src/engine/ecs/guid/UUID.spec.js +0 -100
  358. package/src/engine/ecs/guid/UUIDSerializationAdapter.spec.js +0 -21
  359. package/src/engine/ecs/parent/EntityNode.spec.js +0 -104
  360. package/src/engine/ecs/renderable/Renderable.spec.js +0 -10
  361. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.spec.js +0 -139
  362. package/src/engine/ecs/storage/binary/collection/BinaryCollectionSerialization.spec.js +0 -259
  363. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter.spec.js +0 -59
  364. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.spec.js +0 -123
  365. package/src/engine/ecs/terrain/ecs/Terrain.spec.js +0 -5
  366. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.spec.js +0 -38
  367. package/src/engine/ecs/terrain/overlay/TerrainOverlay.spec.js +0 -6
  368. package/src/engine/ecs/terrain/tiles/TerrainTile.spec.js +0 -25
  369. package/src/engine/ecs/tooltip/TooltipComponent.spec.js +0 -47
  370. package/src/engine/ecs/transform/Transform.spec.js +0 -310
  371. package/src/engine/ecs/transform/TransformSerializationAdapter.spec.js +0 -28
  372. package/src/engine/ecs/transform-attachment/TransformAttachment.spec.js +0 -103
  373. package/src/engine/graphics/ecs/animation/animator/graph/AnimationGraph.spec.js +0 -5
  374. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.spec.js +0 -5
  375. package/src/engine/graphics/ecs/camera/InvertQuaternionOrientation.d.ts +0 -7
  376. package/src/engine/graphics/ecs/camera/InvertQuaternionOrientation.d.ts.map +0 -1
  377. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraController.spec.js +0 -94
  378. package/src/engine/graphics/ecs/decal/v2/Decal.spec.js +0 -5
  379. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.spec.js +0 -19
  380. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMesh.spec.js +0 -5
  381. package/src/engine/graphics/ecs/mesh-v2/render/adapters/SGCacheKey.spec.js +0 -79
  382. package/src/engine/graphics/ecs/path/tube/TubePathStyle.spec.js +0 -5
  383. package/src/engine/graphics/ecs/path/tube/build/build_geometry_catmullrom.spec.js +0 -32
  384. package/src/engine/graphics/geometry/MikkT/MikkTSpace.spec.js +0 -28
  385. package/src/engine/graphics/geometry/bvh/buffered/bvh32_from_unindexed_geometry.spec.js +0 -22
  386. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.spec.js +0 -70
  387. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.spec.js +0 -47
  388. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.spec.js +0 -100
  389. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +0 -225
  390. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.spec.js +0 -215
  391. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.spec.js +0 -75
  392. package/src/engine/graphics/particles/particular/group/ParticleGroup.spec.js +0 -270
  393. package/src/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.spec.js +0 -21
  394. package/src/engine/graphics/render/forward_plus/LightManager.spec.js +0 -94
  395. package/src/engine/graphics/render/forward_plus/cluster/write_cluster_planes.spec.js +0 -79
  396. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.spec.js +0 -102
  397. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.spec.js +0 -78
  398. package/src/engine/graphics/texture/atlas/TextureAtlas.spec.js +0 -319
  399. package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +0 -99
  400. package/src/engine/graphics/texture/sampler/Sampler2D.spec.js +0 -224
  401. package/src/engine/graphics/texture/sampler/copy_Sampler2D_channel_data.spec.js +0 -90
  402. package/src/engine/graphics/texture/sampler/distance/computeSignedDistanceField_NaiveFlood.spec.js +0 -183
  403. package/src/engine/graphics/texture/sampler/distance/computeUnsignedDistanceField.spec.js +0 -183
  404. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale.spec.js +0 -73
  405. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_lanczos.spec.js +0 -31
  406. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_linear.spec.js +0 -44
  407. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_down_mipmap.spec.js +0 -13
  408. package/src/engine/graphics/texture/sampler/resize/sampler2d_scale_up_linear.spec.js +0 -14
  409. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_max.spec.js +0 -40
  410. package/src/engine/graphics/texture/sampler/sampler2d_channel_compute_min_indices.spec.js +0 -15
  411. package/src/engine/graphics/texture/sampler/sampler2d_copy_with_margins.spec.js +0 -31
  412. package/src/engine/graphics/texture/sampler/sampler2d_to_data_url.spec.js +0 -10
  413. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.spec.js +0 -52
  414. package/src/engine/graphics/texture/sampler/serialization/TextureBinaryBufferSerializer.spec.js +0 -38
  415. package/src/engine/graphics/three/expand_aabb_by_transformed_three_object.spec.js +0 -108
  416. package/src/engine/graphics/trail/x/RibbonX.spec.js +0 -5
  417. package/src/engine/grid/obstacle/GridObstacle.spec.js +0 -175
  418. package/src/engine/input/devices/InputDeviceSwitch.spec.js +0 -5
  419. package/src/engine/input/devices/KeyboardDevice.spec.js +0 -12
  420. package/src/engine/input/devices/PointerDevice.spec.js +0 -12
  421. package/src/engine/intelligence/behavior/Behavior.spec.js +0 -15
  422. package/src/engine/intelligence/behavior/SelectorBehavior.spec.js +0 -18
  423. package/src/engine/intelligence/behavior/behavior_to_dot.spec.js +0 -25
  424. package/src/engine/intelligence/behavior/composite/ParallelBehavior.spec.js +0 -166
  425. package/src/engine/intelligence/behavior/composite/SequenceBehavior.spec.js +0 -17
  426. package/src/engine/intelligence/behavior/decorator/RepeatBehavior.spec.js +0 -32
  427. package/src/engine/intelligence/behavior/ecs/BehaviorSystem.spec.js +0 -75
  428. package/src/engine/intelligence/behavior/util/ConditionBehavior.spec.js +0 -24
  429. package/src/engine/intelligence/blackboard/Blackboard.spec.js +0 -111
  430. package/src/engine/intelligence/blackboard/BlackboardSerializationAdapter.spec.js +0 -30
  431. package/src/engine/intelligence/blackboard/make_blackboard_proxy.spec.js +0 -23
  432. package/src/engine/intelligence/mcts/MonteCarlo.spec.js +0 -244
  433. package/src/engine/intelligence/mcts/StateNode.spec.js +0 -49
  434. package/src/engine/intelligence/optimization/RandomOptimizer.spec.js +0 -57
  435. package/src/engine/intelligence/resource/ResourceAllocationSolver.spec.js +0 -104
  436. package/src/engine/intelligence/resource/StrategicResourceAllocator.spec.js +0 -46
  437. package/src/engine/knowledge/database/StaticKnowledgeDataTable.spec.js +0 -26
  438. package/src/engine/knowledge/database/StaticKnowledgeDatabase.spec.js +0 -23
  439. package/src/engine/navigation/ecs/components/Path.spec.js +0 -195
  440. package/src/engine/navigation/ecs/path_following/PathFollower.spec.js +0 -27
  441. package/src/engine/navigation/grid/find_path_on_grid_astar.spec.js +0 -87
  442. package/src/engine/notify/NotificationLog.spec.js +0 -17
  443. package/src/engine/options/Option.spec.js +0 -69
  444. package/src/engine/options/OptionGroup.spec.js +0 -61
  445. package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.js +0 -46
  446. package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.js +0 -43
  447. package/src/engine/plugin/EnginePlugin.spec.js +0 -5
  448. package/src/engine/reference/v2/Reference.spec.js +0 -44
  449. package/src/engine/scene/Scene.spec.js +0 -20
  450. package/src/engine/scene/SceneManager.spec.js +0 -131
  451. package/src/engine/sound/ecs/emitter/SoundEmitterSerializationAdapter.spec.js +0 -49
  452. package/src/engine/ui/tiles2d/TileGrid.spec.js +0 -20
  453. package/src/engine/ui/tiles2d/computeTileGridMove.spec.js +0 -54
  454. package/src/generation/automata/CaveGeneratorCellularAutomata.spec.js +0 -12
  455. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.spec.js +0 -30
  456. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.spec.js +0 -17
  457. package/src/generation/filtering/numeric/process/computeCellFilterGradient.spec.js +0 -288
  458. package/src/generation/grid/GridData.spec.js +0 -46
  459. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.spec.js +0 -116
  460. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.spec.js +0 -106
  461. package/src/generation/placement/action/GridCellActionPlaceTags.spec.js +0 -21
  462. package/src/generation/rules/CellMatcherLayerBitMaskTest.spec.js +0 -22
  463. package/src/generation/rules/cell/GridPatternMatcher.spec.js +0 -285
  464. package/src/generation/theme/ThemeEngine.spec.js +0 -7
  465. 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
- })