@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
@@ -897,6 +897,36 @@ function m4_multiply(out, a, b) {
897
897
  out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
898
898
  }
899
899
 
900
+ /**
901
+ *
902
+ * @param {SignalHandler} first
903
+ * @param {function} handle
904
+ * @param {*} [thisArg]
905
+ */
906
+ function signal_handler_list_find(first, handle, thisArg) {
907
+ let n = first;
908
+
909
+ for (; ;) {
910
+
911
+ if (n.handle === handle && n.context === thisArg) {
912
+ return n;
913
+ }
914
+
915
+ n = n.next;
916
+
917
+ if (n === null) {
918
+ return null;
919
+ }
920
+ }
921
+ }
922
+
923
+ const SignalFlags = {
924
+ /**
925
+ * If set - signal will not invoke handlers when dispatched
926
+ */
927
+ Silent: 1
928
+ };
929
+
900
930
  /**
901
931
  *
902
932
  * @enum {number}
@@ -909,6 +939,18 @@ const SignalHandlerFlags = {
909
939
  };
910
940
 
911
941
  class SignalHandler {
942
+ /**
943
+ * Optional field. Used for forming linked lists of handlers
944
+ * @type {SignalHandler|null}
945
+ */
946
+ next = null;
947
+
948
+ /**
949
+ * @private
950
+ * @type {number|SignalHandlerFlags}
951
+ */
952
+ flags = 0;
953
+
912
954
  /**
913
955
  *
914
956
  * @param {function} handle
@@ -916,15 +958,9 @@ class SignalHandler {
916
958
  */
917
959
  constructor(handle, context) {
918
960
 
919
-
920
961
  this.handle = handle;
921
962
  this.context = context;
922
963
 
923
- /**
924
- * @private
925
- * @type {number|SignalHandlerFlags}
926
- */
927
- this.flags = 0;
928
964
  }
929
965
 
930
966
  /**
@@ -975,126 +1011,6 @@ class SignalHandler {
975
1011
  */
976
1012
  SignalHandler.prototype.isSignalHandler = true;
977
1013
 
978
- /**
979
- * Common dispatch stack
980
- * @readonly
981
- * @type {SignalHandler[]}
982
- */
983
- const dispatch_stack$1 = [];
984
- let dispatch_stack_top$1 = 0;
985
-
986
- /**
987
- *
988
- * @param {function} f
989
- * @param {*} context
990
- * @param {Array} args
991
- */
992
- function dispatchCallback(f, context, args) {
993
-
994
- try {
995
- f.apply(context, args);
996
- } catch (e) {
997
- }
998
- }
999
-
1000
- /**
1001
- *
1002
- * @param {SignalHandler[]} handlers
1003
- * @param {Array} [args]
1004
- */
1005
- function dispatchViaProxy(handlers, args) {
1006
- const length = handlers.length;
1007
-
1008
- const stack_pointer = dispatch_stack_top$1;
1009
- const stack_frame_end = stack_pointer + length;
1010
- dispatch_stack_top$1 = stack_frame_end;
1011
-
1012
- let i, h;
1013
- for (i = 0; i < length; i++) {
1014
- //copy to proxy
1015
- dispatch_stack$1[stack_pointer + i] = handlers[length - (i + 1)];
1016
- }
1017
-
1018
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1019
- h = dispatch_stack$1[i];
1020
-
1021
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1022
- //handler should be cut
1023
- const p = handlers.indexOf(h);
1024
- handlers.splice(p, 1);
1025
- }
1026
-
1027
- dispatchCallback(h.handle, h.context, args);
1028
- }
1029
-
1030
- //drop stack frame
1031
- dispatch_stack_top$1 = stack_pointer;
1032
- }
1033
-
1034
- /**
1035
- *
1036
- * @param {SignalHandler[]} handlers
1037
- * @param {function} f
1038
- * @param {*} [thisArg]
1039
- * @returns {number} index of the handler, or -1 if not found
1040
- */
1041
- function findSignalHandlerIndexByHandle(handlers, f, thisArg) {
1042
- const l = handlers.length;
1043
-
1044
- for (let i = 0; i < l; i++) {
1045
- const signalHandler = handlers[i];
1046
-
1047
- if (signalHandler.handle === f) {
1048
-
1049
- if (thisArg !== undefined && thisArg !== signalHandler.context) {
1050
- //context variable doesn't match
1051
- continue;
1052
- }
1053
-
1054
- return i;
1055
- }
1056
- }
1057
-
1058
- return -1;
1059
- }
1060
-
1061
- /**
1062
- *
1063
- * @param {SignalHandler[]} handlers
1064
- * @param {function} f
1065
- * @param {*} ctx
1066
- * @returns {number} index of the handler, or -1 if not found
1067
- */
1068
- function findSignalHandlerIndexByHandleAndContext(handlers, f, ctx) {
1069
- const l = handlers.length;
1070
-
1071
- for (let i = 0; i < l; i++) {
1072
- const handler = handlers[i];
1073
-
1074
- if (handler.handle === f && handler.context === ctx) {
1075
- return i;
1076
- }
1077
-
1078
- }
1079
-
1080
- return -1;
1081
- }
1082
-
1083
- const SignalFlags = {
1084
- /**
1085
- * If set - signal will not invoke handlers when dispatched
1086
- */
1087
- Silent: 1
1088
- };
1089
-
1090
- /**
1091
- * Common dispatch stack
1092
- * @readonly
1093
- * @type {SignalHandler[]}
1094
- */
1095
- const dispatch_stack = [];
1096
- let dispatch_stack_top = 0;
1097
-
1098
1014
  /**
1099
1015
  * Signal is a type of event bus. You can subscribe to events using {@link add} method and dispatch using sendN method where N is the number of arguments you wish to pass
1100
1016
  * Signal is different from a normal event bus in that 1 signal corresponds to 1 event type. For example, in HTML you have `addEventListener` which lets you subscribe to any kind of event, let's use "mousedown" as a reference. Using a Signal you would instead have a signal corresponding to "mousedown" and dispatch this signal only for this event.
@@ -1102,10 +1018,11 @@ let dispatch_stack_top = 0;
1102
1018
  */
1103
1019
  class Signal {
1104
1020
  /**
1021
+ * Map is used to speed up lookup when removing handlers in case of large number of listeners.
1105
1022
  * @private
1106
- * @type {SignalHandler[]}
1023
+ * @type {Map<function,SignalHandler>}
1107
1024
  */
1108
- handlers = [];
1025
+ handlers = new Map();
1109
1026
 
1110
1027
  /**
1111
1028
  * Internal flag bitmask
@@ -1182,9 +1099,15 @@ class Signal {
1182
1099
  contains(handler, thisArg) {
1183
1100
  const handlers = this.handlers;
1184
1101
 
1185
- const i = findSignalHandlerIndexByHandle(handlers, handler, thisArg);
1102
+ const sh = handlers.get(handler);
1186
1103
 
1187
- return i !== -1;
1104
+ if (sh === undefined) {
1105
+ return false;
1106
+ }
1107
+
1108
+ const existing = signal_handler_list_find(sh, handler, thisArg);
1109
+
1110
+ return existing !== null;
1188
1111
  }
1189
1112
 
1190
1113
  mute() {
@@ -1200,7 +1123,7 @@ class Signal {
1200
1123
  * @returns {boolean}
1201
1124
  */
1202
1125
  hasHandlers() {
1203
- return this.handlers.length > 0;
1126
+ return this.handlers.size > 0;
1204
1127
  }
1205
1128
 
1206
1129
  /**
@@ -1214,7 +1137,7 @@ class Signal {
1214
1137
 
1215
1138
  handler.setFlag(SignalHandlerFlags.RemoveAfterExecution);
1216
1139
 
1217
- this.handlers.push(handler);
1140
+ this.#add_handler(handler);
1218
1141
  }
1219
1142
 
1220
1143
  /**
@@ -1224,15 +1147,36 @@ class Signal {
1224
1147
  */
1225
1148
  add(h, context) {
1226
1149
 
1227
- // if (!ENV_PRODUCTION) {
1228
- // if (this.handlers.length + 1 === 100) {
1229
- // console.error(`Number of handlers has is 100 now, possible leak detected`);
1230
- // }
1231
- // }
1232
-
1233
1150
  const handler = new SignalHandler(h, context);
1234
1151
 
1235
- this.handlers.push(handler);
1152
+ this.#add_handler(handler);
1153
+
1154
+ }
1155
+
1156
+ /**
1157
+ *
1158
+ * @param {SignalHandler} handler
1159
+ */
1160
+ #add_handler(handler) {
1161
+
1162
+ const f = handler.handle;
1163
+ const first = this.handlers.get(f);
1164
+
1165
+ if (first === undefined) {
1166
+ this.handlers.set(f, handler);
1167
+ } else {
1168
+
1169
+ handler.next = first;
1170
+ this.handlers.set(f,handler);
1171
+
1172
+ // const last = signal_handler_list_last(first);
1173
+
1174
+ // last.next = handler;
1175
+
1176
+ // assert.ok(signal_handler_list_validate(first, console.error), 'invalid configuration');
1177
+
1178
+ }
1179
+
1236
1180
  }
1237
1181
 
1238
1182
  /**
@@ -1243,11 +1187,44 @@ class Signal {
1243
1187
  */
1244
1188
  remove(h, thisArg) {
1245
1189
 
1246
- if (thisArg === undefined) {
1247
- return removeHandlerByHandler(this, h);
1248
- } else {
1249
- return removeHandlerByHandlerAndContext(this, h, thisArg);
1190
+ const first = this.handlers.get(h);
1191
+
1192
+ if (first === undefined) {
1193
+ return false;
1194
+ }
1195
+
1196
+ if (first.handle === h && first.context === thisArg) {
1197
+ if (first.next === null) {
1198
+ this.handlers.delete(h);
1199
+ } else {
1200
+ this.handlers.set(h, first.next);
1201
+ // assert.ok(signal_handler_list_validate(first.next, console.error), 'invalid configuration');
1202
+ }
1203
+
1204
+ return true;
1205
+ }
1206
+
1207
+ let previous = first;
1208
+ let n = first.next;
1209
+
1210
+ while (n !== null) {
1211
+
1212
+ if (n.handle === h && n.context === thisArg) {
1213
+
1214
+ previous.next = n.next;
1215
+
1216
+ // assert.ok(signal_handler_list_validate(first, console.error), 'invalid configuration');
1217
+
1218
+ return true;
1219
+
1220
+ }
1221
+
1222
+ previous = n;
1223
+ n = n.next;
1224
+
1250
1225
  }
1226
+
1227
+ return false;
1251
1228
  }
1252
1229
 
1253
1230
  /**
@@ -1258,8 +1235,58 @@ class Signal {
1258
1235
  * @deprecated
1259
1236
  */
1260
1237
  removeAll() {
1261
- const handlers = this.handlers;
1262
- handlers.splice(0, handlers.length);
1238
+ this.handlers.clear();
1239
+ }
1240
+
1241
+ /**
1242
+ *
1243
+ * @param {SignalHandler} handler
1244
+ */
1245
+ #remove_handler_internal(handler) {
1246
+
1247
+ const first = this.handlers.get(handler.handle);
1248
+
1249
+ if (first === undefined) {
1250
+ // nothing
1251
+ return false;
1252
+ }
1253
+
1254
+ // special case for first
1255
+ if (first === handler) {
1256
+
1257
+ if (first.next === null) {
1258
+ // was the only one
1259
+ this.handlers.delete(handler.handle);
1260
+ } else {
1261
+ this.handlers.set(handler.handle, first.next);
1262
+ // assert.ok(signal_handler_list_validate(first.next, console.error), 'invalid configuration');
1263
+ }
1264
+
1265
+ return true;
1266
+ }
1267
+
1268
+ let previous = first;
1269
+ let n = first.next;
1270
+
1271
+ while (n !== null) {
1272
+
1273
+ const next = n.next;
1274
+
1275
+ if (n === handler) {
1276
+ previous.next = next;
1277
+
1278
+ // assert.ok(signal_handler_list_validate(first, console.error), 'invalid configuration');
1279
+
1280
+ return true;
1281
+ }
1282
+
1283
+ previous = n;
1284
+ n = next;
1285
+
1286
+ }
1287
+
1288
+ // not found
1289
+ return false;
1263
1290
  }
1264
1291
 
1265
1292
  /**
@@ -1272,10 +1299,38 @@ class Signal {
1272
1299
  return;
1273
1300
  }
1274
1301
 
1275
- dispatchViaProxy(this.handlers, args);
1302
+ const handlers = this.handlers;
1303
+
1304
+ for (const handle of handlers.values()) {
1305
+
1306
+ let _h = handle;
1307
+
1308
+ do {
1309
+
1310
+ const next = _h.next;
1311
+
1312
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1313
+ //handler should be cut
1314
+ this.#remove_handler_internal(_h);
1315
+ }
1316
+
1317
+ const _f = _h.handle;
1318
+
1319
+ try {
1320
+ _f.apply(_h.context, args);
1321
+ } catch (e) {
1322
+ }
1323
+
1324
+ _h = next;
1325
+
1326
+ } while (_h !== null);
1327
+
1328
+
1329
+ }
1276
1330
 
1277
1331
  }
1278
1332
 
1333
+
1279
1334
  /**
1280
1335
  * dispatch without a value.
1281
1336
  * Allows JS engine to optimize for monomorphic call sites
@@ -1288,41 +1343,33 @@ class Signal {
1288
1343
 
1289
1344
  const handlers = this.handlers;
1290
1345
 
1291
- const length = handlers.length;
1346
+ for (const handle of handlers.values()) {
1292
1347
 
1293
- const stack_pointer = dispatch_stack_top;
1294
- const stack_frame_end = stack_pointer + length;
1295
- dispatch_stack_top = stack_frame_end;
1348
+ let _h = handle;
1296
1349
 
1297
- let i, h;
1350
+ do {
1298
1351
 
1299
- // Copy handlers into a temp storage to preserve state during dispatch
1300
- for (i = 0; i < length; i++) {
1301
- //copy to proxy
1302
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1303
- }
1352
+ const next = _h.next;
1304
1353
 
1305
- // Dispatch phase
1306
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1307
- h = dispatch_stack[i];
1354
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1355
+ //handler should be cut
1356
+ this.#remove_handler_internal(_h);
1357
+ }
1308
1358
 
1309
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1310
- //handler should be cut
1311
- const p = handlers.indexOf(h);
1312
- handlers.splice(p, 1);
1313
- }
1359
+ const _f = _h.handle;
1360
+
1361
+ try {
1362
+ _f.call(_h.context);
1363
+ } catch (e) {
1364
+ }
1314
1365
 
1315
- const f = h.handle;
1366
+ _h = next;
1367
+
1368
+ } while (_h !== null);
1316
1369
 
1317
- try {
1318
- f.call(h.context);
1319
- } catch (e) {
1320
- }
1321
1370
 
1322
1371
  }
1323
1372
 
1324
- //drop stack frame
1325
- dispatch_stack_top = stack_pointer;
1326
1373
  }
1327
1374
 
1328
1375
  /**
@@ -1338,42 +1385,33 @@ class Signal {
1338
1385
 
1339
1386
  const handlers = this.handlers;
1340
1387
 
1341
- const length = handlers.length;
1388
+ for (const handle of handlers.values()) {
1342
1389
 
1343
- const stack_pointer = dispatch_stack_top;
1344
- const stack_frame_end = stack_pointer + length;
1345
- dispatch_stack_top = stack_frame_end;
1390
+ let _h = handle;
1346
1391
 
1392
+ do {
1347
1393
 
1348
- let i, h;
1394
+ const next = _h.next;
1349
1395
 
1350
- // Copy handlers into a temp storage to preserve state during dispatch
1351
- for (i = 0; i < length; i++) {
1352
- //copy to proxy
1353
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1354
- }
1396
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1397
+ //handler should be cut
1398
+ this.#remove_handler_internal(_h);
1399
+ }
1355
1400
 
1356
- // Dispatch phase
1357
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1358
- h = dispatch_stack[i];
1401
+ const _f = _h.handle;
1359
1402
 
1360
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1361
- //handler should be cut
1362
- const p = handlers.indexOf(h);
1363
- handlers.splice(p, 1);
1364
- }
1403
+ try {
1404
+ _f.call(_h.context, arg);
1405
+ } catch (e) {
1406
+ }
1365
1407
 
1366
- const f = h.handle;
1408
+ _h = next;
1409
+
1410
+ } while (_h !== null);
1367
1411
 
1368
- try {
1369
- f.call(h.context, arg);
1370
- } catch (e) {
1371
- }
1372
1412
 
1373
1413
  }
1374
1414
 
1375
- //drop stack frame
1376
- dispatch_stack_top = stack_pointer;
1377
1415
  }
1378
1416
 
1379
1417
  /**
@@ -1389,41 +1427,32 @@ class Signal {
1389
1427
 
1390
1428
  const handlers = this.handlers;
1391
1429
 
1392
- const length = handlers.length;
1430
+ for (const handle of handlers.values()) {
1393
1431
 
1394
- const stack_pointer = dispatch_stack_top;
1395
- const stack_frame_end = stack_pointer + length;
1396
- dispatch_stack_top = stack_frame_end;
1432
+ let _h = handle;
1397
1433
 
1398
- let i, h;
1434
+ do {
1399
1435
 
1400
- // Copy handlers into a temp storage to preserve state during dispatch
1401
- for (i = 0; i < length; i++) {
1402
- //copy to proxy
1403
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1404
- }
1436
+ const next = _h.next;
1405
1437
 
1406
- // Dispatch phase
1407
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1408
- h = dispatch_stack[i];
1438
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1439
+ //handler should be cut
1440
+ this.#remove_handler_internal(_h);
1441
+ }
1409
1442
 
1410
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1411
- //handler should be cut
1412
- const p = handlers.indexOf(h);
1413
- handlers.splice(p, 1);
1414
- }
1443
+ const _f = _h.handle;
1415
1444
 
1416
- const f = h.handle;
1445
+ try {
1446
+ _f.call(_h.context, a, b);
1447
+ } catch (e) {
1448
+ }
1417
1449
 
1418
- try {
1419
- f.call(h.context, a, b);
1420
- } catch (e) {
1421
- }
1450
+ _h = next;
1451
+
1452
+ } while (_h !== null);
1422
1453
 
1423
- }
1424
1454
 
1425
- //drop stack frame
1426
- dispatch_stack_top = stack_pointer;
1455
+ }
1427
1456
  }
1428
1457
 
1429
1458
  /**
@@ -1438,43 +1467,35 @@ class Signal {
1438
1467
  return;
1439
1468
  }
1440
1469
 
1470
+
1441
1471
  const handlers = this.handlers;
1442
1472
 
1443
- const length = handlers.length;
1473
+ for (const handle of handlers.values()) {
1444
1474
 
1445
- const stack_pointer = dispatch_stack_top;
1446
- const stack_frame_end = stack_pointer + length;
1447
- dispatch_stack_top = stack_frame_end;
1475
+ let _h = handle;
1448
1476
 
1449
- let i, h;
1477
+ do {
1450
1478
 
1451
- // Copy handlers into a temp storage to preserve state during dispatch
1452
- for (i = 0; i < length; i++) {
1453
- //copy to proxy
1454
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1455
- }
1479
+ const next = _h.next;
1456
1480
 
1457
- // Dispatch phase
1458
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1459
- h = dispatch_stack[i];
1481
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1482
+ //handler should be cut
1483
+ this.#remove_handler_internal(_h);
1484
+ }
1460
1485
 
1461
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1462
- //handler should be cut
1463
- const p = handlers.indexOf(h);
1464
- handlers.splice(p, 1);
1465
- }
1486
+ const _f = _h.handle;
1466
1487
 
1467
- const f = h.handle;
1488
+ try {
1489
+ _f.call(_h.context, a, b, c);
1490
+ } catch (e) {
1491
+ }
1468
1492
 
1469
- try {
1470
- f.call(h.context, a, b, c);
1471
- } catch (e) {
1472
- }
1493
+ _h = next;
1473
1494
 
1474
- }
1495
+ } while (_h !== null);
1475
1496
 
1476
- //drop stack frame
1477
- dispatch_stack_top = stack_pointer;
1497
+
1498
+ }
1478
1499
  }
1479
1500
 
1480
1501
  /**
@@ -1490,43 +1511,35 @@ class Signal {
1490
1511
  return;
1491
1512
  }
1492
1513
 
1514
+
1493
1515
  const handlers = this.handlers;
1494
1516
 
1495
- const length = handlers.length;
1517
+ for (const handle of handlers.values()) {
1496
1518
 
1497
- const stack_pointer = dispatch_stack_top;
1498
- const stack_frame_end = stack_pointer + length;
1499
- dispatch_stack_top = stack_frame_end;
1519
+ let _h = handle;
1500
1520
 
1501
- let i, h;
1521
+ do {
1502
1522
 
1503
- // Copy handlers into a temp storage to preserve state during dispatch
1504
- for (i = 0; i < length; i++) {
1505
- //copy to proxy
1506
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1507
- }
1523
+ const next = _h.next;
1508
1524
 
1509
- // Dispatch phase
1510
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1511
- h = dispatch_stack[i];
1525
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1526
+ //handler should be cut
1527
+ this.#remove_handler_internal(_h);
1528
+ }
1512
1529
 
1513
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1514
- //handler should be cut
1515
- const p = handlers.indexOf(h);
1516
- handlers.splice(p, 1);
1517
- }
1530
+ const _f = _h.handle;
1518
1531
 
1519
- const f = h.handle;
1532
+ try {
1533
+ _f.call(_h.context, a, b, c, d);
1534
+ } catch (e) {
1535
+ }
1520
1536
 
1521
- try {
1522
- f.call(h.context, a, b, c, d);
1523
- } catch (e) {
1524
- }
1537
+ _h = next;
1525
1538
 
1526
- }
1539
+ } while (_h !== null);
1527
1540
 
1528
- //drop stack frame
1529
- dispatch_stack_top = stack_pointer;
1541
+
1542
+ }
1530
1543
  }
1531
1544
 
1532
1545
  /**
@@ -1544,43 +1557,35 @@ class Signal {
1544
1557
  return;
1545
1558
  }
1546
1559
 
1560
+
1547
1561
  const handlers = this.handlers;
1548
1562
 
1549
- const length = handlers.length;
1563
+ for (const handle of handlers.values()) {
1550
1564
 
1551
- const stack_pointer = dispatch_stack_top;
1552
- const stack_frame_end = stack_pointer + length;
1553
- dispatch_stack_top = stack_frame_end;
1565
+ let _h = handle;
1554
1566
 
1555
- let i, h;
1567
+ do {
1556
1568
 
1557
- // Copy handlers into a temp storage to preserve state during dispatch
1558
- for (i = 0; i < length; i++) {
1559
- //copy to proxy
1560
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1561
- }
1569
+ const next = _h.next;
1562
1570
 
1563
- // Dispatch phase
1564
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1565
- h = dispatch_stack[i];
1571
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1572
+ //handler should be cut
1573
+ this.#remove_handler_internal(_h);
1574
+ }
1566
1575
 
1567
- if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1568
- //handler should be cut
1569
- const p = handlers.indexOf(h);
1570
- handlers.splice(p, 1);
1571
- }
1576
+ const _f = _h.handle;
1572
1577
 
1573
- const handle = h.handle;
1578
+ try {
1579
+ _f.call(_h.context, a, b, c, d, e, f);
1580
+ } catch (e) {
1581
+ }
1574
1582
 
1575
- try {
1576
- handle.call(h.context, a, b, c, d, e, f);
1577
- } catch (e) {
1578
- }
1583
+ _h = next;
1579
1584
 
1580
- }
1585
+ } while (_h !== null);
1581
1586
 
1582
- //drop stack frame
1583
- dispatch_stack_top = stack_pointer;
1587
+
1588
+ }
1584
1589
  }
1585
1590
 
1586
1591
  /**
@@ -1602,41 +1607,32 @@ class Signal {
1602
1607
 
1603
1608
  const handlers = this.handlers;
1604
1609
 
1605
- const length = handlers.length;
1610
+ for (const handle of handlers.values()) {
1606
1611
 
1607
- const stack_pointer = dispatch_stack_top;
1608
- const stack_frame_end = stack_pointer + length;
1609
- dispatch_stack_top = stack_frame_end;
1612
+ let _h = handle;
1610
1613
 
1611
- let i, handler;
1614
+ do {
1612
1615
 
1613
- // Copy handlers into a temp storage to preserve state during dispatch
1614
- for (i = 0; i < length; i++) {
1615
- //copy to proxy
1616
- dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
1617
- }
1616
+ const next = _h.next;
1618
1617
 
1619
- // Dispatch phase
1620
- for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
1621
- handler = dispatch_stack[i];
1618
+ if (_h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1619
+ //handler should be cut
1620
+ this.#remove_handler_internal(_h);
1621
+ }
1622
1622
 
1623
- if (handler.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
1624
- //handler should be cut
1625
- const p = handlers.indexOf(handler);
1626
- handlers.splice(p, 1);
1627
- }
1623
+ const _f = _h.handle;
1628
1624
 
1629
- const handle = handler.handle;
1625
+ try {
1626
+ _f.call(_h.context, a, b, c, d, e, f, g, h);
1627
+ } catch (e) {
1628
+ }
1630
1629
 
1631
- try {
1632
- handle.call(handler.context, a, b, c, d, e, f, g, h);
1633
- } catch (e) {
1634
- }
1630
+ _h = next;
1631
+
1632
+ } while (_h !== null);
1635
1633
 
1636
- }
1637
1634
 
1638
- //drop stack frame
1639
- dispatch_stack_top = stack_pointer;
1635
+ }
1640
1636
  }
1641
1637
 
1642
1638
  /**
@@ -1663,44 +1659,7 @@ class Signal {
1663
1659
  * @readonly
1664
1660
  * @type {boolean}
1665
1661
  */
1666
- Signal.prototype.isSignal = true;
1667
-
1668
- /**
1669
- *
1670
- * @param {Signal} signal
1671
- * @param {function} h
1672
- * @returns {boolean}
1673
- */
1674
- function removeHandlerByHandler(signal, h) {
1675
- const handlers = signal.handlers;
1676
- let i = findSignalHandlerIndexByHandle(handlers, h);
1677
-
1678
- if (i >= 0) {
1679
- handlers.splice(i, 1);
1680
- return true;
1681
- }
1682
-
1683
- return false;
1684
- }
1685
-
1686
- /**
1687
- *
1688
- * @param {Signal} signal
1689
- * @param {function} h
1690
- * @param {*} ctx
1691
- * @returns {boolean}
1692
- */
1693
- function removeHandlerByHandlerAndContext(signal, h, ctx) {
1694
- const handlers = signal.handlers;
1695
- const i = findSignalHandlerIndexByHandleAndContext(handlers, h, ctx);
1696
-
1697
- if (i >= 0) {
1698
- handlers.splice(i, 1);
1699
- return true;
1700
- }
1701
-
1702
- return false;
1703
- }
1662
+ Signal.prototype.isSignal = true;
1704
1663
 
1705
1664
  /**
1706
1665
  * Constrain a value to lie between specified min/max values
@@ -69808,7 +69767,6 @@ function frustum_from_camera(camera, result, update_projection = true) {
69808
69767
  result.setFromProjectionMatrix(matrix4);
69809
69768
  }
69810
69769
 
69811
- const m4_scratch = new Matrix4();
69812
69770
  const v3_scratch_0 = new Vector3$1();
69813
69771
  const v3_scratch_1 = new Vector3$1();
69814
69772
 
@@ -69817,7 +69775,7 @@ const v3_scratch_1 = new Vector3$1();
69817
69775
  * @param {Quaternion} output
69818
69776
  * @param {Quaternion} input
69819
69777
  */
69820
- function invertQuaternionOrientation(output, input) {
69778
+ function quaternion_invert_orientation(output, input) {
69821
69779
  const forward = v3_scratch_0;
69822
69780
  const up = v3_scratch_1;
69823
69781
 
@@ -69827,9 +69785,12 @@ function invertQuaternionOrientation(output, input) {
69827
69785
  forward.applyQuaternion(input);
69828
69786
  up.applyQuaternion(input);
69829
69787
 
69830
- m4_scratch.lookAt(Vector3$1.zero, forward, up);
69788
+ // point in the opposite direction
69789
+ forward.negate();
69831
69790
 
69832
- output.setFromRotationMatrix(m4_scratch);
69791
+ output.lookRotation(
69792
+ forward, up
69793
+ );
69833
69794
  }
69834
69795
 
69835
69796
  //
@@ -69905,7 +69866,7 @@ class Camera {
69905
69866
  * @param {Quaternion} input
69906
69867
  */
69907
69868
  getReciprocalRotation(output, input) {
69908
- invertQuaternionOrientation(output, input);
69869
+ quaternion_invert_orientation(output, input);
69909
69870
  }
69910
69871
 
69911
69872
  get clip_far() {
@@ -70184,6 +70145,8 @@ function update_camera_transform(camera) {
70184
70145
  threeUpdateTransform(three_camera);
70185
70146
  }
70186
70147
 
70148
+ const scratch_quat = new Quaternion$1();
70149
+
70187
70150
  /**
70188
70151
  *
70189
70152
  * @param {THREE.Camera} object
@@ -70196,7 +70159,11 @@ function three_camera_set_transform_rotation(object, rotation) {
70196
70159
  See: https://github.com/mrdoob/three.js/blob/412b99a7f26e117ea97f40eb53d010ab81aa3279/src/core/Object3D.js#L282
70197
70160
  */
70198
70161
 
70199
- invertQuaternionOrientation(object.quaternion, rotation);
70162
+ quaternion_invert_orientation(scratch_quat, rotation);
70163
+
70164
+ object.quaternion.set(
70165
+ scratch_quat.x, scratch_quat.y, scratch_quat.z, scratch_quat.w
70166
+ );
70200
70167
 
70201
70168
  object.rotation.setFromQuaternion(object.quaternion);
70202
70169
 
@@ -93737,6 +93704,55 @@ function promiseTask(promise, name) {
93737
93704
  });
93738
93705
  }
93739
93706
 
93707
+ /**
93708
+ *
93709
+ * @param {SignalHandler[]} handlers
93710
+ * @param {function} f
93711
+ * @param {*} [thisArg]
93712
+ * @returns {number} index of the handler, or -1 if not found
93713
+ */
93714
+ function findSignalHandlerIndexByHandle(handlers, f, thisArg) {
93715
+ const l = handlers.length;
93716
+
93717
+ for (let i = 0; i < l; i++) {
93718
+ const signalHandler = handlers[i];
93719
+
93720
+ if (signalHandler.handle === f) {
93721
+
93722
+ if (thisArg !== undefined && thisArg !== signalHandler.context) {
93723
+ //context variable doesn't match
93724
+ continue;
93725
+ }
93726
+
93727
+ return i;
93728
+ }
93729
+ }
93730
+
93731
+ return -1;
93732
+ }
93733
+
93734
+ /**
93735
+ *
93736
+ * @param {SignalHandler[]} handlers
93737
+ * @param {function} f
93738
+ * @param {*} ctx
93739
+ * @returns {number} index of the handler, or -1 if not found
93740
+ */
93741
+ function findSignalHandlerIndexByHandleAndContext(handlers, f, ctx) {
93742
+ const l = handlers.length;
93743
+
93744
+ for (let i = 0; i < l; i++) {
93745
+ const handler = handlers[i];
93746
+
93747
+ if (handler.handle === f && handler.context === ctx) {
93748
+ return i;
93749
+ }
93750
+
93751
+ }
93752
+
93753
+ return -1;
93754
+ }
93755
+
93740
93756
  /**
93741
93757
  * Matches a supplies component mask against a larger set
93742
93758
  * @param {BitSet} componentOccupancy
@@ -96841,6 +96857,62 @@ class SoundEngine {
96841
96857
  }
96842
96858
  }
96843
96859
 
96860
+ /**
96861
+ * Common dispatch stack
96862
+ * @readonly
96863
+ * @type {SignalHandler[]}
96864
+ */
96865
+ const dispatch_stack = [];
96866
+ let dispatch_stack_top = 0;
96867
+
96868
+ /**
96869
+ *
96870
+ * @param {function} f
96871
+ * @param {*} context
96872
+ * @param {Array} args
96873
+ */
96874
+ function dispatchCallback(f, context, args) {
96875
+
96876
+ try {
96877
+ f.apply(context, args);
96878
+ } catch (e) {
96879
+ }
96880
+ }
96881
+
96882
+ /**
96883
+ *
96884
+ * @param {SignalHandler[]} handlers
96885
+ * @param {Array} [args]
96886
+ */
96887
+ function dispatchViaProxy(handlers, args) {
96888
+ const length = handlers.length;
96889
+
96890
+ const stack_pointer = dispatch_stack_top;
96891
+ const stack_frame_end = stack_pointer + length;
96892
+ dispatch_stack_top = stack_frame_end;
96893
+
96894
+ let i, h;
96895
+ for (i = 0; i < length; i++) {
96896
+ //copy to proxy
96897
+ dispatch_stack[stack_pointer + i] = handlers[length - (i + 1)];
96898
+ }
96899
+
96900
+ for (i = stack_frame_end - 1; i >= stack_pointer; i--) {
96901
+ h = dispatch_stack[i];
96902
+
96903
+ if (h.getFlag(SignalHandlerFlags.RemoveAfterExecution)) {
96904
+ //handler should be cut
96905
+ const p = handlers.indexOf(h);
96906
+ handlers.splice(p, 1);
96907
+ }
96908
+
96909
+ dispatchCallback(h.handle, h.context, args);
96910
+ }
96911
+
96912
+ //drop stack frame
96913
+ dispatch_stack_top = stack_pointer;
96914
+ }
96915
+
96844
96916
  class SimpleStateMachineDescription {
96845
96917
  constructor() {
96846
96918
  this.__states = new BitSet();