@woosh/meep-engine 2.156.0 → 2.157.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 (654) hide show
  1. package/README.md +1 -3
  2. package/editor/view/ecs/components/common/AutoCanvasView.js +100 -53
  3. package/editor/view/ecs/components/common/TextController.js +59 -0
  4. package/editor/view/node-graph/NodeGraphCamera.js +90 -0
  5. package/editor/view/node-graph/NodeGraphEditorView.js +121 -22
  6. package/editor/view/node-graph/NodeGraphSelection.js +89 -0
  7. package/editor/view/node-graph/NodeGraphView.js +669 -453
  8. package/editor/view/node-graph/NodeView.js +211 -135
  9. package/editor/view/node-graph/actions/ConnectionCreateAction.js +53 -0
  10. package/editor/view/node-graph/actions/ConnectionDeleteAction.js +36 -0
  11. package/editor/view/node-graph/actions/NodeDeleteAction.js +88 -0
  12. package/editor/view/node-graph/actions/NodeParameterSetAction.js +52 -0
  13. package/editor/view/node-graph/actions/NodesMoveAction.js +41 -0
  14. package/editor/view/node-graph/actions/SelectionSetAction.js +60 -0
  15. package/editor/view/node-graph/connection_wire_geometry.js +107 -0
  16. package/package.json +1 -1
  17. package/samples/generation/SampleGenerator0.js +8 -1
  18. package/src/core/binary/reinterpret_float32_as_uint32.d.ts +7 -0
  19. package/src/core/binary/reinterpret_float32_as_uint32.d.ts.map +1 -0
  20. package/src/core/binary/reinterpret_float32_as_uint32.js +13 -0
  21. package/src/core/binary/reinterpret_uint32_as_float32.d.ts +7 -0
  22. package/src/core/binary/reinterpret_uint32_as_float32.d.ts.map +1 -0
  23. package/src/core/binary/reinterpret_uint32_as_float32.js +14 -0
  24. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.d.ts.map +1 -1
  25. package/src/core/bvh2/bvh3/ebvh_build_for_geometry_incremental.js +1 -3
  26. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts +12 -0
  27. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.d.ts.map +1 -0
  28. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.js +92 -0
  29. package/src/core/bvh8/BVH8.d.ts +127 -0
  30. package/src/core/bvh8/BVH8.d.ts.map +1 -0
  31. package/src/core/bvh8/BVH8.js +436 -0
  32. package/src/core/bvh8/NOTES.md +63 -0
  33. package/src/core/bvh8/build/BVH8Converter.d.ts +59 -0
  34. package/src/core/bvh8/build/BVH8Converter.d.ts.map +1 -0
  35. package/src/core/bvh8/build/BVH8Converter.js +588 -0
  36. package/src/core/bvh8/build/NodeProxy.d.ts +66 -0
  37. package/src/core/bvh8/build/NodeProxy.d.ts.map +1 -0
  38. package/src/core/bvh8/build/NodeProxy.js +308 -0
  39. package/src/core/bvh8/build/TriangleCluster.d.ts +29 -0
  40. package/src/core/bvh8/build/TriangleCluster.d.ts.map +1 -0
  41. package/src/core/bvh8/build/TriangleCluster.js +123 -0
  42. package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts +8 -0
  43. package/src/core/bvh8/build/aabb3_compute_merge_cost.d.ts.map +1 -0
  44. package/src/core/bvh8/build/aabb3_compute_merge_cost.js +29 -0
  45. package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts +10 -0
  46. package/src/core/bvh8/build/aabb3_from_triangle_by_index.d.ts.map +1 -0
  47. package/src/core/bvh8/build/aabb3_from_triangle_by_index.js +18 -0
  48. package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts +10 -0
  49. package/src/core/bvh8/build/bvh8_build_for_geometry.d.ts.map +1 -0
  50. package/src/core/bvh8/build/bvh8_build_for_geometry.js +303 -0
  51. package/src/core/bvh8/build/bvh8_from_proxy.d.ts +9 -0
  52. package/src/core/bvh8/build/bvh8_from_proxy.d.ts.map +1 -0
  53. package/src/core/bvh8/build/bvh8_from_proxy.js +256 -0
  54. package/src/core/bvh8/build/byte.d.ts +7 -0
  55. package/src/core/bvh8/build/byte.d.ts.map +1 -0
  56. package/src/core/bvh8/build/byte.js +10 -0
  57. package/src/core/bvh8/build/encode_bounds_e.d.ts +9 -0
  58. package/src/core/bvh8/build/encode_bounds_e.d.ts.map +1 -0
  59. package/src/core/bvh8/build/encode_bounds_e.js +12 -0
  60. package/src/core/bvh8/bvh8_convert_to_dot.d.ts +11 -0
  61. package/src/core/bvh8/bvh8_convert_to_dot.d.ts.map +1 -0
  62. package/src/core/bvh8/bvh8_convert_to_dot.js +133 -0
  63. package/src/core/bvh8/bvh8_count_primitives.d.ts +22 -0
  64. package/src/core/bvh8/bvh8_count_primitives.d.ts.map +1 -0
  65. package/src/core/bvh8/bvh8_count_primitives.js +98 -0
  66. package/src/core/bvh8/bvh8_geometry_validate.d.ts +16 -0
  67. package/src/core/bvh8/bvh8_geometry_validate.d.ts.map +1 -0
  68. package/src/core/bvh8/bvh8_geometry_validate.js +149 -0
  69. package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts +16 -0
  70. package/src/core/bvh8/bvh8_geometry_validate_indirect.d.ts.map +1 -0
  71. package/src/core/bvh8/bvh8_geometry_validate_indirect.js +177 -0
  72. package/src/core/bvh8/bvh8_get_node_bounds.d.ts +9 -0
  73. package/src/core/bvh8/bvh8_get_node_bounds.d.ts.map +1 -0
  74. package/src/core/bvh8/bvh8_get_node_bounds.js +35 -0
  75. package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts +10 -0
  76. package/src/core/bvh8/bvh8_get_node_child_bounds.d.ts.map +1 -0
  77. package/src/core/bvh8/bvh8_get_node_child_bounds.js +53 -0
  78. package/src/core/bvh8/bvh8_node_child_surface_area.d.ts +9 -0
  79. package/src/core/bvh8/bvh8_node_child_surface_area.d.ts.map +1 -0
  80. package/src/core/bvh8/bvh8_node_child_surface_area.js +18 -0
  81. package/src/core/bvh8/bvh8_node_count_triangles.d.ts +8 -0
  82. package/src/core/bvh8/bvh8_node_count_triangles.d.ts.map +1 -0
  83. package/src/core/bvh8/bvh8_node_count_triangles.js +28 -0
  84. package/src/core/bvh8/bvh8_quality.d.ts +8 -0
  85. package/src/core/bvh8/bvh8_quality.d.ts.map +1 -0
  86. package/src/core/bvh8/bvh8_quality.js +73 -0
  87. package/src/core/bvh8/bvh8_validate_structure.d.ts +15 -0
  88. package/src/core/bvh8/bvh8_validate_structure.d.ts.map +1 -0
  89. package/src/core/bvh8/bvh8_validate_structure.js +87 -0
  90. package/src/core/collection/Uint32MinHeap.d.ts +56 -0
  91. package/src/core/collection/Uint32MinHeap.d.ts.map +1 -0
  92. package/src/core/collection/Uint32MinHeap.js +109 -0
  93. package/src/core/collection/list/FilteredListProjection.js +1 -1
  94. package/src/{engine/physics/island → core/collection/union-find}/union_find.d.ts +8 -5
  95. package/src/core/collection/union-find/union_find.d.ts.map +1 -0
  96. package/src/{engine/physics/island → core/collection/union-find}/union_find.js +8 -5
  97. package/src/core/dom/isImageBitmap.d.ts +7 -0
  98. package/src/core/dom/isImageBitmap.d.ts.map +1 -0
  99. package/src/core/dom/isImageBitmap.js +12 -0
  100. package/src/core/function/frameThrottle.d.ts +8 -0
  101. package/src/core/function/frameThrottle.d.ts.map +1 -0
  102. package/src/core/function/frameThrottle.js +23 -0
  103. package/src/{engine/physics/narrowphase/clip_against_axis_uv.d.ts → core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts} +3 -3
  104. package/src/core/geom/2d/polygon/polygon2_clip_axis_halfplane.d.ts.map +1 -0
  105. package/src/{engine/physics/narrowphase/clip_against_axis_uv.js → core/geom/2d/polygon/polygon2_clip_axis_halfplane.js} +51 -51
  106. package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts → core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts} +9 -7
  107. package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -0
  108. package/src/{engine/physics/narrowphase/decomposition/aabb_world_to_local.js → core/geom/3d/aabb/aabb3_transform_oriented_inverse.js} +9 -7
  109. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts +12 -0
  110. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.d.ts.map +1 -0
  111. package/src/core/geom/3d/aabb/compute_triangle_group_aabb3.js +46 -0
  112. package/src/core/geom/3d/box/box3_projected_half_extent.d.ts +28 -0
  113. package/src/core/geom/3d/box/box3_projected_half_extent.d.ts.map +1 -0
  114. package/src/core/geom/3d/box/box3_projected_half_extent.js +35 -0
  115. package/src/core/geom/3d/frustum/read_cluster_frustum_corners.js +1 -1
  116. package/src/core/geom/3d/frustum/read_frustum_corner.d.ts +9 -0
  117. package/src/core/geom/3d/frustum/read_frustum_corner.d.ts.map +1 -0
  118. package/src/core/geom/3d/frustum/read_frustum_corner.js +14 -0
  119. package/src/core/geom/3d/gjk/gjk.d.ts.map +1 -0
  120. package/src/{engine/physics → core/geom/3d}/gjk/gjk.js +430 -372
  121. package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.d.ts +8 -5
  122. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -0
  123. package/src/{engine/physics → core/geom/3d}/gjk/gjk_epa_penetration.js +520 -544
  124. package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.d.ts +5 -4
  125. package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -0
  126. package/src/{engine/physics → core/geom/3d}/gjk/minkowski_support.js +71 -70
  127. package/src/{engine/physics → core/geom/3d}/gjk/mpr.d.ts +3 -3
  128. package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -0
  129. package/src/{engine/physics → core/geom/3d}/gjk/mpr.js +368 -362
  130. package/src/{engine/physics/integration/quat_integrate.d.ts → core/geom/3d/quaternion/quat3_integrate.d.ts} +2 -2
  131. package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -0
  132. package/src/{engine/physics/integration/quat_integrate.js → core/geom/3d/quaternion/quat3_integrate.js} +1 -1
  133. package/src/{engine/physics/narrowphase/PosedShape.d.ts → core/geom/3d/shape/PosedShape3D.d.ts} +9 -8
  134. package/src/{engine/physics/narrowphase/PosedShape.d.ts.map → core/geom/3d/shape/PosedShape3D.d.ts.map} +1 -1
  135. package/src/{engine/physics/narrowphase/PosedShape.js → core/geom/3d/shape/PosedShape3D.js} +10 -9
  136. package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
  137. package/src/core/geom/3d/shape/TransformedShape3D.js +15 -11
  138. package/src/core/geom/vec3/v3_quat3_apply_inverse.d.ts +1 -1
  139. package/src/core/geom/vec3/v3_quat3_apply_inverse.js +1 -1
  140. package/src/core/math/complex/complex_add.d.ts +1 -1
  141. package/src/core/math/complex/complex_add.d.ts.map +1 -1
  142. package/src/core/math/complex/complex_add.js +12 -3
  143. package/src/core/math/complex/complex_div.d.ts +1 -1
  144. package/src/core/math/complex/complex_div.d.ts.map +1 -1
  145. package/src/core/math/complex/complex_div.js +11 -4
  146. package/src/core/math/complex/complex_mul.d.ts +1 -1
  147. package/src/core/math/complex/complex_mul.d.ts.map +1 -1
  148. package/src/core/math/complex/complex_mul.js +10 -3
  149. package/src/core/math/complex/complex_sub.d.ts +1 -1
  150. package/src/core/math/complex/complex_sub.d.ts.map +1 -1
  151. package/src/core/math/complex/complex_sub.js +12 -3
  152. package/src/{engine/physics/fluid/solver/optimal_sor_omega.d.ts → core/math/linalg/sor_optimal_omega.d.ts} +4 -3
  153. package/src/core/math/linalg/sor_optimal_omega.d.ts.map +1 -0
  154. package/src/{engine/physics/fluid/solver/optimal_sor_omega.js → core/math/linalg/sor_optimal_omega.js} +4 -3
  155. package/src/core/math/lookup/ParameterLookupTable.d.ts +123 -0
  156. package/src/core/math/lookup/ParameterLookupTable.d.ts.map +1 -0
  157. package/src/core/math/lookup/ParameterLookupTable.js +495 -0
  158. package/src/core/math/lookup/ParameterLookupTableFlags.d.ts +5 -0
  159. package/src/core/math/lookup/ParameterLookupTableFlags.d.ts.map +1 -0
  160. package/src/core/math/lookup/ParameterLookupTableFlags.js +6 -0
  161. package/src/core/math/physics/kinematics/computeInterceptPoint.d.ts.map +1 -0
  162. package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.js +79 -79
  163. package/src/core/math/physics/mie/ri_air.d.ts.map +1 -1
  164. package/src/core/math/physics/mie/ri_air.js +1 -3
  165. package/src/core/math/physics/mie/ri_ammonium_sulfate.d.ts.map +1 -1
  166. package/src/core/math/physics/mie/ri_ammonium_sulfate.js +1 -3
  167. package/src/core/math/physics/mie/ri_brine.d.ts.map +1 -1
  168. package/src/core/math/physics/mie/ri_brine.js +1 -3
  169. package/src/core/math/physics/mie/ri_dust.d.ts.map +1 -1
  170. package/src/core/math/physics/mie/ri_dust.js +1 -3
  171. package/src/core/math/physics/mie/ri_pollen.d.ts.map +1 -1
  172. package/src/core/math/physics/mie/ri_pollen.js +1 -3
  173. package/src/core/math/physics/mie/ri_smoke.d.ts.map +1 -1
  174. package/src/core/math/physics/mie/ri_smoke.js +1 -3
  175. package/src/core/math/physics/mie/ri_soot.d.ts.map +1 -1
  176. package/src/core/math/physics/mie/ri_soot.js +1 -3
  177. package/src/core/math/physics/mie/ri_water.d.ts.map +1 -1
  178. package/src/core/math/physics/mie/ri_water.js +1 -3
  179. package/src/core/math/random/random_pick_weighted_index.d.ts +10 -0
  180. package/src/core/math/random/random_pick_weighted_index.d.ts.map +1 -0
  181. package/src/core/math/random/random_pick_weighted_index.js +26 -0
  182. package/src/core/model/node-graph/NodeGraph.d.ts +9 -0
  183. package/src/core/model/node-graph/NodeGraph.d.ts.map +1 -1
  184. package/src/core/model/node-graph/NodeGraph.js +38 -0
  185. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts +23 -0
  186. package/src/core/model/node-graph/visual/NodeGraphVisualData.d.ts.map +1 -1
  187. package/src/core/model/node-graph/visual/NodeGraphVisualData.js +54 -0
  188. package/src/core/path/convertPathToURL.d.ts +9 -0
  189. package/src/core/path/convertPathToURL.d.ts.map +1 -0
  190. package/src/core/path/convertPathToURL.js +107 -0
  191. package/src/core/process/worker/WorkerBuilder.js +1 -1
  192. package/src/core/process/worker/extractTransferables.js +1 -1
  193. package/src/engine/animation/curve/draw/build_tangent_editor.d.ts.map +1 -1
  194. package/src/engine/animation/curve/draw/build_tangent_editor.js +8 -1
  195. package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.d.ts.map +1 -1
  196. package/src/engine/animation/curve/editor/createKeyframeDraggableAspect.js +11 -5
  197. package/src/engine/asset/Asset.d.ts.map +1 -1
  198. package/src/engine/asset/Asset.js +16 -6
  199. package/src/engine/asset/AssetManager.d.ts +61 -52
  200. package/src/engine/asset/AssetManager.d.ts.map +1 -1
  201. package/src/engine/asset/AssetManager.js +1411 -1045
  202. package/src/engine/asset/AssetRequest.d.ts +1 -1
  203. package/src/engine/asset/AssetRequest.d.ts.map +1 -1
  204. package/src/engine/asset/AssetRequest.js +1 -1
  205. package/src/engine/asset/AssetRequestScope.d.ts.map +1 -1
  206. package/src/engine/asset/AssetRequestScope.js +7 -0
  207. package/src/engine/asset/PendingAsset.d.ts +32 -1
  208. package/src/engine/asset/PendingAsset.d.ts.map +1 -1
  209. package/src/engine/asset/PendingAsset.js +108 -61
  210. package/src/engine/asset/loaders/ArrayBufferLoader.js +2 -2
  211. package/src/engine/asset/loaders/AssetLoader.d.ts.map +1 -1
  212. package/src/engine/asset/loaders/AssetLoader.js +19 -2
  213. package/src/engine/asset/loaders/GLTFAssetLoader.d.ts.map +1 -1
  214. package/src/engine/asset/loaders/GLTFAssetLoader.js +123 -114
  215. package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts +1 -1
  216. package/src/engine/asset/loaders/JavascriptAssetLoader.d.ts.map +1 -1
  217. package/src/engine/asset/loaders/JavascriptAssetLoader.js +31 -47
  218. package/src/engine/asset/loaders/JsonAssetLoader.js +1 -1
  219. package/src/engine/asset/loaders/SVGAssetLoader.js +2 -2
  220. package/src/engine/asset/loaders/SoundAssetLoader.js +1 -1
  221. package/src/engine/asset/loaders/TextAssetLoader.js +2 -2
  222. package/src/{core → engine/asset/loaders}/font/FontAsset.d.ts +1 -1
  223. package/src/engine/asset/loaders/font/FontAsset.d.ts.map +1 -0
  224. package/src/{core → engine/asset/loaders}/font/FontAsset.js +21 -21
  225. package/src/{core → engine/asset/loaders}/font/FontAssetLoader.d.ts +1 -1
  226. package/src/engine/asset/loaders/font/FontAssetLoader.d.ts.map +1 -0
  227. package/src/{core → engine/asset/loaders}/font/FontAssetLoader.js +20 -20
  228. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts +1 -1
  229. package/src/engine/asset/loaders/image/ImageRGBADataLoader.d.ts.map +1 -1
  230. package/src/engine/asset/loaders/image/ImageRGBADataLoader.js +11 -20
  231. package/src/engine/asset/loaders/texture/TextureAssetLoader.d.ts.map +1 -1
  232. package/src/engine/asset/loaders/texture/TextureAssetLoader.js +8 -2
  233. package/src/engine/asset/preloader/AssetPreloader.js +1 -1
  234. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts +1 -1
  235. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.d.ts.map +1 -1
  236. package/src/engine/ecs/sockets/serialization/AttachmentSocketsAssetLoader.js +19 -22
  237. package/src/engine/graphics/FrameThrottle.d.ts +1 -7
  238. package/src/engine/graphics/FrameThrottle.d.ts.map +1 -1
  239. package/src/engine/graphics/FrameThrottle.js +2 -24
  240. package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.d.ts +1 -1
  241. package/src/engine/graphics/debug/shape_to_visual_entity.d.ts.map +1 -0
  242. package/src/{core/geom/3d/shape/util → engine/graphics/debug}/shape_to_visual_entity.js +159 -159
  243. package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.d.ts +1 -1
  244. package/src/engine/graphics/debug/visualize_tetrahedral_mesh.d.ts.map +1 -0
  245. package/src/{core/geom/3d/tetrahedra → engine/graphics/debug}/visualize_tetrahedral_mesh.js +46 -46
  246. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts +1 -1
  247. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.d.ts.map +1 -1
  248. package/src/engine/graphics/ecs/animation/animator/graph/definition/serialization/AnimationGraphDefinitionAssetLoader.js +22 -32
  249. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +1 -1
  250. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +2 -76
  251. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +1 -1
  252. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -427
  253. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +1 -4
  254. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +1 -1
  255. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +2 -6
  256. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +1 -1
  257. package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts +1 -8
  258. package/src/engine/graphics/render/forward_plus/read_frustum_corner.d.ts.map +1 -1
  259. package/src/engine/graphics/render/forward_plus/read_frustum_corner.js +2 -14
  260. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts +1 -11
  261. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.d.ts.map +1 -1
  262. package/src/engine/graphics/sh3/path_tracer/geometry/compute_triangle_group_aabb3.js +2 -46
  263. package/src/engine/graphics/sh3/prototypeSH3Probe.js +1 -1
  264. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +27 -0
  265. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -0
  266. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +81 -0
  267. package/src/engine/graphics/texture/isImageBitmap.d.ts +1 -6
  268. package/src/engine/graphics/texture/isImageBitmap.d.ts.map +1 -1
  269. package/src/engine/graphics/texture/isImageBitmap.js +2 -12
  270. package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.d.ts +2 -2
  271. package/src/engine/intelligence/behavior/util/AsynchronousDelayAction.d.ts.map +1 -0
  272. package/src/{core/process/action → engine/intelligence/behavior/util}/AsynchronousDelayAction.js +55 -55
  273. package/src/engine/network/NetworkSession.d.ts +12 -1
  274. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  275. package/src/engine/network/NetworkSession.js +52 -1
  276. package/src/engine/network/README.md +45 -0
  277. package/src/engine/network/convertPathToURL.d.ts +1 -8
  278. package/src/engine/network/convertPathToURL.d.ts.map +1 -1
  279. package/src/engine/network/convertPathToURL.js +2 -107
  280. package/src/engine/network/core/quantize/quantize_float.d.ts.map +1 -1
  281. package/src/engine/network/core/quantize/quantize_float.js +7 -0
  282. package/src/engine/network/core/quantize/quantize_position.d.ts.map +1 -1
  283. package/src/engine/network/core/quantize/quantize_position.js +12 -1
  284. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  285. package/src/engine/network/orchestrator/NetworkPeer.js +15 -1
  286. package/src/engine/network/replication/Replicator.d.ts +8 -0
  287. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  288. package/src/engine/network/replication/Replicator.js +48 -0
  289. package/src/engine/network/transport/Channel.d.ts.map +1 -1
  290. package/src/engine/network/transport/Channel.js +46 -12
  291. package/src/engine/network/transport/ReliableCommandPipeline.d.ts +16 -0
  292. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +1 -1
  293. package/src/engine/network/transport/ReliableCommandPipeline.js +29 -0
  294. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  295. package/src/engine/network/transport/adapters/NodeUDPTransport.js +7 -1
  296. package/src/engine/network/transport/fragments/packet_size.d.ts +5 -5
  297. package/src/engine/network/transport/fragments/packet_size.d.ts.map +1 -1
  298. package/src/engine/network/transport/fragments/packet_size.js +5 -5
  299. package/src/engine/physics/BULLET_REVIEW.md +1 -1
  300. package/src/engine/physics/JOLT_REVIEW.md +2 -2
  301. package/src/engine/physics/PLAN.md +1094 -945
  302. package/src/engine/physics/RAPIER_REVIEW.md +2 -2
  303. package/src/engine/physics/body/BodyStorage.d.ts +2 -12
  304. package/src/engine/physics/body/BodyStorage.d.ts.map +1 -1
  305. package/src/engine/physics/body/BodyStorage.js +406 -452
  306. package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
  307. package/src/engine/physics/body/SolverBodyState.js +12 -3
  308. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +28 -3
  309. package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
  310. package/src/engine/physics/broadphase/compute_fat_world_aabb.js +60 -24
  311. package/src/engine/physics/broadphase/generate_pairs.d.ts +9 -5
  312. package/src/engine/physics/broadphase/generate_pairs.d.ts.map +1 -1
  313. package/src/engine/physics/broadphase/generate_pairs.js +52 -37
  314. package/src/engine/physics/ccd/linear_sweep.d.ts +15 -5
  315. package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
  316. package/src/engine/physics/ccd/linear_sweep.js +122 -40
  317. package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
  318. package/src/engine/physics/constraint/solve_constraints.js +830 -805
  319. package/src/engine/physics/contact/ManifoldStore.d.ts +91 -16
  320. package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
  321. package/src/engine/physics/contact/ManifoldStore.js +204 -60
  322. package/src/engine/physics/ecs/BodyKind.d.ts +7 -3
  323. package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
  324. package/src/engine/physics/ecs/BodyKind.js +29 -25
  325. package/src/engine/physics/ecs/Collider.d.ts +7 -0
  326. package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
  327. package/src/engine/physics/ecs/Collider.js +7 -0
  328. package/src/engine/physics/ecs/ColliderSerializationAdapter.js +1 -1
  329. package/src/engine/physics/ecs/PhysicsSystem.d.ts +110 -6
  330. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  331. package/src/engine/physics/ecs/PhysicsSystem.js +467 -45
  332. package/src/engine/physics/ecs/RigidBody.d.ts +20 -5
  333. package/src/engine/physics/ecs/RigidBody.d.ts.map +1 -1
  334. package/src/engine/physics/ecs/RigidBody.js +307 -286
  335. package/src/engine/physics/ecs/RigidBodyFlags.d.ts +6 -3
  336. package/src/engine/physics/ecs/RigidBodyFlags.d.ts.map +1 -1
  337. package/src/engine/physics/ecs/RigidBodyFlags.js +31 -28
  338. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts +12 -4
  339. package/src/engine/physics/ecs/RigidBodySerializationAdapter.d.ts.map +1 -1
  340. package/src/engine/physics/ecs/RigidBodySerializationAdapter.js +19 -5
  341. package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts +10 -0
  342. package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.d.ts.map +1 -0
  343. package/src/engine/physics/ecs/RigidBodySerializationUpgrader_0_1.js +37 -0
  344. package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts +28 -0
  345. package/src/engine/physics/ecs/find_non_finite_physics_state.d.ts.map +1 -0
  346. package/src/engine/physics/ecs/find_non_finite_physics_state.js +76 -0
  347. package/src/engine/physics/events/ContactEventBuffer.d.ts +11 -0
  348. package/src/engine/physics/events/ContactEventBuffer.d.ts.map +1 -1
  349. package/src/engine/physics/events/ContactEventBuffer.js +40 -0
  350. package/src/engine/physics/events/diff_manifolds.d.ts +30 -13
  351. package/src/engine/physics/events/diff_manifolds.d.ts.map +1 -1
  352. package/src/engine/physics/events/diff_manifolds.js +87 -50
  353. package/src/engine/physics/fluid/FluidField.d.ts +45 -17
  354. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  355. package/src/engine/physics/fluid/FluidField.js +53 -23
  356. package/src/engine/physics/fluid/FluidSimulator.d.ts +141 -5
  357. package/src/engine/physics/fluid/FluidSimulator.d.ts.map +1 -1
  358. package/src/engine/physics/fluid/FluidSimulator.js +336 -43
  359. package/src/engine/physics/fluid/REVIEW_02_PLAN.md +114 -0
  360. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts +4 -3
  361. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  362. package/src/engine/physics/fluid/ecs/FluidComponent.js +4 -3
  363. package/src/engine/physics/fluid/ecs/FluidSystem.d.ts +3 -3
  364. package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.d.ts +41 -0
  365. package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.d.ts.map +1 -0
  366. package/src/engine/physics/fluid/effector/AmbientWindFluidEffector.js +124 -0
  367. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts +27 -8
  368. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  369. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +67 -18
  370. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts +42 -0
  371. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.d.ts.map +1 -0
  372. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_scalar.js +136 -0
  373. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts +37 -0
  374. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -0
  375. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +169 -0
  376. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts +36 -0
  377. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -0
  378. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +100 -0
  379. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts +6 -0
  380. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.d.ts.map +1 -1
  381. package/src/engine/physics/fluid/solver/v3_grid_apply_advection_forward.js +6 -0
  382. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts +7 -2
  383. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.d.ts.map +1 -1
  384. package/src/engine/physics/fluid/solver/v3_grid_apply_diffusion.js +17 -12
  385. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts +42 -0
  386. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.d.ts.map +1 -0
  387. package/src/engine/physics/fluid/solver/v3_grid_apply_vorticity_confinement.js +131 -0
  388. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts +32 -22
  389. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.d.ts.map +1 -1
  390. package/src/engine/physics/fluid/solver/v3_grid_compute_solid_neighbour_mask.js +43 -26
  391. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts +31 -0
  392. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.d.ts.map +1 -0
  393. package/src/engine/physics/fluid/solver/v3_grid_patch_edges_constant.js +77 -0
  394. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts +26 -19
  395. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.d.ts.map +1 -1
  396. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure.js +46 -42
  397. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts +38 -10
  398. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.d.ts.map +1 -1
  399. package/src/engine/physics/fluid/solver/v3_grid_solve_pressure_pcg.js +158 -75
  400. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts +22 -17
  401. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.d.ts.map +1 -1
  402. package/src/engine/physics/fluid/solver/v3_grid_subtract_pressure_gradient.js +108 -96
  403. package/src/engine/physics/inertia/world_inverse_inertia.d.ts +30 -1
  404. package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
  405. package/src/engine/physics/inertia/world_inverse_inertia.js +160 -116
  406. package/src/engine/physics/integration/integrate_position.js +97 -97
  407. package/src/engine/physics/island/IslandBuilder.d.ts +49 -8
  408. package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
  409. package/src/engine/physics/island/IslandBuilder.js +93 -14
  410. package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
  411. package/src/engine/physics/narrowphase/box_box_manifold.js +683 -673
  412. package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
  413. package/src/engine/physics/narrowphase/box_triangle_contact.js +899 -749
  414. package/src/engine/physics/narrowphase/capsule_contacts.d.ts +27 -0
  415. package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
  416. package/src/engine/physics/narrowphase/capsule_contacts.js +624 -459
  417. package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
  418. package/src/engine/physics/narrowphase/capsule_triangle_contact.js +58 -38
  419. package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
  420. package/src/engine/physics/narrowphase/compute_penetration.js +369 -325
  421. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +3 -1
  422. package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
  423. package/src/engine/physics/narrowphase/convex_convex_manifold.js +568 -422
  424. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +6 -3
  425. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
  426. package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +66 -10
  427. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +4 -1
  428. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
  429. package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +97 -94
  430. package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +117 -117
  431. package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
  432. package/src/engine/physics/narrowphase/narrowphase_step.js +1738 -1739
  433. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +14 -7
  434. package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
  435. package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +74 -69
  436. package/src/engine/physics/persistence/solver_caches.d.ts +20 -0
  437. package/src/engine/physics/persistence/solver_caches.d.ts.map +1 -0
  438. package/src/engine/physics/persistence/solver_caches.js +309 -0
  439. package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
  440. package/src/engine/physics/queries/overlap_shape.js +187 -184
  441. package/src/engine/physics/queries/raycast.d.ts +3 -2
  442. package/src/engine/physics/queries/raycast.d.ts.map +1 -1
  443. package/src/engine/physics/queries/raycast.js +37 -11
  444. package/src/engine/physics/queries/shape_cast.d.ts +18 -5
  445. package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
  446. package/src/engine/physics/queries/shape_cast.js +417 -393
  447. package/src/engine/physics/solver/solve_contacts.d.ts +22 -6
  448. package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
  449. package/src/engine/physics/solver/solve_contacts.js +1482 -1338
  450. package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
  451. package/src/engine/physics/vehicle/RaycastVehicle.js +344 -339
  452. package/src/engine/ui/DraggableAspect.d.ts +12 -3
  453. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  454. package/src/engine/ui/DraggableAspect.js +115 -83
  455. package/src/generation/COORDINATES.md +54 -0
  456. package/src/generation/GridTaskGroup.js +2 -2
  457. package/src/generation/REVIEW_01_ACTION_PLAN.md +628 -0
  458. package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts +9 -1
  459. package/src/generation/automata/CaveGeneratorCellularAutomata.d.ts.map +1 -1
  460. package/src/generation/automata/CaveGeneratorCellularAutomata.js +79 -59
  461. package/src/generation/automata/CellularAutomata.d.ts +6 -3
  462. package/src/generation/automata/CellularAutomata.d.ts.map +1 -1
  463. package/src/generation/automata/CellularAutomata.js +22 -19
  464. package/src/generation/filtering/CellFilter.d.ts +17 -0
  465. package/src/generation/filtering/CellFilter.d.ts.map +1 -1
  466. package/src/generation/filtering/CellFilter.js +117 -77
  467. package/src/generation/filtering/CellFilterCellMatcher.d.ts.map +1 -1
  468. package/src/generation/filtering/CellFilterCellMatcher.js +2 -0
  469. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts +5 -0
  470. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.d.ts.map +1 -1
  471. package/src/generation/filtering/boolean/CellFilterLiteralBoolean.js +15 -0
  472. package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts +0 -1
  473. package/src/generation/filtering/core/CellFilterBinaryOperation.d.ts.map +1 -1
  474. package/src/generation/filtering/core/CellFilterBinaryOperation.js +37 -50
  475. package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts +0 -1
  476. package/src/generation/filtering/core/CellFilterOperationTertiary.d.ts.map +1 -1
  477. package/src/generation/filtering/core/CellFilterOperationTertiary.js +43 -59
  478. package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts +0 -1
  479. package/src/generation/filtering/core/CellFilterUnaryOperation.d.ts.map +1 -1
  480. package/src/generation/filtering/core/CellFilterUnaryOperation.js +29 -33
  481. package/src/generation/filtering/numeric/CellFilterCache.d.ts +1 -0
  482. package/src/generation/filtering/numeric/CellFilterCache.d.ts.map +1 -1
  483. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts +3 -2
  484. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.d.ts.map +1 -1
  485. package/src/generation/filtering/numeric/complex/CellFilterAngleToNormal.js +9 -35
  486. package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts +0 -1
  487. package/src/generation/filtering/numeric/complex/CellFilterCurvature.d.ts.map +1 -1
  488. package/src/generation/filtering/numeric/complex/CellFilterCurvature.js +19 -43
  489. package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts +0 -1
  490. package/src/generation/filtering/numeric/complex/CellFilterFXAA.d.ts.map +1 -1
  491. package/src/generation/filtering/numeric/complex/CellFilterFXAA.js +2 -6
  492. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.d.ts.map +1 -1
  493. package/src/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +9 -12
  494. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.d.ts.map +1 -1
  495. package/src/generation/filtering/numeric/complex/CellFilterSimplexNoise.js +2 -1
  496. package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts +0 -1
  497. package/src/generation/filtering/numeric/complex/CellFilterSobel.d.ts.map +1 -1
  498. package/src/generation/filtering/numeric/complex/CellFilterSobel.js +2 -6
  499. package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts +5 -4
  500. package/src/generation/filtering/numeric/math/CellFilterInverseLerp.d.ts.map +1 -1
  501. package/src/generation/filtering/numeric/math/CellFilterInverseLerp.js +5 -4
  502. package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts +17 -0
  503. package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.d.ts.map +1 -0
  504. package/src/generation/filtering/numeric/process/computeFilterSurfaceNormal.js +42 -0
  505. package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.d.ts.map +1 -1
  506. package/src/generation/filtering/numeric/sampling/AbstractCellFilterSampleGridLayer.js +7 -1
  507. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.d.ts.map +1 -1
  508. package/src/generation/filtering/numeric/util/populateSampler2DFromCellFilter.js +7 -10
  509. package/src/generation/filtering/numeric/util/sampler_from_filter.d.ts.map +1 -1
  510. package/src/generation/filtering/numeric/util/sampler_from_filter.js +2 -1
  511. package/src/generation/grid/GridData.d.ts.map +1 -1
  512. package/src/generation/grid/GridData.js +14 -1
  513. package/src/generation/grid/actions/ContinuousGridCellAction.d.ts +10 -3
  514. package/src/generation/grid/actions/ContinuousGridCellAction.d.ts.map +1 -1
  515. package/src/generation/grid/actions/ContinuousGridCellAction.js +18 -3
  516. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts +11 -1
  517. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.d.ts.map +1 -1
  518. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +13 -3
  519. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.d.ts +1 -1
  520. package/src/generation/grid/actions/ContinuousGridCellActionSetTerrainObstacle.js +2 -2
  521. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts +1 -1
  522. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.d.ts.map +1 -1
  523. package/src/generation/grid/actions/ContinuousGridCellActionWriteObstacle.js +4 -6
  524. package/src/generation/grid/coords/grid_to_texel.d.ts +9 -0
  525. package/src/generation/grid/coords/grid_to_texel.d.ts.map +1 -0
  526. package/src/generation/grid/coords/grid_to_texel.js +10 -0
  527. package/src/generation/grid/coords/texel_to_grid.d.ts +9 -0
  528. package/src/generation/grid/coords/texel_to_grid.d.ts.map +1 -0
  529. package/src/generation/grid/coords/texel_to_grid.js +10 -0
  530. package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts +2 -2
  531. package/src/generation/grid/generation/GridTaskApplyActionToCells.d.ts.map +1 -1
  532. package/src/generation/grid/generation/GridTaskApplyActionToCells.js +10 -6
  533. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.d.ts.map +1 -1
  534. package/src/generation/grid/generation/GridTaskDensityMarkerDistribution.js +20 -21
  535. package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts +7 -0
  536. package/src/generation/grid/generation/GridTaskExecuteRuleTimes.d.ts.map +1 -1
  537. package/src/generation/grid/generation/GridTaskExecuteRuleTimes.js +18 -10
  538. package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.d.ts.map +1 -1
  539. package/src/generation/grid/generation/discrete/GridTaskCellularAutomata.js +16 -7
  540. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts +5 -3
  541. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.d.ts.map +1 -1
  542. package/src/generation/grid/generation/discrete/GridTaskConnectRooms.js +26 -23
  543. package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.d.ts.map +1 -1
  544. package/src/generation/grid/generation/discrete/layer/GridTaskBuildSourceDistanceMap.js +10 -1
  545. package/src/generation/grid/generation/grid/select/CellSupplierBestN.d.ts.map +1 -1
  546. package/src/generation/grid/generation/grid/select/CellSupplierBestN.js +4 -0
  547. package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts +15 -8
  548. package/src/generation/grid/generation/road/GridTaskGenerateRoads.d.ts.map +1 -1
  549. package/src/generation/grid/generation/road/GridTaskGenerateRoads.js +89 -92
  550. package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
  551. package/src/generation/markers/GridActionRuleSet.js +10 -2
  552. package/src/generation/markers/GridCellActionPlaceMarker.d.ts +11 -0
  553. package/src/generation/markers/GridCellActionPlaceMarker.d.ts.map +1 -1
  554. package/src/generation/markers/GridCellActionPlaceMarker.js +20 -3
  555. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts +3 -1
  556. package/src/generation/markers/GridCellActionPlaceMarkerGroup.d.ts.map +1 -1
  557. package/src/generation/markers/GridCellActionPlaceMarkerGroup.js +9 -2
  558. package/src/generation/markers/MarkerNode.d.ts +8 -3
  559. package/src/generation/markers/MarkerNode.d.ts.map +1 -1
  560. package/src/generation/markers/MarkerNode.js +12 -5
  561. package/src/generation/markers/actions/MarkerNodeActionEntityPlacement.js +1 -1
  562. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts +1 -1
  563. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.d.ts.map +1 -1
  564. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessor.js +1 -1
  565. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts +1 -1
  566. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.d.ts.map +1 -1
  567. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
  568. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts +1 -1
  569. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.d.ts.map +1 -1
  570. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorRandomRotation.js +2 -2
  571. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts +1 -1
  572. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.d.ts.map +1 -1
  573. package/src/generation/markers/actions/placement/MarkerNodeEntityProcessorSequence.js +2 -2
  574. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.d.ts.map +1 -1
  575. package/src/generation/markers/actions/probability/MarkerNodeActionSelectWeighted.js +6 -4
  576. package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.d.ts.map +1 -1
  577. package/src/generation/markers/actions/probability/MarkerNodeActionWeightedElement.js +1 -3
  578. package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.d.ts.map +1 -1
  579. package/src/generation/markers/actions/terrain/MarkerNodeActionPaintTerrain.js +12 -11
  580. package/src/generation/markers/matcher/MarkerNodeMatcherAnd.js +2 -2
  581. package/src/generation/markers/transform/MarkerNodeTransformer.d.ts +4 -1
  582. package/src/generation/markers/transform/MarkerNodeTransformer.d.ts.map +1 -1
  583. package/src/generation/markers/transform/MarkerNodeTransformer.js +4 -1
  584. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.d.ts.map +1 -1
  585. package/src/generation/markers/transform/MarkerNodeTransformerAddPositionYFromFilter.js +1 -3
  586. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts +5 -0
  587. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.d.ts.map +1 -1
  588. package/src/generation/markers/transform/MarkerNodeTransformerOffsetPosition.js +15 -0
  589. package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.d.ts.map +1 -1
  590. package/src/generation/markers/transform/MarkerNodeTransformerRecordProperty.js +1 -3
  591. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.d.ts.map +1 -1
  592. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilter.js +2 -4
  593. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.d.ts.map +1 -1
  594. package/src/generation/markers/transform/MarkerNodeTransformerYRotateByFilterGradient.js +1 -3
  595. package/src/generation/placement/GridCellPlacementRule.d.ts.map +1 -1
  596. package/src/generation/placement/GridCellPlacementRule.js +1 -3
  597. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.d.ts.map +1 -1
  598. package/src/generation/placement/action/GridCellActionWriteFilterToLayer.js +8 -10
  599. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.d.ts.map +1 -1
  600. package/src/generation/placement/action/random/weighted/CellActionSelectWeightedRandom.js +6 -4
  601. package/src/generation/placement/action/random/weighted/WeightedGridCellAction.d.ts.map +1 -1
  602. package/src/generation/placement/action/random/weighted/WeightedGridCellAction.js +1 -3
  603. package/src/generation/rules/CellMatcher.d.ts +3 -1
  604. package/src/generation/rules/CellMatcher.d.ts.map +1 -1
  605. package/src/generation/rules/CellMatcher.js +3 -1
  606. package/src/generation/rules/CellMatcherFromFilter.d.ts.map +1 -1
  607. package/src/generation/rules/CellMatcherFromFilter.js +1 -3
  608. package/src/generation/rules/CellMatcherLayerBitMaskTest.d.ts.map +1 -1
  609. package/src/generation/rules/CellMatcherLayerBitMaskTest.js +6 -20
  610. package/src/generation/test_support/executeTaskTreeSync.d.ts +9 -0
  611. package/src/generation/test_support/executeTaskTreeSync.d.ts.map +1 -0
  612. package/src/generation/test_support/executeTaskTreeSync.js +78 -0
  613. package/src/generation/theme/TerrainLayerRuleAggregator.d.ts +2 -1
  614. package/src/generation/theme/TerrainLayerRuleAggregator.d.ts.map +1 -1
  615. package/src/generation/theme/TerrainLayerRuleAggregator.js +9 -6
  616. package/src/generation/theme/Theme.d.ts +1 -1
  617. package/src/generation/theme/Theme.d.ts.map +1 -1
  618. package/src/generation/theme/Theme.js +2 -2
  619. package/src/generation/theme/ThemeEngine.d.ts +3 -3
  620. package/src/generation/theme/ThemeEngine.d.ts.map +1 -1
  621. package/src/generation/theme/ThemeEngine.js +26 -16
  622. package/src/generation/theme/cell/CellProcessingRule.d.ts +3 -3
  623. package/src/generation/theme/cell/CellProcessingRule.d.ts.map +1 -1
  624. package/src/generation/theme/cell/CellProcessingRule.js +6 -10
  625. package/src/generation/theme/cell/CellProcessingRuleSet.d.ts +1 -1
  626. package/src/generation/theme/cell/CellProcessingRuleSet.d.ts.map +1 -1
  627. package/src/generation/theme/cell/CellProcessingRuleSet.js +2 -2
  628. package/src/view/common/ListView.js +1 -1
  629. package/src/view/elements/BottomLeftResizeHandleView.d.ts.map +1 -1
  630. package/src/view/elements/BottomLeftResizeHandleView.js +13 -5
  631. package/src/core/font/FontAsset.d.ts.map +0 -1
  632. package/src/core/font/FontAssetLoader.d.ts.map +0 -1
  633. package/src/core/geom/3d/shape/util/shape_to_visual_entity.d.ts.map +0 -1
  634. package/src/core/geom/3d/tetrahedra/visualize_tetrahedral_mesh.d.ts.map +0 -1
  635. package/src/core/process/action/AsynchronousDelayAction.d.ts.map +0 -1
  636. package/src/engine/physics/computeInterceptPoint.d.ts.map +0 -1
  637. package/src/engine/physics/fluid/solver/optimal_sor_omega.d.ts.map +0 -1
  638. package/src/engine/physics/gjk/gjk.d.ts.map +0 -1
  639. package/src/engine/physics/gjk/gjk_epa_penetration.d.ts.map +0 -1
  640. package/src/engine/physics/gjk/minkowski_support.d.ts.map +0 -1
  641. package/src/engine/physics/gjk/mpr.d.ts.map +0 -1
  642. package/src/engine/physics/integration/quat_integrate.d.ts.map +0 -1
  643. package/src/engine/physics/island/union_find.d.ts.map +0 -1
  644. package/src/engine/physics/narrowphase/clip_against_axis_uv.d.ts.map +0 -1
  645. package/src/engine/physics/narrowphase/decomposition/aabb_world_to_local.d.ts.map +0 -1
  646. package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts +0 -21
  647. package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.d.ts.map +0 -1
  648. package/src/generation/grid/generation/discrete/layer/GridTaskDistanceToMarkers.js +0 -68
  649. package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts +0 -10
  650. package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.d.ts.map +0 -1
  651. package/src/generation/grid/generation/grid/GridTaskGridAlignedNodeGenerator.js +0 -17
  652. /package/src/{engine/physics → core/geom/3d}/gjk/NOTES.md +0 -0
  653. /package/src/{engine/physics → core/geom/3d}/gjk/gjk.d.ts +0 -0
  654. /package/src/{engine/physics → core/math/physics/kinematics}/computeInterceptPoint.d.ts +0 -0
@@ -1,453 +1,669 @@
1
- import { clamp } from "../../../src/core/math/clamp.js";
2
- import { lerp } from "../../../src/core/math/lerp.js";
3
- import { max2 } from "../../../src/core/math/max2.js";
4
- import { min2 } from "../../../src/core/math/min2.js";
5
- import View from "../../../src/view/View.js";
6
- import { AutoCanvasView } from "../ecs/components/common/AutoCanvasView.js";
7
- import Vector2 from "../../../src/core/geom/Vector2.js";
8
- import Vector1 from "../../../src/core/geom/Vector1.js";
9
- import ListView from "../../../src/view/common/ListView.js";
10
- import { NodeView } from "./NodeView.js";
11
- import List from "../../../src/core/collection/list/List.js";
12
- import { DraggableAspect } from "../../../src/engine/ui/DraggableAspect.js";
13
- import { PortDirection } from "../../../src/core/model/node-graph/node/PortDirection.js";
14
- import { NodeInstancePortReference } from "../../../src/core/model/node-graph/node/NodeInstancePortReference.js";
15
-
16
- export class NodeGraphCamera {
17
- constructor() {
18
- this.position = new Vector2();
19
- /**
20
- *
21
- * @type {Vector1}
22
- */
23
- this.scale = new Vector1(1);
24
- }
25
- }
26
-
27
- const v2 = new Vector2();
28
-
29
- const CONNECTION_WIDTH = 3;
30
- const PORT_BEND_OFFSET_X = 100;
31
-
32
- export class NodeGraphView extends View {
33
- /**
34
- *
35
- * @param {NodeGraph} graph
36
- * @param {NodeGraphVisualData} visual
37
- * @param {NodeGraphCamera} camera
38
- * @param {NodeDescriptionVisualRegistry} nodeVisualRegistry
39
- */
40
- constructor({ graph, visual, camera, nodeVisualRegistry }) {
41
- super();
42
-
43
- /**
44
- *
45
- * @type {NodeGraphCamera}
46
- */
47
- this.camera = camera;
48
-
49
- /**
50
- *
51
- * @type {NodeGraph}
52
- */
53
- this.graph = graph;
54
-
55
- /**
56
- *
57
- * @type {NodeGraphVisualData}
58
- */
59
- this.visual = visual;
60
-
61
- /**
62
- *
63
- * @type {List<number>}
64
- */
65
- this.selection = new List();
66
-
67
- this.el = document.createElement('div');
68
-
69
- this.addClass('ui-node-graph-view');
70
-
71
- const tempConnection = {
72
- enabled: false,
73
- anchor: new Vector2(),
74
- endpoint: null
75
- };
76
-
77
- const vBlockCanvas = new ListView(graph.nodes, {
78
- classList: ['block-canvas'],
79
- /**
80
- *
81
- * @param {NodeInstance} node
82
- * @returns {View}
83
- */
84
- elementFactory(node) {
85
- let nodeVisualData = visual.getNode(node.id);
86
-
87
- if (nodeVisualData === undefined) {
88
- const vd0 = nodeVisualRegistry.get(node.description.id);
89
-
90
- if (vd0 === undefined) {
91
- throw new Error(`Node (name='${node.description.name}', id=${node.description.id}) not found in registry`);
92
- }
93
-
94
- const vd1 = vd0.clone();
95
-
96
- vd1.id = node.id;
97
-
98
- visual.addNode(node.id, vd1);
99
-
100
- nodeVisualData = vd1;
101
- }
102
-
103
- const nodeView = new NodeView({
104
- node,
105
- visual: nodeVisualData,
106
- visualData: visual,
107
- portCreationCallback(portView, port) {
108
-
109
- const draggableAspect = new DraggableAspect({
110
- el: portView.el,
111
- dragStart(p) {
112
-
113
- const endpoint = new NodeInstancePortReference();
114
-
115
- endpoint.set(node, port);
116
-
117
- tempConnection.enabled = true;
118
- tempConnection.endpoint = endpoint;
119
-
120
- },
121
- dragEnd() {
122
- tempConnection.enabled = false;
123
-
124
- vConnectionCanvas.render();
125
- },
126
- drag(p, o) {
127
- const scale = camera.scale.getValue();
128
- tempConnection.anchor.set(
129
- (p.x / scale + camera.position.x),
130
- (p.y / scale + camera.position.y)
131
- );
132
-
133
- vConnectionCanvas.render();
134
- }
135
- });
136
-
137
- draggableAspect.getPointer().on.up.add(() => {
138
- //pointer released above the port
139
-
140
- if (tempConnection.enabled) {
141
- /**
142
- *
143
- * @type {NodeInstancePortReference}
144
- */
145
- const endpoint = tempConnection.endpoint;
146
-
147
- const endpointPort = endpoint.port;
148
-
149
- if (endpointPort === port) {
150
- //can't connect port to itself
151
- return;
152
- }
153
-
154
- if (endpointPort.direction === port.direction) {
155
- //can't connect ports of teh same directionality
156
- return;
157
- }
158
-
159
- const dataType = endpointPort.dataType;
160
-
161
- //check that the port types match
162
- if (port.dataType === dataType) {
163
-
164
- if (endpointPort.direction === PortDirection.Out) {
165
- graph.createConnection(endpoint.instance.id, endpointPort.id, node.id, port.id);
166
- } else {
167
- graph.createConnection(node.id, port.id, endpoint.instance.id, endpointPort.id);
168
- }
169
-
170
- }
171
- }
172
- });
173
-
174
- portView.on.linked.add(draggableAspect.start, draggableAspect);
175
- portView.on.unlinked.add(draggableAspect.stop, draggableAspect);
176
-
177
- }
178
- });
179
-
180
- nodeView.bindSignal(nodeView.position.onChanged, vConnectionCanvas.render, vConnectionCanvas);
181
-
182
- return nodeView;
183
- }
184
- });
185
-
186
- this.addChild(vBlockCanvas);
187
-
188
-
189
- //create canvas to draw connections on
190
- const vConnectionCanvas = new AutoCanvasView({
191
- classList: ['connection-canvas']
192
- });
193
-
194
- const v2_source = new Vector2();
195
- const v2_target = new Vector2();
196
-
197
- /**
198
- *
199
- * @param {CanvasRenderingContext2D} ctx
200
- * @param width
201
- * @param height
202
- */
203
- vConnectionCanvas.draw = (ctx, width, height) => {
204
- ctx.clearRect(0, 0, width, height);
205
-
206
- ctx.lineWidth = max2(1, CONNECTION_WIDTH * camera.scale.getValue());
207
- ctx.lineCap = 'round';
208
-
209
- //draw connections
210
- graph.connections.forEach(connection => {
211
-
212
-
213
- const source = connection.source;
214
- const target = connection.target;
215
-
216
- this.getEndpointGraphPosition(source, v2_source);
217
-
218
- this.getEndpointGraphPosition(target, v2_target);
219
-
220
-
221
- this.drawConnection(ctx, v2_source, v2_target, source.port.dataType);
222
-
223
- });
224
-
225
- //draw temp connection
226
-
227
- if (tempConnection.enabled) {
228
- /**
229
- *
230
- * @type {NodeInstancePortReference}
231
- */
232
- const endpoint = tempConnection.endpoint;
233
-
234
- this.getEndpointGraphPosition(endpoint, v2_source);
235
- const dataType = endpoint.port.dataType;
236
- if (endpoint.port.direction === PortDirection.Out) {
237
- this.drawConnection(ctx, v2_source, tempConnection.anchor, dataType);
238
- } else {
239
- this.drawConnection(ctx, tempConnection.anchor, v2_source, dataType);
240
- }
241
- }
242
- };
243
-
244
- this.addChild(vConnectionCanvas);
245
-
246
- this.size.onChanged.add((x, y) => {
247
- vConnectionCanvas.size.set(x, y);
248
- });
249
-
250
- function onCameraChange() {
251
- const scale = camera.scale.getValue();
252
- const p = camera.position;
253
-
254
- vBlockCanvas.scale.setScalar(scale);
255
- vBlockCanvas.position.set(-p.x * scale, -p.y * scale);
256
-
257
- vConnectionCanvas.render();
258
- }
259
-
260
- this.initializeNavigationControls();
261
-
262
- this.on.linked.add(onCameraChange);
263
- this.bindSignal(camera.position.onChanged, onCameraChange);
264
- this.bindSignal(camera.scale.onChanged, onCameraChange);
265
- }
266
-
267
- initializeNavigationControls() {
268
- const cameraPosition = new Vector2();
269
- const camera = this.camera;
270
-
271
- const canvasSize = this.size;
272
-
273
- const draggableAspect = new DraggableAspect({
274
- el: this.el,
275
- dragStart() {
276
- cameraPosition.copy(camera.position)
277
- },
278
- drag(p, o) {
279
- const d = o.clone();
280
-
281
- d.sub(p);
282
- d.multiplyScalar(1 / camera.scale.getValue());
283
-
284
- d.add(cameraPosition);
285
-
286
- camera.position.copy(d);
287
- }
288
- });
289
-
290
- draggableAspect.getPointer().on.wheel.add((delta, position) => {
291
- const scaleDelta = -delta.y / 20;
292
- const oldScale = camera.scale.getValue();
293
-
294
-
295
- const v = (1 + scaleDelta) * oldScale;
296
- const newScale = clamp(v, .03, 4);
297
-
298
- const actualScaleDelta = newScale / oldScale - 1;
299
-
300
- camera.scale.set(newScale);
301
-
302
-
303
- const canvasSizeInGraphSpace = new Vector2();
304
- canvasSizeInGraphSpace.copy(canvasSize);
305
- canvasSizeInGraphSpace.divideScalar(newScale);
306
-
307
- const selectionSizeDelta = new Vector2();
308
- selectionSizeDelta.copy(canvasSizeInGraphSpace);
309
- selectionSizeDelta.multiplyScalar(actualScaleDelta);
310
-
311
- const graphCameraPosition = new Vector2();
312
- this.transformPointGraph2Canvas(camera.position, graphCameraPosition);
313
-
314
-
315
- const localOffset = position.clone().sub(graphCameraPosition);
316
-
317
- const normalizedOffset = localOffset.clone();
318
- normalizedOffset.divide(canvasSize);
319
-
320
- const positionDelta = selectionSizeDelta.clone();
321
- positionDelta._multiply(normalizedOffset.x, normalizedOffset.y);
322
-
323
- camera.position.add(positionDelta);
324
- });
325
-
326
- this.on.linked.add(draggableAspect.start, draggableAspect);
327
- this.on.unlinked.add(draggableAspect.stop, draggableAspect);
328
-
329
- }
330
-
331
-
332
- /**
333
- *
334
- * @param x0
335
- * @param y0
336
- * @param x1
337
- * @param y1
338
- * @returns {boolean}
339
- */
340
- isGraphAABBVisible(x0, y0, x1, y1) {
341
-
342
- const scale = this.camera.scale.getValue();
343
- const cp = this.camera.position;
344
-
345
- //transform graph-space to canvas-space
346
- const _x0 = (x0 - cp.x) * scale;
347
- const _y0 = (y0 - cp.y) * scale;
348
- const _x1 = (x1 - cp.x) * scale;
349
- const _y1 = (y1 - cp.y) * scale;
350
-
351
- return _x0 < this.size.x && _x1 > 0 && _y0 < this.size.y && _y1 > 0;
352
- }
353
-
354
- /**
355
- *
356
- * @param {CanvasRenderingContext2D} ctx
357
- * @param {Vector2} source
358
- * @param {Vector2} target
359
- * @param {BinaryDataType} dataType
360
- */
361
- drawConnection(ctx, source, target, dataType) {
362
- //check that the connection is visible
363
- const cw_2 = (CONNECTION_WIDTH / 2);
364
-
365
- const x0 = min2(source.x, target.x) - (cw_2 + PORT_BEND_OFFSET_X);
366
- const y0 = min2(source.y, target.y) - cw_2;
367
- const x1 = max2(source.x, target.x) + cw_2 + PORT_BEND_OFFSET_X;
368
- const y1 = max2(source.y, target.y) + cw_2;
369
-
370
- if (!this.isGraphAABBVisible(x0, y0, x1, y1)) {
371
- //connection is not visible, don't draw
372
- return;
373
- }
374
-
375
- const cameraScale = this.camera.scale.getValue();
376
-
377
- const alpha = clamp(lerp(0, 1, cameraScale * CONNECTION_WIDTH), 0, 1);
378
-
379
- const dataColor = this.visual.getDataColor(dataType.id);
380
- ctx.strokeStyle = `rgba(${dataColor.r * 255}, ${dataColor.g * 255}, ${dataColor.b * 255}, ${alpha})`;
381
-
382
- ctx.beginPath();
383
-
384
- this.transformPointGraph2Canvas(source, v2);
385
-
386
- ctx.moveTo(v2.x, v2.y);
387
-
388
- const cp1x = v2.x + PORT_BEND_OFFSET_X * cameraScale;
389
- const cp1y = v2.y;
390
-
391
- this.transformPointGraph2Canvas(target, v2);
392
-
393
-
394
- const cp2x = v2.x - PORT_BEND_OFFSET_X * cameraScale;
395
- const cp2y = v2.y;
396
-
397
- ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, v2.x, v2.y);
398
-
399
- ctx.stroke();
400
- }
401
-
402
- /**
403
- *
404
- * @param {NodeInstancePortReference} endpoint
405
- * @param {Vector2} output
406
- */
407
- getEndpointGraphPosition(endpoint, output) {
408
- const instance = endpoint.instance;
409
-
410
- const nodeVisualData = this.visual.getNode(instance.id);
411
-
412
- const nodePosition = nodeVisualData.dimensions.position;
413
-
414
- const portVisualData = nodeVisualData.getPort(endpoint.port.id);
415
-
416
- const portPosition = portVisualData.position;
417
-
418
- const x = nodePosition.x + portPosition.x;
419
- const y = nodePosition.y + portPosition.y;
420
-
421
- output.set(x, y);
422
- }
423
-
424
- /**
425
- * Convert point from Graph coordinate space to Canvas coordinate space
426
- * @param {Vector2} input
427
- * @param {Vector2} output
428
- */
429
- transformPointGraph2Canvas(input, output) {
430
- const scale = this.camera.scale.getValue();
431
- const p = this.camera.position;
432
-
433
- const x = (input.x - p.x) * scale;
434
- const y = (input.y - p.y) * scale;
435
-
436
- output.set(x, y);
437
- }
438
-
439
- /**
440
- * Convert point from Canvas coordinate space to Graph coordinate space
441
- * @param {Vector2} input
442
- * @param {Vector2} output
443
- */
444
- transformPointCanvas2Graph(input, output) {
445
- const scale = this.camera.scale.getValue();
446
- const p = this.camera.position;
447
-
448
- const x = (input.x / scale) + p.x;
449
- const y = (input.y / scale) + p.y;
450
-
451
- output.set(x, y);
452
- }
453
- }
1
+ import { clamp } from "../../../src/core/math/clamp.js";
2
+ import { max2 } from "../../../src/core/math/max2.js";
3
+ import View from "../../../src/view/View.js";
4
+ import { AutoCanvasView } from "../ecs/components/common/AutoCanvasView.js";
5
+ import Vector2 from "../../../src/core/geom/Vector2.js";
6
+ import ListView from "../../../src/view/common/ListView.js";
7
+ import { NodeView } from "./NodeView.js";
8
+ import { DraggableAspect } from "../../../src/engine/ui/DraggableAspect.js";
9
+ import { readPositionFromMouseEvent } from "../../../src/engine/input/devices/PointerDevice.js";
10
+ import { PortDirection } from "../../../src/core/model/node-graph/node/PortDirection.js";
11
+ import { NodeInstancePortReference } from "../../../src/core/model/node-graph/node/NodeInstancePortReference.js";
12
+ import { ActionProcessor } from "../../../src/core/process/undo/ActionProcessor.js";
13
+ import { NodeGraphCamera } from "./NodeGraphCamera.js";
14
+ import { NodeGraphSelection } from "./NodeGraphSelection.js";
15
+ import { ConnectionCreateAction } from "./actions/ConnectionCreateAction.js";
16
+ import { NodeParameterSetAction } from "./actions/NodeParameterSetAction.js";
17
+ import { NodesMoveAction } from "./actions/NodesMoveAction.js";
18
+ import { SelectionSetAction } from "./actions/SelectionSetAction.js";
19
+ import { wire_bounds, wire_distance_to_point, wire_to_bezier } from "./connection_wire_geometry.js";
20
+
21
+ export { NodeGraphCamera } from "./NodeGraphCamera.js";
22
+
23
+ const v2_pointer = new Vector2();
24
+
25
+ const v2_hit_source = new Vector2();
26
+ const v2_hit_target = new Vector2();
27
+
28
+ const wire_aabb = new Float64Array(4);
29
+ const wire_bezier = new Float64Array(8);
30
+
31
+ const CONNECTION_WIDTH = 3;
32
+
33
+ /**
34
+ * Canvas-side wire hit tolerance, kept constant for the user at any zoom level
35
+ * @type {number}
36
+ */
37
+ const CONNECTION_HIT_TOLERANCE_PX = 6;
38
+
39
+ /**
40
+ *
41
+ * @param {number[]} array
42
+ * @param {number} value
43
+ */
44
+ function array_toggle(array, value) {
45
+ const i = array.indexOf(value);
46
+
47
+ if (i === -1) {
48
+ array.push(value);
49
+ } else {
50
+ array.splice(i, 1);
51
+ }
52
+ }
53
+
54
+ export class NodeGraphView extends View {
55
+ /**
56
+ *
57
+ * @param {NodeGraph} graph
58
+ * @param {NodeGraphVisualData} visual
59
+ * @param {NodeGraphCamera} camera
60
+ * @param {NodeDescriptionVisualRegistry} nodeVisualRegistry
61
+ * @param {ActionProcessor} [actionProcessor] timeline that all graph edits are routed through
62
+ * @param {NodeGraphSelection} [selection]
63
+ */
64
+ constructor({
65
+ graph,
66
+ visual,
67
+ camera,
68
+ nodeVisualRegistry,
69
+ actionProcessor = new ActionProcessor({}),
70
+ selection = new NodeGraphSelection()
71
+ }) {
72
+ super();
73
+
74
+ /**
75
+ *
76
+ * @type {ActionProcessor}
77
+ */
78
+ this.actionProcessor = actionProcessor;
79
+
80
+ /**
81
+ *
82
+ * @type {NodeGraphCamera}
83
+ */
84
+ this.camera = camera;
85
+
86
+ /**
87
+ *
88
+ * @type {NodeGraph}
89
+ */
90
+ this.graph = graph;
91
+
92
+ /**
93
+ *
94
+ * @type {NodeGraphVisualData}
95
+ */
96
+ this.visual = visual;
97
+
98
+ /**
99
+ *
100
+ * @type {NodeGraphSelection}
101
+ */
102
+ this.selection = selection;
103
+
104
+ this.el = document.createElement('div');
105
+
106
+ this.addClass('ui-node-graph-view');
107
+
108
+ const self = this;
109
+
110
+ const tempConnection = {
111
+ enabled: false,
112
+ anchor: new Vector2(),
113
+ endpoint: null
114
+ };
115
+
116
+ const vBlockCanvas = new ListView(graph.nodes, {
117
+ classList: ['block-canvas'],
118
+ /**
119
+ *
120
+ * @param {NodeInstance} node
121
+ * @returns {View}
122
+ */
123
+ elementFactory(node) {
124
+ const nodeVisualData = visual.ensureNode(node, nodeVisualRegistry);
125
+
126
+ const nodeView = new NodeView({
127
+ node,
128
+ visual: nodeVisualData,
129
+ visualData: visual,
130
+ // dragging is editor behavior: managed here so moves land on the action timeline
131
+ enableDrag: false,
132
+ parameterSetCallback(n, parameterId, value) {
133
+ actionProcessor.mark('set parameter');
134
+ actionProcessor.do(new NodeParameterSetAction(n, parameterId, value));
135
+ },
136
+ portCreationCallback(portView, port) {
137
+
138
+ const draggableAspect = new DraggableAspect({
139
+ el: portView.el,
140
+ dragStart(p) {
141
+
142
+ const endpoint = new NodeInstancePortReference();
143
+
144
+ endpoint.set(node, port);
145
+
146
+ tempConnection.enabled = true;
147
+ tempConnection.endpoint = endpoint;
148
+
149
+ },
150
+ dragEnd() {
151
+ tempConnection.enabled = false;
152
+
153
+ vConnectionCanvas.render();
154
+ },
155
+ drag(p, o, delta, event) {
156
+ // the anchor lives in graph space, derive it from the cursor position over this view
157
+ readPositionFromMouseEvent(v2_pointer, event, self.el);
158
+
159
+ self.transformPointCanvas2Graph(v2_pointer, tempConnection.anchor);
160
+
161
+ vConnectionCanvas.render();
162
+ }
163
+ });
164
+
165
+ draggableAspect.getPointer().on.up.add(() => {
166
+ //pointer released above the port
167
+
168
+ if (tempConnection.enabled) {
169
+ /**
170
+ *
171
+ * @type {NodeInstancePortReference}
172
+ */
173
+ const endpoint = tempConnection.endpoint;
174
+
175
+ const endpointPort = endpoint.port;
176
+
177
+ if (endpointPort === port) {
178
+ //can't connect port to itself
179
+ return;
180
+ }
181
+
182
+ if (endpointPort.direction === port.direction) {
183
+ //can't connect ports of the same directionality
184
+ return;
185
+ }
186
+
187
+ const dataType = endpointPort.dataType;
188
+
189
+ //check that the port types match
190
+ if (port.dataType === dataType) {
191
+
192
+ let source_node, source_port, target_node, target_port;
193
+
194
+ if (endpointPort.direction === PortDirection.Out) {
195
+ source_node = endpoint.instance.id;
196
+ source_port = endpointPort.id;
197
+ target_node = node.id;
198
+ target_port = port.id;
199
+ } else {
200
+ source_node = node.id;
201
+ source_port = port.id;
202
+ target_node = endpoint.instance.id;
203
+ target_port = endpointPort.id;
204
+ }
205
+
206
+ const source_ref = graph.getConnectionEndpoint(source_node, source_port);
207
+ const target_ref = graph.getConnectionEndpoint(target_node, target_port);
208
+
209
+ const duplicate = source_ref.connections.some(
210
+ c => c.source === source_ref && c.target === target_ref
211
+ );
212
+
213
+ if (!duplicate) {
214
+ actionProcessor.mark('create connection');
215
+ actionProcessor.do(new ConnectionCreateAction(
216
+ graph,
217
+ source_node, source_port,
218
+ target_node, target_port
219
+ ));
220
+ }
221
+
222
+ }
223
+ }
224
+ });
225
+
226
+ portView.on.linked.add(draggableAspect.start, draggableAspect);
227
+ portView.on.unlinked.add(draggableAspect.stop, draggableAspect);
228
+
229
+ }
230
+ });
231
+
232
+ nodeView.bindSignal(nodeView.position.onChanged, vConnectionCanvas.render, vConnectionCanvas);
233
+
234
+ // selection state is reflected as a CSS class
235
+ function updateSelectionClass() {
236
+ nodeView.setClass('selected', selection.containsNode(node.id));
237
+ }
238
+
239
+ nodeView.bindSignal(selection.nodes.on.added, updateSelectionClass);
240
+ nodeView.bindSignal(selection.nodes.on.removed, updateSelectionClass);
241
+ nodeView.on.linked.add(updateSelectionClass);
242
+
243
+ const dragScale = new Vector2(1, 1);
244
+
245
+ /**
246
+ * Nodes being moved by the current drag gesture
247
+ * @type {{visual:NodeVisualData, from:Vector2}[]}
248
+ */
249
+ let dragEntries = [];
250
+
251
+ const nodeDrag = new DraggableAspect({
252
+ el: nodeView.el,
253
+ dragStart() {
254
+ dragEntries = [];
255
+
256
+ if (selection.containsNode(node.id)) {
257
+ // dragging a selected node moves the entire selection
258
+ selection.nodes.forEach(id => {
259
+ const nv = visual.getNode(id);
260
+
261
+ if (nv !== undefined) {
262
+ dragEntries.push({ visual: nv, from: nv.dimensions.position.clone() });
263
+ }
264
+ });
265
+ } else {
266
+ dragEntries.push({ visual: nodeVisualData, from: nodeVisualData.dimensions.position.clone() });
267
+ }
268
+ },
269
+ drag(position, origin, delta) {
270
+ const p = delta.clone();
271
+
272
+ nodeView.computeGlobalScale(dragScale);
273
+
274
+ p.divide(dragScale);
275
+
276
+ for (const entry of dragEntries) {
277
+ entry.visual.dimensions.position.add(p);
278
+ }
279
+ },
280
+ dragEnd() {
281
+ const moved = dragEntries.filter(entry => !entry.visual.dimensions.position.equals(entry.from));
282
+
283
+ if (moved.length === 0) {
284
+ //no net movement
285
+ return;
286
+ }
287
+
288
+ // nodes are already at their final positions, the action records the
289
+ // net change so the gesture lands on the timeline as a single entry
290
+ actionProcessor.mark(moved.length === 1 ? 'move node' : 'move nodes');
291
+ actionProcessor.do(new NodesMoveAction(moved.map(entry => ({
292
+ visual: entry.visual,
293
+ from: entry.from,
294
+ to: entry.visual.dimensions.position.clone()
295
+ }))));
296
+ }
297
+ });
298
+
299
+ // selection follows the press, the typical convention: a drag that
300
+ // starts on an unselected node moves just that node once selected
301
+ nodeDrag.getPointer().on.down.add((p, event) => {
302
+ if (event.ctrlKey || event.shiftKey || !selection.containsNode(node.id)) {
303
+ self.applySelectionClick(node.id, null, event);
304
+ }
305
+ });
306
+
307
+ nodeView.on.linked.add(nodeDrag.start, nodeDrag);
308
+ nodeView.on.unlinked.add(nodeDrag.stop, nodeDrag);
309
+
310
+ return nodeView;
311
+ }
312
+ });
313
+
314
+ // scale about the top-left corner, regardless of what layout size the element ends up with
315
+ vBlockCanvas.transformOrigin.set(0, 0);
316
+
317
+ this.addChild(vBlockCanvas);
318
+
319
+
320
+ //create canvas to draw connections on
321
+ const vConnectionCanvas = new AutoCanvasView({
322
+ classList: ['connection-canvas']
323
+ });
324
+
325
+ const v2_source = new Vector2();
326
+ const v2_target = new Vector2();
327
+
328
+ /**
329
+ *
330
+ * @param {CanvasRenderingContext2D} ctx
331
+ * @param width
332
+ * @param height
333
+ */
334
+ vConnectionCanvas.draw = (ctx, width, height) => {
335
+ ctx.clearRect(0, 0, width, height);
336
+
337
+ ctx.lineCap = 'round';
338
+
339
+ //draw connections
340
+ graph.connections.forEach(connection => {
341
+
342
+
343
+ const source = connection.source;
344
+ const target = connection.target;
345
+
346
+ this.getEndpointGraphPosition(source, v2_source);
347
+
348
+ this.getEndpointGraphPosition(target, v2_target);
349
+
350
+
351
+ this.drawConnection(ctx, v2_source, v2_target, source.port.dataType, selection.containsConnection(connection.id));
352
+
353
+ });
354
+
355
+ //draw temp connection
356
+
357
+ if (tempConnection.enabled) {
358
+ /**
359
+ *
360
+ * @type {NodeInstancePortReference}
361
+ */
362
+ const endpoint = tempConnection.endpoint;
363
+
364
+ this.getEndpointGraphPosition(endpoint, v2_source);
365
+ const dataType = endpoint.port.dataType;
366
+ if (endpoint.port.direction === PortDirection.Out) {
367
+ this.drawConnection(ctx, v2_source, tempConnection.anchor, dataType);
368
+ } else {
369
+ this.drawConnection(ctx, tempConnection.anchor, v2_source, dataType);
370
+ }
371
+ }
372
+ };
373
+
374
+ this.addChild(vConnectionCanvas);
375
+
376
+ this.size.onChanged.add((x, y) => {
377
+ vConnectionCanvas.size.set(x, y);
378
+ });
379
+
380
+ function onCameraChange() {
381
+ const scale = camera.scale.getValue();
382
+ const p = camera.position;
383
+
384
+ vBlockCanvas.scale.setScalar(scale);
385
+ vBlockCanvas.position.set(-p.x * scale, -p.y * scale);
386
+
387
+ vConnectionCanvas.render();
388
+ }
389
+
390
+ this.initializeNavigationControls();
391
+
392
+ this.on.linked.add(onCameraChange);
393
+ this.bindSignal(camera.position.onChanged, onCameraChange);
394
+ this.bindSignal(camera.scale.onChanged, onCameraChange);
395
+
396
+ // wires are drawn from graph state, repaint when the structure changes
397
+ this.bindSignal(graph.on.connectionAdded, vConnectionCanvas.render, vConnectionCanvas);
398
+ this.bindSignal(graph.on.connectionRemoved, vConnectionCanvas.render, vConnectionCanvas);
399
+
400
+ // selected wires are drawn highlighted
401
+ this.bindSignal(selection.connections.on.added, vConnectionCanvas.render, vConnectionCanvas);
402
+ this.bindSignal(selection.connections.on.removed, vConnectionCanvas.render, vConnectionCanvas);
403
+ }
404
+
405
+ initializeNavigationControls() {
406
+ const cameraPosition = new Vector2();
407
+ const camera = this.camera;
408
+
409
+ const draggableAspect = new DraggableAspect({
410
+ el: this.el,
411
+ dragStart() {
412
+ cameraPosition.copy(camera.position)
413
+ },
414
+ drag(p, o) {
415
+ const d = o.clone();
416
+
417
+ d.sub(p);
418
+ d.multiplyScalar(1 / camera.scale.getValue());
419
+
420
+ d.add(cameraPosition);
421
+
422
+ camera.position.copy(d);
423
+ }
424
+ });
425
+
426
+ draggableAspect.getPointer().on.wheel.add((delta, position) => {
427
+ const oldScale = camera.scale.getValue();
428
+
429
+ camera.zoomAt(position, (1 - delta.y / 20) * oldScale);
430
+ });
431
+
432
+ // clicks over the background select wires, or clear the selection
433
+ // node and port elements stop pointer propagation, so taps here mean open canvas
434
+ const tapPoint = new Vector2();
435
+
436
+ draggableAspect.getPointer().on.tap.add((position, event) => {
437
+ this.transformPointCanvas2Graph(position, tapPoint);
438
+
439
+ const connection = this.findConnectionAt(tapPoint);
440
+
441
+ this.applySelectionClick(null, connection !== null ? connection.id : null, event);
442
+ });
443
+
444
+ this.on.linked.add(draggableAspect.start, draggableAspect);
445
+ this.on.unlinked.add(draggableAspect.stop, draggableAspect);
446
+
447
+ }
448
+
449
+ /**
450
+ * Find the connection nearest to a graph-space point, within hit tolerance
451
+ * @param {Vector2} point graph-space point
452
+ * @returns {Connection|null}
453
+ */
454
+ findConnectionAt(point) {
455
+ let best = null;
456
+ let best_distance = CONNECTION_HIT_TOLERANCE_PX / this.camera.scale.getValue();
457
+
458
+ const connections = this.graph.connections;
459
+ const n = connections.length;
460
+
461
+ for (let i = 0; i < n; i++) {
462
+ const connection = connections.get(i);
463
+
464
+ this.getEndpointGraphPosition(connection.source, v2_hit_source);
465
+ this.getEndpointGraphPosition(connection.target, v2_hit_target);
466
+
467
+ wire_bounds(wire_aabb, v2_hit_source.x, v2_hit_source.y, v2_hit_target.x, v2_hit_target.y);
468
+
469
+ if (
470
+ point.x < wire_aabb[0] - best_distance || point.x > wire_aabb[2] + best_distance
471
+ || point.y < wire_aabb[1] - best_distance || point.y > wire_aabb[3] + best_distance
472
+ ) {
473
+ //outside the inflated bounds, can't beat the current best
474
+ continue;
475
+ }
476
+
477
+ const distance = wire_distance_to_point(
478
+ point.x, point.y,
479
+ v2_hit_source.x, v2_hit_source.y,
480
+ v2_hit_target.x, v2_hit_target.y
481
+ );
482
+
483
+ if (distance < best_distance) {
484
+ best_distance = distance;
485
+ best = connection;
486
+ }
487
+ }
488
+
489
+ return best;
490
+ }
491
+
492
+ /**
493
+ * Apply a click-selection gesture following the typical editor conventions:
494
+ * plain click replaces the selection, CTRL toggles the element, SHIFT adds it,
495
+ * plain click over nothing clears.
496
+ * @param {number|null} nodeId clicked node, if any
497
+ * @param {number|null} connectionId clicked connection, if any
498
+ * @param {MouseEvent|PointerEvent} event source of modifier key state
499
+ */
500
+ applySelectionClick(nodeId, connectionId, event) {
501
+ const selection = this.selection;
502
+
503
+ const ctrl = event.ctrlKey;
504
+ const shift = event.shiftKey;
505
+
506
+ const hasTarget = nodeId !== null || connectionId !== null;
507
+
508
+ let nodes = selection.nodes.asArray().slice();
509
+ let connections = selection.connections.asArray().slice();
510
+
511
+ if (ctrl && hasTarget) {
512
+
513
+ if (nodeId !== null) {
514
+ array_toggle(nodes, nodeId);
515
+ } else {
516
+ array_toggle(connections, connectionId);
517
+ }
518
+
519
+ } else if (shift && hasTarget) {
520
+
521
+ if (nodeId !== null && !nodes.includes(nodeId)) {
522
+ nodes.push(nodeId);
523
+ } else if (connectionId !== null && !connections.includes(connectionId)) {
524
+ connections.push(connectionId);
525
+ }
526
+
527
+ } else if (!ctrl && !shift) {
528
+
529
+ nodes = nodeId !== null ? [nodeId] : [];
530
+ connections = connectionId !== null ? [connectionId] : [];
531
+
532
+ } else {
533
+ // modifier click over empty space, selection unchanged
534
+ return;
535
+ }
536
+
537
+ if (selection.matches(nodes, connections)) {
538
+ // no change, keep the timeline clean
539
+ return;
540
+ }
541
+
542
+ this.actionProcessor.mark('select');
543
+ this.actionProcessor.do(new SelectionSetAction(selection, nodes, connections));
544
+ }
545
+
546
+
547
+ /**
548
+ *
549
+ * @param x0
550
+ * @param y0
551
+ * @param x1
552
+ * @param y1
553
+ * @returns {boolean}
554
+ */
555
+ isGraphAABBVisible(x0, y0, x1, y1) {
556
+
557
+ const scale = this.camera.scale.getValue();
558
+ const cp = this.camera.position;
559
+
560
+ //transform graph-space to canvas-space
561
+ const _x0 = (x0 - cp.x) * scale;
562
+ const _y0 = (y0 - cp.y) * scale;
563
+ const _x1 = (x1 - cp.x) * scale;
564
+ const _y1 = (y1 - cp.y) * scale;
565
+
566
+ return _x0 < this.size.x && _x1 > 0 && _y0 < this.size.y && _y1 > 0;
567
+ }
568
+
569
+ /**
570
+ *
571
+ * @param {CanvasRenderingContext2D} ctx
572
+ * @param {Vector2} source
573
+ * @param {Vector2} target
574
+ * @param {DataType} dataType
575
+ * @param {boolean} [selected] selected wires are drawn with a highlight halo
576
+ */
577
+ drawConnection(ctx, source, target, dataType, selected = false) {
578
+ wire_bounds(wire_aabb, source.x, source.y, target.x, target.y);
579
+
580
+ const cw_2 = (CONNECTION_WIDTH / 2);
581
+
582
+ if (!this.isGraphAABBVisible(
583
+ wire_aabb[0] - cw_2,
584
+ wire_aabb[1] - cw_2,
585
+ wire_aabb[2] + cw_2,
586
+ wire_aabb[3] + cw_2
587
+ )) {
588
+ //connection is not visible, don't draw
589
+ return;
590
+ }
591
+
592
+ const cameraScale = this.camera.scale.getValue();
593
+ const cameraPosition = this.camera.position;
594
+
595
+ const alpha = clamp(cameraScale * CONNECTION_WIDTH, 0, 1);
596
+
597
+ wire_to_bezier(wire_bezier, source.x, source.y, target.x, target.y);
598
+
599
+ //the graph->canvas transform is affine, transforming the control polygon transforms the curve
600
+ for (let i = 0; i < 8; i += 2) {
601
+ wire_bezier[i] = (wire_bezier[i] - cameraPosition.x) * cameraScale;
602
+ wire_bezier[i + 1] = (wire_bezier[i + 1] - cameraPosition.y) * cameraScale;
603
+ }
604
+
605
+ ctx.beginPath();
606
+
607
+ ctx.moveTo(wire_bezier[0], wire_bezier[1]);
608
+
609
+ ctx.bezierCurveTo(
610
+ wire_bezier[2], wire_bezier[3],
611
+ wire_bezier[4], wire_bezier[5],
612
+ wire_bezier[6], wire_bezier[7]
613
+ );
614
+
615
+ if (selected) {
616
+ ctx.lineWidth = max2(1, (CONNECTION_WIDTH + 4) * cameraScale);
617
+ ctx.strokeStyle = `rgba(255, 255, 255, ${alpha})`;
618
+
619
+ ctx.stroke();
620
+ }
621
+
622
+ const dataColor = this.visual.getDataColor(dataType.id);
623
+
624
+ ctx.lineWidth = max2(1, CONNECTION_WIDTH * cameraScale);
625
+ ctx.strokeStyle = `rgba(${dataColor.r * 255}, ${dataColor.g * 255}, ${dataColor.b * 255}, ${alpha})`;
626
+
627
+ ctx.stroke();
628
+ }
629
+
630
+ /**
631
+ *
632
+ * @param {NodeInstancePortReference} endpoint
633
+ * @param {Vector2} output
634
+ */
635
+ getEndpointGraphPosition(endpoint, output) {
636
+ const instance = endpoint.instance;
637
+
638
+ const nodeVisualData = this.visual.getNode(instance.id);
639
+
640
+ const nodePosition = nodeVisualData.dimensions.position;
641
+
642
+ const portVisualData = nodeVisualData.getPort(endpoint.port.id);
643
+
644
+ const portPosition = portVisualData.position;
645
+
646
+ const x = nodePosition.x + portPosition.x;
647
+ const y = nodePosition.y + portPosition.y;
648
+
649
+ output.set(x, y);
650
+ }
651
+
652
+ /**
653
+ * Convert point from Graph coordinate space to Canvas coordinate space
654
+ * @param {Vector2} input
655
+ * @param {Vector2} output
656
+ */
657
+ transformPointGraph2Canvas(input, output) {
658
+ this.camera.graphToCanvas(input, output);
659
+ }
660
+
661
+ /**
662
+ * Convert point from Canvas coordinate space to Graph coordinate space
663
+ * @param {Vector2} input
664
+ * @param {Vector2} output
665
+ */
666
+ transformPointCanvas2Graph(input, output) {
667
+ this.camera.canvasToGraph(input, output);
668
+ }
669
+ }