@zephyr3d/scene 0.9.5 → 0.9.6

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 (420) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/material/msdf_text.js +3 -3
  3. package/dist/material/msdf_text.js.map +1 -1
  4. package/dist/text/font/cff_font.js +890 -0
  5. package/dist/text/font/cff_font.js.map +1 -0
  6. package/dist/text/font/font_asset.js +17 -3
  7. package/dist/text/font/font_asset.js.map +1 -1
  8. package/package.json +1 -1
  9. package/dist/animation/ik/ik_chain_builder.js +0 -68
  10. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  11. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  12. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  13. package/dist/animation/ik/ik_track.js +0 -96
  14. package/dist/animation/ik/ik_track.js.map +0 -1
  15. package/dist/animation/ik_postprocessor.js +0 -71
  16. package/dist/animation/ik_postprocessor.js.map +0 -1
  17. package/dist/animation/joint_dynamics/math.js +0 -16
  18. package/dist/animation/joint_dynamics/math.js.map +0 -1
  19. package/dist/animation/manual_transform_processor.js +0 -156
  20. package/dist/animation/manual_transform_processor.js.map +0 -1
  21. package/dist/animation/skeleton_postprocessor.js +0 -50
  22. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  23. package/dist/animation/spring2/collision.js +0 -469
  24. package/dist/animation/spring2/collision.js.map +0 -1
  25. package/dist/animation/spring2/constraints.js +0 -329
  26. package/dist/animation/spring2/constraints.js.map +0 -1
  27. package/dist/animation/spring2/controller.js +0 -434
  28. package/dist/animation/spring2/controller.js.map +0 -1
  29. package/dist/animation/spring2/math.js +0 -16
  30. package/dist/animation/spring2/math.js.map +0 -1
  31. package/dist/animation/spring2/solver.js +0 -624
  32. package/dist/animation/spring2/solver.js.map +0 -1
  33. package/dist/animation/spring2/spring_system.js +0 -118
  34. package/dist/animation/spring2/spring_system.js.map +0 -1
  35. package/dist/animation/spring2/types.js +0 -19
  36. package/dist/animation/spring2/types.js.map +0 -1
  37. package/dist/animation/spring_postprocessor.js +0 -54
  38. package/dist/animation/spring_postprocessor.js.map +0 -1
  39. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
  40. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  41. package/dist/asset/loaders/gltf/helpers.js +0 -331
  42. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  43. package/dist/material/sprite3d.js +0 -301
  44. package/dist/material/sprite3d.js.map +0 -1
  45. package/dist/material/sprite3d_std.js +0 -116
  46. package/dist/material/sprite3d_std.js.map +0 -1
  47. package/dist/material/sprite3dblueprint.js +0 -235
  48. package/dist/material/sprite3dblueprint.js.map +0 -1
  49. package/dist/material/sprite_sdf.js +0 -106
  50. package/dist/material/sprite_sdf.js.map +0 -1
  51. package/dist/material/terrainmaterial.js +0 -368
  52. package/dist/material/terrainmaterial.js.map +0 -1
  53. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  54. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  55. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  56. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  57. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  58. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  59. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  60. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  61. package/dist/render/deferredlightpass.js +0 -510
  62. package/dist/render/deferredlightpass.js.map +0 -1
  63. package/dist/render/deferredshadowlightpass.js +0 -428
  64. package/dist/render/deferredshadowlightpass.js.map +0 -1
  65. package/dist/render/gbufferpass.js +0 -50
  66. package/dist/render/gbufferpass.js.map +0 -1
  67. package/dist/scene/sdftextsprite.js +0 -322
  68. package/dist/scene/sdftextsprite.js.map +0 -1
  69. package/dist/scene/sprite3d.js +0 -18
  70. package/dist/scene/sprite3d.js.map +0 -1
  71. package/dist/scene/terrain/grass.js +0 -280
  72. package/dist/scene/terrain/grass.js.map +0 -1
  73. package/dist/scene/terrain/heightfield.js +0 -475
  74. package/dist/scene/terrain/heightfield.js.map +0 -1
  75. package/dist/scene/terrain/patch.js +0 -532
  76. package/dist/scene/terrain/patch.js.map +0 -1
  77. package/dist/scene/terrain/quadtree.js +0 -461
  78. package/dist/scene/terrain/quadtree.js.map +0 -1
  79. package/dist/scene/terrain/terrain.js +0 -231
  80. package/dist/scene/terrain/terrain.js.map +0 -1
  81. package/dist/src/animation/animation.js +0 -127
  82. package/dist/src/animation/animation.js.map +0 -1
  83. package/dist/src/animation/animationset.js +0 -255
  84. package/dist/src/animation/animationset.js.map +0 -1
  85. package/dist/src/animation/animationtrack.js +0 -34
  86. package/dist/src/animation/animationtrack.js.map +0 -1
  87. package/dist/src/animation/eulerrotationtrack.js +0 -52
  88. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  89. package/dist/src/animation/morphtarget.js +0 -93
  90. package/dist/src/animation/morphtarget.js.map +0 -1
  91. package/dist/src/animation/morphtrack.js +0 -70
  92. package/dist/src/animation/morphtrack.js.map +0 -1
  93. package/dist/src/animation/proptrack.js +0 -161
  94. package/dist/src/animation/proptrack.js.map +0 -1
  95. package/dist/src/animation/rotationtrack.js +0 -51
  96. package/dist/src/animation/rotationtrack.js.map +0 -1
  97. package/dist/src/animation/scaletrack.js +0 -50
  98. package/dist/src/animation/scaletrack.js.map +0 -1
  99. package/dist/src/animation/skeleton.js +0 -204
  100. package/dist/src/animation/skeleton.js.map +0 -1
  101. package/dist/src/animation/translationtrack.js +0 -50
  102. package/dist/src/animation/translationtrack.js.map +0 -1
  103. package/dist/src/app/app.js +0 -129
  104. package/dist/src/app/app.js.map +0 -1
  105. package/dist/src/app/inputmgr.js +0 -267
  106. package/dist/src/app/inputmgr.js.map +0 -1
  107. package/dist/src/asset/assetmanager.js +0 -404
  108. package/dist/src/asset/assetmanager.js.map +0 -1
  109. package/dist/src/asset/builtin.js +0 -337
  110. package/dist/src/asset/builtin.js.map +0 -1
  111. package/dist/src/asset/loaders/dds/dds.js +0 -470
  112. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  113. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  114. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  115. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  116. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  117. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  118. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  119. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  120. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  121. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  122. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  123. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  124. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  125. package/dist/src/asset/loaders/loader.js +0 -45
  126. package/dist/src/asset/loaders/loader.js.map +0 -1
  127. package/dist/src/asset/model.js +0 -414
  128. package/dist/src/asset/model.js.map +0 -1
  129. package/dist/src/blitter/bilateralblur.js +0 -221
  130. package/dist/src/blitter/bilateralblur.js.map +0 -1
  131. package/dist/src/blitter/blitter.js +0 -390
  132. package/dist/src/blitter/blitter.js.map +0 -1
  133. package/dist/src/blitter/box.js +0 -118
  134. package/dist/src/blitter/box.js.map +0 -1
  135. package/dist/src/blitter/copy.js +0 -22
  136. package/dist/src/blitter/copy.js.map +0 -1
  137. package/dist/src/blitter/gaussianblur.js +0 -228
  138. package/dist/src/blitter/gaussianblur.js.map +0 -1
  139. package/dist/src/camera/base.js +0 -92
  140. package/dist/src/camera/base.js.map +0 -1
  141. package/dist/src/camera/camera.js +0 -1005
  142. package/dist/src/camera/camera.js.map +0 -1
  143. package/dist/src/camera/fps.js +0 -238
  144. package/dist/src/camera/fps.js.map +0 -1
  145. package/dist/src/camera/orbit.js +0 -245
  146. package/dist/src/camera/orbit.js.map +0 -1
  147. package/dist/src/camera/orthocamera.js +0 -167
  148. package/dist/src/camera/orthocamera.js.map +0 -1
  149. package/dist/src/camera/perspectivecamera.js +0 -141
  150. package/dist/src/camera/perspectivecamera.js.map +0 -1
  151. package/dist/src/index.js +0 -120
  152. package/dist/src/index.js.map +0 -1
  153. package/dist/src/material/blinn.js +0 -81
  154. package/dist/src/material/blinn.js.map +0 -1
  155. package/dist/src/material/grassmaterial.js +0 -113
  156. package/dist/src/material/grassmaterial.js.map +0 -1
  157. package/dist/src/material/lambert.js +0 -92
  158. package/dist/src/material/lambert.js.map +0 -1
  159. package/dist/src/material/material.js +0 -301
  160. package/dist/src/material/material.js.map +0 -1
  161. package/dist/src/material/meshmaterial.js +0 -704
  162. package/dist/src/material/meshmaterial.js.map +0 -1
  163. package/dist/src/material/mixins/albedocolor.js +0 -76
  164. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  165. package/dist/src/material/mixins/foliage.js +0 -47
  166. package/dist/src/material/mixins/foliage.js.map +0 -1
  167. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  168. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  169. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  170. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  171. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  172. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  173. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  174. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  175. package/dist/src/material/mixins/lit.js +0 -476
  176. package/dist/src/material/mixins/lit.js.map +0 -1
  177. package/dist/src/material/mixins/pbr/common.js +0 -918
  178. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  179. package/dist/src/material/mixins/texture.js +0 -172
  180. package/dist/src/material/mixins/texture.js.map +0 -1
  181. package/dist/src/material/mixins/vertexcolor.js +0 -56
  182. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  183. package/dist/src/material/particle.js +0 -178
  184. package/dist/src/material/particle.js.map +0 -1
  185. package/dist/src/material/pbrmr.js +0 -97
  186. package/dist/src/material/pbrmr.js.map +0 -1
  187. package/dist/src/material/pbrsg.js +0 -97
  188. package/dist/src/material/pbrsg.js.map +0 -1
  189. package/dist/src/material/shader/helper.js +0 -1209
  190. package/dist/src/material/shader/helper.js.map +0 -1
  191. package/dist/src/material/terrain-cm.js +0 -606
  192. package/dist/src/material/terrain-cm.js.map +0 -1
  193. package/dist/src/material/terrainmaterial.js +0 -375
  194. package/dist/src/material/terrainmaterial.js.map +0 -1
  195. package/dist/src/material/unlit.js +0 -41
  196. package/dist/src/material/unlit.js.map +0 -1
  197. package/dist/src/material/water.js +0 -417
  198. package/dist/src/material/water.js.map +0 -1
  199. package/dist/src/posteffect/bloom.js +0 -361
  200. package/dist/src/posteffect/bloom.js.map +0 -1
  201. package/dist/src/posteffect/compositor.js +0 -226
  202. package/dist/src/posteffect/compositor.js.map +0 -1
  203. package/dist/src/posteffect/fxaa.js +0 -273
  204. package/dist/src/posteffect/fxaa.js.map +0 -1
  205. package/dist/src/posteffect/grayscale.js +0 -69
  206. package/dist/src/posteffect/grayscale.js.map +0 -1
  207. package/dist/src/posteffect/motionblur.js +0 -96
  208. package/dist/src/posteffect/motionblur.js.map +0 -1
  209. package/dist/src/posteffect/posteffect.js +0 -126
  210. package/dist/src/posteffect/posteffect.js.map +0 -1
  211. package/dist/src/posteffect/sao.js +0 -324
  212. package/dist/src/posteffect/sao.js.map +0 -1
  213. package/dist/src/posteffect/ssr.js +0 -489
  214. package/dist/src/posteffect/ssr.js.map +0 -1
  215. package/dist/src/posteffect/taa.js +0 -172
  216. package/dist/src/posteffect/taa.js.map +0 -1
  217. package/dist/src/posteffect/tonemap.js +0 -94
  218. package/dist/src/posteffect/tonemap.js.map +0 -1
  219. package/dist/src/render/abuffer_oit.js +0 -361
  220. package/dist/src/render/abuffer_oit.js.map +0 -1
  221. package/dist/src/render/clipmap.js +0 -851
  222. package/dist/src/render/clipmap.js.map +0 -1
  223. package/dist/src/render/cluster_light.js +0 -333
  224. package/dist/src/render/cluster_light.js.map +0 -1
  225. package/dist/src/render/cull_visitor.js +0 -187
  226. package/dist/src/render/cull_visitor.js.map +0 -1
  227. package/dist/src/render/depthpass.js +0 -68
  228. package/dist/src/render/depthpass.js.map +0 -1
  229. package/dist/src/render/drawable_mixin.js +0 -227
  230. package/dist/src/render/drawable_mixin.js.map +0 -1
  231. package/dist/src/render/envlight.js +0 -463
  232. package/dist/src/render/envlight.js.map +0 -1
  233. package/dist/src/render/fbm_wavegenerator.js +0 -251
  234. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  235. package/dist/src/render/fft_wavegenerator.js +0 -1006
  236. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  237. package/dist/src/render/fullscreenquad.js +0 -38
  238. package/dist/src/render/fullscreenquad.js.map +0 -1
  239. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  240. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  241. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  242. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  243. package/dist/src/render/hzb.js +0 -273
  244. package/dist/src/render/hzb.js.map +0 -1
  245. package/dist/src/render/lightpass.js +0 -172
  246. package/dist/src/render/lightpass.js.map +0 -1
  247. package/dist/src/render/objectcolorpass.js +0 -51
  248. package/dist/src/render/objectcolorpass.js.map +0 -1
  249. package/dist/src/render/primitive.js +0 -364
  250. package/dist/src/render/primitive.js.map +0 -1
  251. package/dist/src/render/render_queue.js +0 -467
  252. package/dist/src/render/render_queue.js.map +0 -1
  253. package/dist/src/render/renderbundle_wrapper.js +0 -152
  254. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  255. package/dist/src/render/renderer.js +0 -455
  256. package/dist/src/render/renderer.js.map +0 -1
  257. package/dist/src/render/renderpass.js +0 -200
  258. package/dist/src/render/renderpass.js.map +0 -1
  259. package/dist/src/render/shadowmap_pass.js +0 -56
  260. package/dist/src/render/shadowmap_pass.js.map +0 -1
  261. package/dist/src/render/sky.js +0 -1103
  262. package/dist/src/render/sky.js.map +0 -1
  263. package/dist/src/render/weightedblended_oit.js +0 -168
  264. package/dist/src/render/weightedblended_oit.js.map +0 -1
  265. package/dist/src/scene/batchgroup.js +0 -162
  266. package/dist/src/scene/batchgroup.js.map +0 -1
  267. package/dist/src/scene/environment.js +0 -209
  268. package/dist/src/scene/environment.js.map +0 -1
  269. package/dist/src/scene/graph_node.js +0 -72
  270. package/dist/src/scene/graph_node.js.map +0 -1
  271. package/dist/src/scene/light.js +0 -416
  272. package/dist/src/scene/light.js.map +0 -1
  273. package/dist/src/scene/mesh.js +0 -341
  274. package/dist/src/scene/mesh.js.map +0 -1
  275. package/dist/src/scene/octree.js +0 -649
  276. package/dist/src/scene/octree.js.map +0 -1
  277. package/dist/src/scene/particlesys.js +0 -738
  278. package/dist/src/scene/particlesys.js.map +0 -1
  279. package/dist/src/scene/raycast_visitor.js +0 -103
  280. package/dist/src/scene/raycast_visitor.js.map +0 -1
  281. package/dist/src/scene/scene.js +0 -284
  282. package/dist/src/scene/scene.js.map +0 -1
  283. package/dist/src/scene/scene_node.js +0 -732
  284. package/dist/src/scene/scene_node.js.map +0 -1
  285. package/dist/src/scene/terrain/grass.js +0 -278
  286. package/dist/src/scene/terrain/grass.js.map +0 -1
  287. package/dist/src/scene/terrain/heightfield.js +0 -475
  288. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  289. package/dist/src/scene/terrain/patch.js +0 -530
  290. package/dist/src/scene/terrain/patch.js.map +0 -1
  291. package/dist/src/scene/terrain/quadtree.js +0 -461
  292. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  293. package/dist/src/scene/terrain/terrain.js +0 -246
  294. package/dist/src/scene/terrain/terrain.js.map +0 -1
  295. package/dist/src/scene/terrain-cm/grass.js +0 -594
  296. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  297. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  298. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  299. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  300. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  301. package/dist/src/scene/water.js +0 -374
  302. package/dist/src/scene/water.js.map +0 -1
  303. package/dist/src/shaders/atmosphere.js +0 -957
  304. package/dist/src/shaders/atmosphere.js.map +0 -1
  305. package/dist/src/shaders/fog.js +0 -112
  306. package/dist/src/shaders/fog.js.map +0 -1
  307. package/dist/src/shaders/misc.js +0 -266
  308. package/dist/src/shaders/misc.js.map +0 -1
  309. package/dist/src/shaders/noise.js +0 -222
  310. package/dist/src/shaders/noise.js.map +0 -1
  311. package/dist/src/shaders/pbr.js +0 -51
  312. package/dist/src/shaders/pbr.js.map +0 -1
  313. package/dist/src/shaders/shadow.js +0 -636
  314. package/dist/src/shaders/shadow.js.map +0 -1
  315. package/dist/src/shaders/ssr.js +0 -490
  316. package/dist/src/shaders/ssr.js.map +0 -1
  317. package/dist/src/shaders/temporal.js +0 -215
  318. package/dist/src/shaders/temporal.js.map +0 -1
  319. package/dist/src/shaders/water.js +0 -756
  320. package/dist/src/shaders/water.js.map +0 -1
  321. package/dist/src/shadow/esm.js +0 -237
  322. package/dist/src/shadow/esm.js.map +0 -1
  323. package/dist/src/shadow/pcf_opt.js +0 -181
  324. package/dist/src/shadow/pcf_opt.js.map +0 -1
  325. package/dist/src/shadow/pcf_pd.js +0 -189
  326. package/dist/src/shadow/pcf_pd.js.map +0 -1
  327. package/dist/src/shadow/shader.js +0 -37
  328. package/dist/src/shadow/shader.js.map +0 -1
  329. package/dist/src/shadow/shadow_impl.js +0 -15
  330. package/dist/src/shadow/shadow_impl.js.map +0 -1
  331. package/dist/src/shadow/shadowmapper.js +0 -790
  332. package/dist/src/shadow/shadowmapper.js.map +0 -1
  333. package/dist/src/shadow/ssm.js +0 -159
  334. package/dist/src/shadow/ssm.js.map +0 -1
  335. package/dist/src/shadow/vsm.js +0 -297
  336. package/dist/src/shadow/vsm.js.map +0 -1
  337. package/dist/src/shapes/box.js +0 -386
  338. package/dist/src/shapes/box.js.map +0 -1
  339. package/dist/src/shapes/cylinder.js +0 -125
  340. package/dist/src/shapes/cylinder.js.map +0 -1
  341. package/dist/src/shapes/plane.js +0 -88
  342. package/dist/src/shapes/plane.js.map +0 -1
  343. package/dist/src/shapes/shape.js +0 -87
  344. package/dist/src/shapes/shape.js.map +0 -1
  345. package/dist/src/shapes/sphere.js +0 -114
  346. package/dist/src/shapes/sphere.js.map +0 -1
  347. package/dist/src/shapes/tetrahedron.js +0 -188
  348. package/dist/src/shapes/tetrahedron.js.map +0 -1
  349. package/dist/src/shapes/torus.js +0 -111
  350. package/dist/src/shapes/torus.js.map +0 -1
  351. package/dist/src/utility/aabbtree.js +0 -400
  352. package/dist/src/utility/aabbtree.js.map +0 -1
  353. package/dist/src/utility/bounding_volume.js +0 -29
  354. package/dist/src/utility/bounding_volume.js.map +0 -1
  355. package/dist/src/utility/debug.js +0 -28
  356. package/dist/src/utility/debug.js.map +0 -1
  357. package/dist/src/utility/draco/decoder.js +0 -116
  358. package/dist/src/utility/draco/decoder.js.map +0 -1
  359. package/dist/src/utility/misc.js +0 -105
  360. package/dist/src/utility/misc.js.map +0 -1
  361. package/dist/src/utility/panorama.js +0 -163
  362. package/dist/src/utility/panorama.js.map +0 -1
  363. package/dist/src/utility/pmrem.js +0 -354
  364. package/dist/src/utility/pmrem.js.map +0 -1
  365. package/dist/src/utility/rendermipmap.js +0 -115
  366. package/dist/src/utility/rendermipmap.js.map +0 -1
  367. package/dist/src/utility/serialization/json.js +0 -402
  368. package/dist/src/utility/serialization/json.js.map +0 -1
  369. package/dist/src/utility/serialization/manager.js +0 -623
  370. package/dist/src/utility/serialization/manager.js.map +0 -1
  371. package/dist/src/utility/serialization/scene/animation.js +0 -248
  372. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  373. package/dist/src/utility/serialization/scene/batch.js +0 -59
  374. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  375. package/dist/src/utility/serialization/scene/camera.js +0 -790
  376. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  377. package/dist/src/utility/serialization/scene/common.js +0 -222
  378. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  379. package/dist/src/utility/serialization/scene/light.js +0 -575
  380. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  381. package/dist/src/utility/serialization/scene/material.js +0 -1111
  382. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  383. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  384. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  385. package/dist/src/utility/serialization/scene/misc.js +0 -39
  386. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  387. package/dist/src/utility/serialization/scene/node.js +0 -451
  388. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  389. package/dist/src/utility/serialization/scene/particle.js +0 -425
  390. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  391. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  392. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  393. package/dist/src/utility/serialization/scene/scene.js +0 -704
  394. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  395. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  396. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  397. package/dist/src/utility/serialization/scene/water.js +0 -465
  398. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  399. package/dist/src/utility/shprojector.js +0 -297
  400. package/dist/src/utility/shprojector.js.map +0 -1
  401. package/dist/src/utility/textures/ggxlut.js +0 -213
  402. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  403. package/dist/src/utility/textures/gradientnoise.js +0 -62
  404. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  405. package/dist/src/utility/textures/randomnoise.js +0 -41
  406. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  407. package/dist/src/values.js +0 -162
  408. package/dist/src/values.js.map +0 -1
  409. package/dist/utility/blueprint/material/common.js +0 -7
  410. package/dist/utility/blueprint/material/common.js.map +0 -1
  411. package/dist/utility/serialization/blueprint/constants.js +0 -255
  412. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  413. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  414. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  415. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  416. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  417. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  418. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  419. package/dist/utility/serialization/scene/spring_script.js +0 -596
  420. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1,50 +0,0 @@
1
- /**
2
- * Abstract base class for skeleton post-processors.
3
- *
4
- * Post-processors are applied after the base animation/bind pose layer,
5
- * allowing procedural modifications like IK, spring physics, or manual overrides.
6
- *
7
- * @public
8
- */ class SkeletonPostProcessor {
9
- /** Blend weight for this processor [0-1] */ _weight;
10
- /** Whether this processor is enabled */ _enabled;
11
- /** Priority for ordering (higher = applied later) */ _priority;
12
- constructor(weight = 1.0, priority = 0){
13
- this._weight = Math.max(0, Math.min(1, weight));
14
- this._enabled = true;
15
- this._priority = priority;
16
- }
17
- /**
18
- * Get the blend weight [0-1]
19
- */ get weight() {
20
- return this._weight;
21
- }
22
- /**
23
- * Set the blend weight [0-1]
24
- */ set weight(value) {
25
- this._weight = Math.max(0, Math.min(1, value));
26
- }
27
- /**
28
- * Get whether this processor is enabled
29
- */ get enabled() {
30
- return this._enabled;
31
- }
32
- /**
33
- * Set whether this processor is enabled
34
- */ set enabled(value) {
35
- this._enabled = value;
36
- }
37
- /**
38
- * Get the priority (higher = applied later)
39
- */ get priority() {
40
- return this._priority;
41
- }
42
- /**
43
- * Set the priority (higher = applied later)
44
- */ set priority(value) {
45
- this._priority = value;
46
- }
47
- }
48
-
49
- export { SkeletonPostProcessor };
50
- //# sourceMappingURL=skeleton_postprocessor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skeleton_postprocessor.js","sources":["../../src/animation/skeleton_postprocessor.ts"],"sourcesContent":["import type { Skeleton } from './skeleton';\r\n\r\n/**\r\n * Abstract base class for skeleton post-processors.\r\n *\r\n * Post-processors are applied after the base animation/bind pose layer,\r\n * allowing procedural modifications like IK, spring physics, or manual overrides.\r\n *\r\n * @public\r\n */\r\nexport abstract class SkeletonPostProcessor {\r\n /** Blend weight for this processor [0-1] */\r\n protected _weight: number;\r\n /** Whether this processor is enabled */\r\n protected _enabled: boolean;\r\n /** Priority for ordering (higher = applied later) */\r\n protected _priority: number;\r\n\r\n constructor(weight: number = 1.0, priority: number = 0) {\r\n this._weight = Math.max(0, Math.min(1, weight));\r\n this._enabled = true;\r\n this._priority = priority;\r\n }\r\n\r\n /**\r\n * Get the blend weight [0-1]\r\n */\r\n get weight(): number {\r\n return this._weight;\r\n }\r\n\r\n /**\r\n * Set the blend weight [0-1]\r\n */\r\n set weight(value: number) {\r\n this._weight = Math.max(0, Math.min(1, value));\r\n }\r\n\r\n /**\r\n * Get whether this processor is enabled\r\n */\r\n get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n /**\r\n * Set whether this processor is enabled\r\n */\r\n set enabled(value: boolean) {\r\n this._enabled = value;\r\n }\r\n\r\n /**\r\n * Get the priority (higher = applied later)\r\n */\r\n get priority(): number {\r\n return this._priority;\r\n }\r\n\r\n /**\r\n * Set the priority (higher = applied later)\r\n */\r\n set priority(value: number) {\r\n this._priority = value;\r\n }\r\n\r\n /**\r\n * Apply post-processing to skeleton joints.\r\n *\r\n * This method is called after the base animation/bind pose has been applied.\r\n * Implementations should modify joint transforms and blend with the current state\r\n * using the processor's weight.\r\n *\r\n * @param skeleton - The skeleton to process\r\n * @param deltaTime - Time elapsed since last frame (in seconds)\r\n */\r\n abstract apply(skeleton: Skeleton, deltaTime: number): void;\r\n\r\n /**\r\n * Reset the processor to its initial state.\r\n *\r\n * Called when the skeleton or animation state changes significantly.\r\n */\r\n abstract reset(): void;\r\n}\r\n"],"names":["SkeletonPostProcessor","weight","priority","_weight","Math","max","min","_enabled","_priority","value","enabled"],"mappings":"AAEA;;;;;;;AAOC,IACM,MAAeA,qBAAAA,CAAAA;iDAEpB,OAA0B;6CAE1B,QAA4B;0DAE5B,SAA4B;AAE5B,IAAA,WAAA,CAAYC,MAAiB,GAAA,GAAG,EAAEC,QAAAA,GAAmB,CAAC,CAAE;QACtD,IAAI,CAACC,OAAO,GAAGC,IAAKC,CAAAA,GAAG,CAAC,CAAGD,EAAAA,IAAAA,CAAKE,GAAG,CAAC,CAAGL,EAAAA,MAAAA,CAAAA,CAAAA;QACvC,IAAI,CAACM,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACC,SAAS,GAAGN,QAAAA;AACnB;AAEA;;AAEC,MACD,IAAID,MAAiB,GAAA;QACnB,OAAO,IAAI,CAACE,OAAO;AACrB;AAEA;;MAGA,IAAIF,MAAOQ,CAAAA,KAAa,EAAE;QACxB,IAAI,CAACN,OAAO,GAAGC,IAAKC,CAAAA,GAAG,CAAC,CAAGD,EAAAA,IAAAA,CAAKE,GAAG,CAAC,CAAGG,EAAAA,KAAAA,CAAAA,CAAAA;AACzC;AAEA;;AAEC,MACD,IAAIC,OAAmB,GAAA;QACrB,OAAO,IAAI,CAACH,QAAQ;AACtB;AAEA;;MAGA,IAAIG,OAAQD,CAAAA,KAAc,EAAE;QAC1B,IAAI,CAACF,QAAQ,GAAGE,KAAAA;AAClB;AAEA;;AAEC,MACD,IAAIP,QAAmB,GAAA;QACrB,OAAO,IAAI,CAACM,SAAS;AACvB;AAEA;;MAGA,IAAIN,QAASO,CAAAA,KAAa,EAAE;QAC1B,IAAI,CAACD,SAAS,GAAGC,KAAAA;AACnB;AAoBF;;;;"}
@@ -1,469 +0,0 @@
1
- import { Vector3 } from '@zephyr3d/base';
2
- import { EPSILON, ColliderForce } from './types.js';
3
-
4
- // Collision detection & response - direct port of SPCRJointDynamicsJob.cs Collision class
5
- const _pushoutSphereDirection = new Vector3();
6
- const _pushoutSphereScaled = new Vector3();
7
- const _pushoutCapsuleVecN = new Vector3();
8
- const _pushoutCapsuleTargetVec = new Vector3();
9
- const _pushoutCapsuleTail = new Vector3();
10
- const _pushoutCapsulePosOnVec = new Vector3();
11
- const _pushoutCapsulePushVec = new Vector3();
12
- const _pushoutCapsuleScaled = new Vector3();
13
- const _pushInSphereDirection = new Vector3();
14
- const _pushInSphereDirectionN = new Vector3();
15
- const _pushInSphereScaled = new Vector3();
16
- const _pushInCapsuleVecN = new Vector3();
17
- const _pushInCapsuleTargetVec = new Vector3();
18
- const _pushInCapsuleTail = new Vector3();
19
- const _pushInCapsulePosOnVec = new Vector3();
20
- const _pushInCapsulePullVec = new Vector3();
21
- const _pushInCapsulePullVecN = new Vector3();
22
- const _pushInCapsuleScaled = new Vector3();
23
- const _collisionSphereDir = new Vector3();
24
- const _collisionSphereDirN = new Vector3();
25
- const _collisionSphereToCenter = new Vector3();
26
- const _collisionSphereScaled = new Vector3();
27
- const _collisionSphereDiff = new Vector3();
28
- const _collisionCapsuleTail = new Vector3();
29
- const _collisionCapsulePointDir = new Vector3();
30
- const _collisionCapsulePtOnCol = new Vector3();
31
- const _collisionCapsulePtOnLine = new Vector3();
32
- const _collisionCapsuleDiff = new Vector3();
33
- const _collisionCapsuleTempLineResult = {
34
- hit: false,
35
- pointOnLine: new Vector3(),
36
- pointOnCollider: new Vector3(),
37
- radius: 0
38
- };
39
- const _nearestCross0 = new Vector3();
40
- const _nearestCross1 = new Vector3();
41
- const _nearestN1 = new Vector3();
42
- const _nearestN2 = new Vector3();
43
- const _nearestPosDiff = new Vector3();
44
- const _nearestPointOnP = new Vector3();
45
- const _nearestPointOnQ = new Vector3();
46
- const _nearestPointDiff = new Vector3();
47
- const _nearestResult = {
48
- tP: 0,
49
- tQ: 0,
50
- pointOnP: new Vector3(),
51
- pointOnQ: new Vector3(),
52
- sqrDistance: 0
53
- };
54
- const _surfaceNoHit = {
55
- hit: false,
56
- intersectionPoint: new Vector3(),
57
- pushOut: new Vector3(),
58
- pointOnCollider: new Vector3(),
59
- radius: 0
60
- };
61
- const _surfaceTriCenter = new Vector3();
62
- const _surfaceEdgeAB = new Vector3();
63
- const _surfaceEdgeAC = new Vector3();
64
- const _surfacePlaneNormal = new Vector3();
65
- const _surfacePlaneNormalNeg = new Vector3();
66
- const _surfaceColliderDir = new Vector3();
67
- const _surfaceRayDir = new Vector3();
68
- const _surfaceRayDirN = new Vector3();
69
- const _surfaceTail = new Vector3();
70
- const _surfaceIntersection = new Vector3();
71
- const _surfacePushOut = new Vector3();
72
- const _surfaceToCol = new Vector3();
73
- const _surfaceEndVec = new Vector3();
74
- const _surfaceColDirVec = new Vector3();
75
- const _surfaceIntersecToEnd = new Vector3();
76
- const _surfaceColToEnd = new Vector3();
77
- const _surfaceColToIntersect = new Vector3();
78
- const _surfaceEVec = new Vector3();
79
- const _surfacePoc2 = new Vector3();
80
- const _triangleAp = new Vector3();
81
- const _triangleBp = new Vector3();
82
- const _triangleCp = new Vector3();
83
- const _triangleU = new Vector3();
84
- const _triangleV = new Vector3();
85
- const _triangleW = new Vector3();
86
- function writeCollisionResult(out, hit, point, copyPoint) {
87
- if (!out) {
88
- return {
89
- hit,
90
- point: copyPoint ? point.clone() : point
91
- };
92
- }
93
- if (!out.point) {
94
- out.point = new Vector3();
95
- }
96
- out.hit = hit;
97
- out.point.set(point);
98
- return out;
99
- }
100
- function writeLineCollisionResult(out, hit, pointOnLine, pointOnCollider, radius, copyVectors) {
101
- if (!out) {
102
- return {
103
- hit,
104
- pointOnLine: copyVectors ? pointOnLine.clone() : pointOnLine,
105
- pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,
106
- radius
107
- };
108
- }
109
- if (!out.pointOnLine) {
110
- out.pointOnLine = new Vector3();
111
- }
112
- if (!out.pointOnCollider) {
113
- out.pointOnCollider = new Vector3();
114
- }
115
- out.hit = hit;
116
- out.pointOnLine.set(pointOnLine);
117
- out.pointOnCollider.set(pointOnCollider);
118
- out.radius = radius;
119
- return out;
120
- }
121
- function writeSurfaceCheckResult(out, hit, intersectionPoint, pushOut, pointOnCollider, radius, copyVectors) {
122
- if (!out) {
123
- return {
124
- hit,
125
- intersectionPoint: copyVectors ? intersectionPoint.clone() : intersectionPoint,
126
- pushOut: copyVectors ? pushOut.clone() : pushOut,
127
- pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,
128
- radius
129
- };
130
- }
131
- if (!out.intersectionPoint) {
132
- out.intersectionPoint = new Vector3();
133
- }
134
- if (!out.pushOut) {
135
- out.pushOut = new Vector3();
136
- }
137
- if (!out.pointOnCollider) {
138
- out.pointOnCollider = new Vector3();
139
- }
140
- out.hit = hit;
141
- out.intersectionPoint.set(intersectionPoint);
142
- out.pushOut.set(pushOut);
143
- out.pointOnCollider.set(pointOnCollider);
144
- out.radius = radius;
145
- return out;
146
- }
147
- function writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, sqrDistance, copyVectors) {
148
- if (!out) {
149
- return {
150
- tP,
151
- tQ,
152
- pointOnP: copyVectors ? pointOnP.clone() : pointOnP,
153
- pointOnQ: copyVectors ? pointOnQ.clone() : pointOnQ,
154
- sqrDistance
155
- };
156
- }
157
- out.tP = tP;
158
- out.tQ = tQ;
159
- out.pointOnP.set(pointOnP);
160
- out.pointOnQ.set(pointOnQ);
161
- out.sqrDistance = sqrDistance;
162
- return out;
163
- }
164
- // Pushout (keep point outside collider)
165
- function pushoutFromSphere(center, radius, pointRadius, point, out) {
166
- const direction = Vector3.sub(point, center, _pushoutSphereDirection);
167
- const sqrLen = direction.magnitudeSq;
168
- if (sqrLen > EPSILON) {
169
- const dirLen = Math.sqrt(sqrLen) - pointRadius;
170
- if (dirLen < radius) {
171
- const scaled = Vector3.scale(direction, radius / dirLen, _pushoutSphereScaled);
172
- Vector3.add(center, scaled, scaled);
173
- return writeCollisionResult(out, true, scaled, !out);
174
- }
175
- }
176
- return writeCollisionResult(out, false, point, !out);
177
- }
178
- function pushoutFromCollider(colR, colRW, point, ptR, out) {
179
- if (colR.height <= EPSILON) {
180
- return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);
181
- }
182
- return pushoutFromCapsule(colR, colRW, point, ptR, out);
183
- }
184
- function pushoutFromCapsule(colR, colRW, point, ptR, out) {
185
- const capsuleVec = colRW.directionCurrent;
186
- const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);
187
- const capsulePos = colRW.positionCurrent;
188
- const targetVec = Vector3.sub(point, capsulePos, _pushoutCapsuleTargetVec);
189
- const distOnVec = Vector3.dot(capsuleVecN, targetVec);
190
- if (distOnVec <= EPSILON) {
191
- return pushoutFromSphere(capsulePos, colRW.radius, ptR.pointRadius, point, out);
192
- }
193
- if (distOnVec >= colR.height) {
194
- const tail = Vector3.add(capsulePos, capsuleVec, _pushoutCapsuleTail);
195
- return pushoutFromSphere(tail, colRW.radius * colR.radiusTailScale, ptR.pointRadius, point, out);
196
- }
197
- const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushoutCapsulePosOnVec);
198
- Vector3.add(capsulePos, posOnVec, posOnVec);
199
- const pushVec = Vector3.sub(point, posOnVec, _pushoutCapsulePushVec);
200
- const sqrPushDist = pushVec.magnitudeSq;
201
- if (sqrPushDist > EPSILON) {
202
- const pushDist = Math.sqrt(sqrPushDist) - ptR.pointRadius;
203
- const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / colR.height);
204
- if (pushDist < r) {
205
- const scaled = Vector3.scale(pushVec, r / pushDist, _pushoutCapsuleScaled);
206
- Vector3.add(posOnVec, scaled, scaled);
207
- return writeCollisionResult(out, true, scaled, !out);
208
- }
209
- }
210
- return writeCollisionResult(out, false, point, !out);
211
- }
212
- // PushIn (keep point inside collider - inverse mode)
213
- function pushInFromSphere(center, radius, point, out) {
214
- const direction = Vector3.sub(center, point, _pushInSphereDirection);
215
- const sqrLen = direction.magnitudeSq;
216
- if (sqrLen > EPSILON && sqrLen > radius * radius) {
217
- const dirLen = Math.sqrt(sqrLen);
218
- const directionN = Vector3.normalize(direction, _pushInSphereDirectionN);
219
- const scaled = Vector3.scale(directionN, dirLen - radius, _pushInSphereScaled);
220
- Vector3.add(point, scaled, scaled);
221
- return writeCollisionResult(out, true, scaled, !out);
222
- }
223
- return writeCollisionResult(out, false, point, !out);
224
- }
225
- function pushInFromCollider(colR, colRW, point, out) {
226
- if (colR.height <= EPSILON) {
227
- return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);
228
- }
229
- return pushInFromCapsule(colR, colRW, point, out);
230
- }
231
- function pushInFromCapsule(colR, colRW, point, out) {
232
- const capsuleVec = colRW.directionCurrent;
233
- const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);
234
- const capsulePos = colRW.positionCurrent;
235
- const targetVec = Vector3.sub(point, capsulePos, _pushInCapsuleTargetVec);
236
- const distOnVec = Vector3.dot(capsuleVecN, targetVec);
237
- if (distOnVec <= EPSILON) {
238
- return pushInFromSphere(capsulePos, colRW.radius, point, out);
239
- }
240
- if (distOnVec >= colR.height) {
241
- const tail = Vector3.add(capsulePos, capsuleVec, _pushInCapsuleTail);
242
- return pushInFromSphere(tail, colRW.radius * colR.radiusTailScale, point, out);
243
- }
244
- const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushInCapsulePosOnVec);
245
- Vector3.add(capsulePos, posOnVec, posOnVec);
246
- const pullVec = Vector3.sub(posOnVec, point, _pushInCapsulePullVec);
247
- const sqrPullDist = pullVec.magnitudeSq;
248
- if (sqrPullDist > EPSILON) {
249
- const r = colRW.radius * lerp(1.0, colR.radiusTailScale, colR.height / distOnVec);
250
- if (sqrPullDist > r * r) {
251
- const pullDist = Math.sqrt(sqrPullDist);
252
- const pullVecN = Vector3.normalize(pullVec, _pushInCapsulePullVecN);
253
- const scaled = Vector3.scale(pullVecN, pullDist - r, _pushInCapsuleScaled);
254
- Vector3.add(point, scaled, scaled);
255
- return writeCollisionResult(out, true, scaled, !out);
256
- }
257
- }
258
- return writeCollisionResult(out, false, point, !out);
259
- }
260
- // Line segment vs collider detection
261
- function collisionDetectionSphere(center, radius, point1, point2, out) {
262
- const dir = Vector3.sub(point2, point1, _collisionSphereDir);
263
- const dirLen = dir.magnitude;
264
- if (dirLen < EPSILON) {
265
- return writeLineCollisionResult(out, false, point1, center, radius, !out);
266
- }
267
- const dirN = Vector3.scale(dir, 1 / dirLen, _collisionSphereDirN);
268
- const toCenter = Vector3.sub(center, point1, _collisionSphereToCenter);
269
- const dot = Vector3.dot(dirN, toCenter);
270
- const clamped = Math.max(0, Math.min(dot, dirLen));
271
- const ptOnLine = Vector3.scale(dirN, clamped, _collisionSphereScaled);
272
- Vector3.add(point1, ptOnLine, ptOnLine);
273
- const diff = Vector3.sub(center, ptOnLine, _collisionSphereDiff);
274
- const hit = diff.magnitudeSq <= radius * radius;
275
- return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);
276
- }
277
- function collisionDetectionCapsule(colR, colRW, point1, point2, out) {
278
- const capsuleDir = colRW.directionCurrent;
279
- const capsulePos = colRW.positionCurrent;
280
- let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);
281
- if (res.hit) {
282
- return res;
283
- }
284
- const tail = Vector3.add(capsulePos, capsuleDir, _collisionCapsuleTail);
285
- res = collisionDetectionSphere(tail, colRW.radius * colR.radiusTailScale, point1, point2, _collisionCapsuleTempLineResult);
286
- if (res.hit) {
287
- return writeLineCollisionResult(out, true, res.pointOnLine, res.pointOnCollider, res.radius, !out);
288
- }
289
- const pointDir = Vector3.sub(point2, point1, _collisionCapsulePointDir);
290
- const nearest = computeNearestPoints(capsulePos, capsuleDir, point1, pointDir, _nearestResult);
291
- const t1 = Math.max(0, Math.min(1, nearest.tP));
292
- const r = colRW.radius * lerp(1.0, colR.radiusTailScale, t1);
293
- if (nearest.sqrDistance > r * r) {
294
- return writeLineCollisionResult(out, false, point1, capsulePos, r, !out);
295
- }
296
- const t2 = Math.max(0, Math.min(1, nearest.tQ));
297
- const ptOnCol = Vector3.scale(capsuleDir, t1, _collisionCapsulePtOnCol);
298
- Vector3.add(capsulePos, ptOnCol, ptOnCol);
299
- const ptOnLine = Vector3.scale(pointDir, t2, _collisionCapsulePtOnLine);
300
- Vector3.add(point1, ptOnLine, ptOnLine);
301
- const diff = Vector3.sub(ptOnCol, ptOnLine, _collisionCapsuleDiff);
302
- const hit = diff.magnitudeSq <= r * r;
303
- return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);
304
- }
305
- function collisionDetection(colR, colRW, point1, point2, out) {
306
- if (colR.height <= EPSILON) {
307
- return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);
308
- }
309
- return collisionDetectionCapsule(colR, colRW, point1, point2, out);
310
- }
311
- function pushInCollisionDetection(colR, colRW, point1, point2, out) {
312
- if (colR.height <= EPSILON) {
313
- return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);
314
- }
315
- const res = collisionDetectionCapsule(colR, colRW, point1, point2, out);
316
- res.hit = false;
317
- return res;
318
- }
319
- // Nearest points between two line segments
320
- function computeNearestPoints(posP, dirP, posQ, dirQ, out) {
321
- const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);
322
- const n1 = Vector3.cross(dirP, cross0, _nearestN1);
323
- const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);
324
- const n2 = Vector3.cross(dirQ, cross1, _nearestN2);
325
- const dP_n2 = Vector3.dot(dirP, n2);
326
- const dQ_n1 = Vector3.dot(dirQ, n1);
327
- const posDiff = Vector3.sub(posQ, posP, _nearestPosDiff);
328
- const tP = dP_n2 !== 0 ? Vector3.dot(posDiff, n2) / dP_n2 : 0;
329
- const tQ = dQ_n1 !== 0 ? Vector3.dot(Vector3.scale(posDiff, -1, posDiff), n1) / dQ_n1 : 0;
330
- const pointOnP = Vector3.scale(dirP, tP, _nearestPointOnP);
331
- Vector3.add(posP, pointOnP, pointOnP);
332
- const pointOnQ = Vector3.scale(dirQ, tQ, _nearestPointOnQ);
333
- Vector3.add(posQ, pointOnQ, pointOnQ);
334
- const diff = Vector3.sub(pointOnQ, pointOnP, _nearestPointDiff);
335
- return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);
336
- }
337
- // Surface collision (triangle-based)
338
- function checkSurfaceCollision(ptA, ptB, ptC, colliderPos, colR, colRW, out) {
339
- _surfaceNoHit.hit = false;
340
- _surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);
341
- _surfaceNoHit.pushOut.setXYZ(0, 0, 0);
342
- _surfaceNoHit.pointOnCollider.set(colliderPos);
343
- _surfaceNoHit.radius = colRW.radius;
344
- let pointOnCollider = colliderPos;
345
- let radius = colRW.radius;
346
- const isCapsule = colR.height > EPSILON;
347
- const triCenter = centerOfTriangle(ptA, ptB, ptC, _surfaceTriCenter);
348
- const edgeAB = Vector3.sub(ptB, ptA, _surfaceEdgeAB);
349
- const edgeAC = Vector3.sub(ptC, ptA, _surfaceEdgeAC);
350
- const planeNormal = Vector3.cross(edgeAB, edgeAC, _surfacePlaneNormal);
351
- Vector3.normalize(planeNormal, planeNormal);
352
- Vector3.scale(planeNormal, -1, planeNormal);
353
- const planeNormalNeg = Vector3.scale(planeNormal, -1, _surfacePlaneNormalNeg);
354
- const planeDist = -Vector3.dot(planeNormalNeg, ptA);
355
- const colliderDir = Vector3.sub(colliderPos, triCenter, _surfaceColliderDir);
356
- Vector3.normalize(colliderDir, colliderDir);
357
- const dot = Vector3.dot(colliderDir, planeNormal);
358
- if (isCapsule) {
359
- const side = Vector3.dot(colRW.directionCurrent, planeNormal) * dot;
360
- const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);
361
- const tempPOC = pointOnCollider;
362
- if (side < 0) {
363
- radius = colRW.radius * colR.radiusTailScale;
364
- pointOnCollider = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceTail);
365
- }
366
- const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);
367
- const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);
368
- if (enter !== null) {
369
- const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);
370
- Vector3.add(pointOnCollider, ip, ip);
371
- if (triangleContainsPoint(ptA, ptB, ptC, ip)) {
372
- const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);
373
- const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);
374
- if (toCol.magnitudeSq <= radius * radius) {
375
- return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);
376
- }
377
- }
378
- } else if (colR.forceType !== ColliderForce.Off) {
379
- pointOnCollider = tempPOC;
380
- let endVec = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceEndVec);
381
- _surfaceColDirVec.set(colRW.directionCurrent);
382
- let colDirVec = _surfaceColDirVec;
383
- if (colR.forceType === ColliderForce.Pull) {
384
- const tmp = pointOnCollider;
385
- pointOnCollider = endVec;
386
- endVec = tmp;
387
- colDirVec = Vector3.scale(colDirVec, -1, colDirVec);
388
- }
389
- const enter2 = raycast(planeNormalNeg, planeDist, pointOnCollider, colDirVec);
390
- if (enter2 !== null) {
391
- const ip = Vector3.scale(colDirVec, enter2, _surfaceIntersection);
392
- Vector3.add(pointOnCollider, ip, ip);
393
- if (triangleContainsPoint(ptA, ptB, ptC, ip)) {
394
- const intersecToEnd = Vector3.sub(endVec, ip, _surfaceIntersecToEnd);
395
- const colToEnd = Vector3.sub(endVec, pointOnCollider, _surfaceColToEnd);
396
- const colToIntersect = Vector3.sub(ip, pointOnCollider, _surfaceColToIntersect);
397
- const pDot = Vector3.dot(intersecToEnd, colToIntersect);
398
- const lDot = Vector3.dot(colToEnd, colToEnd);
399
- if (!(pDot >= 0 && pDot <= lDot)) {
400
- return writeSurfaceCheckResult(out, _surfaceNoHit.hit, _surfaceNoHit.intersectionPoint, _surfaceNoHit.pushOut, _surfaceNoHit.pointOnCollider, _surfaceNoHit.radius, !out);
401
- }
402
- const dotVal = Vector3.dot(colToEnd, colToIntersect);
403
- const s2eMag = Vector3.dot(colToEnd, colToEnd);
404
- const colToEndN = Vector3.normalize(colToEnd, colToEnd);
405
- const eVec = Vector3.scale(colToEndN, -radius, _surfaceEVec);
406
- Vector3.add(pointOnCollider, eVec, eVec);
407
- const pushOut = Vector3.sub(ip, eVec, _surfacePushOut);
408
- const poc2 = Vector3.scale(colToEnd, dotVal / s2eMag, _surfacePoc2);
409
- Vector3.add(pointOnCollider, poc2, poc2);
410
- const toCol = Vector3.sub(poc2, ip, _surfaceToCol);
411
- if (toCol.magnitudeSq <= radius * radius) {
412
- return writeSurfaceCheckResult(out, true, ip, pushOut, poc2, radius, !out);
413
- }
414
- }
415
- }
416
- }
417
- } else {
418
- const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);
419
- const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);
420
- const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);
421
- if (enter !== null) {
422
- const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);
423
- Vector3.add(pointOnCollider, ip, ip);
424
- if (triangleContainsPoint(ptA, ptB, ptC, ip)) {
425
- const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);
426
- const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);
427
- if (toCol.magnitudeSq <= radius * radius) {
428
- return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);
429
- }
430
- }
431
- }
432
- }
433
- return writeSurfaceCheckResult(out, _surfaceNoHit.hit, _surfaceNoHit.intersectionPoint, _surfaceNoHit.pushOut, _surfaceNoHit.pointOnCollider, _surfaceNoHit.radius, !out);
434
- }
435
- // Helpers
436
- function raycast(normal, planeDist, origin, direction) {
437
- const vdot = Vector3.dot(direction, normal);
438
- const ndot = -Vector3.dot(origin, normal) - planeDist;
439
- if (Math.abs(vdot) <= EPSILON) {
440
- return null;
441
- }
442
- const enter = ndot / vdot;
443
- return enter > 0 ? enter : null;
444
- }
445
- function centerOfTriangle(a, b, c, result) {
446
- result = result || new Vector3();
447
- return result.setXYZ((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3, (a.z + b.z + c.z) / 3);
448
- }
449
- function triangleContainsPoint(a, b, c, p) {
450
- const ap = Vector3.sub(a, p, _triangleAp);
451
- const bp = Vector3.sub(b, p, _triangleBp);
452
- const cp = Vector3.sub(c, p, _triangleCp);
453
- const u = Vector3.cross(ap, bp, _triangleU);
454
- const vv = Vector3.cross(bp, cp, _triangleV);
455
- const w = Vector3.cross(cp, ap, _triangleW);
456
- if (Vector3.dot(u, vv) < 0) {
457
- return false;
458
- }
459
- if (Vector3.dot(vv, w) < 0) {
460
- return false;
461
- }
462
- return true;
463
- }
464
- function lerp(a, b, t) {
465
- return a + (b - a) * t;
466
- }
467
-
468
- export { checkSurfaceCollision, collisionDetection, collisionDetectionCapsule, collisionDetectionSphere, computeNearestPoints, pushInCollisionDetection, pushInFromCapsule, pushInFromCollider, pushInFromSphere, pushoutFromCapsule, pushoutFromCollider, pushoutFromSphere };
469
- //# sourceMappingURL=collision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"collision.js","sources":["../../../src/animation/spring2/collision.ts"],"sourcesContent":["// Collision detection & response - direct port of SPCRJointDynamicsJob.cs Collision class\r\n\r\nimport { Vector3 } from '@zephyr3d/base';\r\nimport type { ColliderR, ColliderRW, PointR } from './types';\r\nimport { EPSILON, ColliderForce } from './types';\r\n\r\nexport interface CollisionResult {\r\n hit: boolean;\r\n point: Vector3;\r\n}\r\n\r\nexport interface LineCollisionResult {\r\n hit: boolean;\r\n pointOnLine: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\nexport interface SurfaceCheckResult {\r\n hit: boolean;\r\n intersectionPoint: Vector3;\r\n pushOut: Vector3;\r\n pointOnCollider: Vector3;\r\n radius: number;\r\n}\r\n\r\nexport interface NearestPointsResult {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n}\r\n\r\nconst _pushoutSphereDirection = new Vector3();\r\nconst _pushoutSphereScaled = new Vector3();\r\nconst _pushoutCapsuleVecN = new Vector3();\r\nconst _pushoutCapsuleTargetVec = new Vector3();\r\nconst _pushoutCapsuleTail = new Vector3();\r\nconst _pushoutCapsulePosOnVec = new Vector3();\r\nconst _pushoutCapsulePushVec = new Vector3();\r\nconst _pushoutCapsuleScaled = new Vector3();\r\nconst _pushInSphereDirection = new Vector3();\r\nconst _pushInSphereDirectionN = new Vector3();\r\nconst _pushInSphereScaled = new Vector3();\r\nconst _pushInCapsuleVecN = new Vector3();\r\nconst _pushInCapsuleTargetVec = new Vector3();\r\nconst _pushInCapsuleTail = new Vector3();\r\nconst _pushInCapsulePosOnVec = new Vector3();\r\nconst _pushInCapsulePullVec = new Vector3();\r\nconst _pushInCapsulePullVecN = new Vector3();\r\nconst _pushInCapsuleScaled = new Vector3();\r\nconst _collisionSphereDir = new Vector3();\r\nconst _collisionSphereDirN = new Vector3();\r\nconst _collisionSphereToCenter = new Vector3();\r\nconst _collisionSphereScaled = new Vector3();\r\nconst _collisionSphereDiff = new Vector3();\r\nconst _collisionCapsuleTail = new Vector3();\r\nconst _collisionCapsulePointDir = new Vector3();\r\nconst _collisionCapsulePtOnCol = new Vector3();\r\nconst _collisionCapsulePtOnLine = new Vector3();\r\nconst _collisionCapsuleDiff = new Vector3();\r\nconst _collisionCapsuleTempLineResult: LineCollisionResult = {\r\n hit: false,\r\n pointOnLine: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _nearestCross0 = new Vector3();\r\nconst _nearestCross1 = new Vector3();\r\nconst _nearestN1 = new Vector3();\r\nconst _nearestN2 = new Vector3();\r\nconst _nearestPosDiff = new Vector3();\r\nconst _nearestPointOnP = new Vector3();\r\nconst _nearestPointOnQ = new Vector3();\r\nconst _nearestPointDiff = new Vector3();\r\nconst _nearestResult: NearestPointsResult = {\r\n tP: 0,\r\n tQ: 0,\r\n pointOnP: new Vector3(),\r\n pointOnQ: new Vector3(),\r\n sqrDistance: 0\r\n};\r\nconst _surfaceNoHit: SurfaceCheckResult = {\r\n hit: false,\r\n intersectionPoint: new Vector3(),\r\n pushOut: new Vector3(),\r\n pointOnCollider: new Vector3(),\r\n radius: 0\r\n};\r\nconst _surfaceTriCenter = new Vector3();\r\nconst _surfaceEdgeAB = new Vector3();\r\nconst _surfaceEdgeAC = new Vector3();\r\nconst _surfacePlaneNormal = new Vector3();\r\nconst _surfacePlaneNormalNeg = new Vector3();\r\nconst _surfaceColliderDir = new Vector3();\r\nconst _surfaceRayDir = new Vector3();\r\nconst _surfaceRayDirN = new Vector3();\r\nconst _surfaceTail = new Vector3();\r\nconst _surfaceIntersection = new Vector3();\r\nconst _surfacePushOut = new Vector3();\r\nconst _surfaceToCol = new Vector3();\r\nconst _surfaceEndVec = new Vector3();\r\nconst _surfaceColDirVec = new Vector3();\r\nconst _surfaceIntersecToEnd = new Vector3();\r\nconst _surfaceColToEnd = new Vector3();\r\nconst _surfaceColToIntersect = new Vector3();\r\nconst _surfaceEVec = new Vector3();\r\nconst _surfacePoc2 = new Vector3();\r\nconst _triangleAp = new Vector3();\r\nconst _triangleBp = new Vector3();\r\nconst _triangleCp = new Vector3();\r\nconst _triangleU = new Vector3();\r\nconst _triangleV = new Vector3();\r\nconst _triangleW = new Vector3();\r\n\r\nfunction writeCollisionResult(\r\n out: CollisionResult | undefined,\r\n hit: boolean,\r\n point: Vector3,\r\n copyPoint: boolean\r\n) {\r\n if (!out) {\r\n return { hit, point: copyPoint ? point.clone() : point };\r\n }\r\n if (!out.point) {\r\n out.point = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.point.set(point);\r\n return out;\r\n}\r\n\r\nfunction writeLineCollisionResult(\r\n out: LineCollisionResult | undefined,\r\n hit: boolean,\r\n pointOnLine: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n pointOnLine: copyVectors ? pointOnLine.clone() : pointOnLine,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.pointOnLine) {\r\n out.pointOnLine = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.pointOnLine.set(pointOnLine);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeSurfaceCheckResult(\r\n out: SurfaceCheckResult | undefined,\r\n hit: boolean,\r\n intersectionPoint: Vector3,\r\n pushOut: Vector3,\r\n pointOnCollider: Vector3,\r\n radius: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n hit,\r\n intersectionPoint: copyVectors ? intersectionPoint.clone() : intersectionPoint,\r\n pushOut: copyVectors ? pushOut.clone() : pushOut,\r\n pointOnCollider: copyVectors ? pointOnCollider.clone() : pointOnCollider,\r\n radius\r\n };\r\n }\r\n if (!out.intersectionPoint) {\r\n out.intersectionPoint = new Vector3();\r\n }\r\n if (!out.pushOut) {\r\n out.pushOut = new Vector3();\r\n }\r\n if (!out.pointOnCollider) {\r\n out.pointOnCollider = new Vector3();\r\n }\r\n out.hit = hit;\r\n out.intersectionPoint.set(intersectionPoint);\r\n out.pushOut.set(pushOut);\r\n out.pointOnCollider.set(pointOnCollider);\r\n out.radius = radius;\r\n return out;\r\n}\r\n\r\nfunction writeNearestPointsResult(\r\n out: NearestPointsResult | undefined,\r\n tP: number,\r\n tQ: number,\r\n pointOnP: Vector3,\r\n pointOnQ: Vector3,\r\n sqrDistance: number,\r\n copyVectors: boolean\r\n) {\r\n if (!out) {\r\n return {\r\n tP,\r\n tQ,\r\n pointOnP: copyVectors ? pointOnP.clone() : pointOnP,\r\n pointOnQ: copyVectors ? pointOnQ.clone() : pointOnQ,\r\n sqrDistance\r\n };\r\n }\r\n out.tP = tP;\r\n out.tQ = tQ;\r\n out.pointOnP.set(pointOnP);\r\n out.pointOnQ.set(pointOnQ);\r\n out.sqrDistance = sqrDistance;\r\n return out;\r\n}\r\n\r\n// Pushout (keep point outside collider)\r\n\r\nexport function pushoutFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n pointRadius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(point, center, _pushoutSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON) {\r\n const dirLen = Math.sqrt(sqrLen) - pointRadius;\r\n if (dirLen < radius) {\r\n const scaled = Vector3.scale(direction, radius / dirLen, _pushoutSphereScaled);\r\n Vector3.add(center, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\nexport function pushoutFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushoutFromSphere(colRW.positionCurrent, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n return pushoutFromCapsule(colR, colRW, point, ptR, out);\r\n}\r\n\r\nexport function pushoutFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n ptR: PointR,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushoutCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushoutCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushoutFromSphere(capsulePos, colRW.radius, ptR.pointRadius, point, out);\r\n }\r\n if (distOnVec >= colR.height) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushoutCapsuleTail);\r\n return pushoutFromSphere(tail, colRW.radius * colR.radiusTailScale, ptR.pointRadius, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushoutCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pushVec = Vector3.sub(point, posOnVec, _pushoutCapsulePushVec);\r\n const sqrPushDist = pushVec.magnitudeSq;\r\n if (sqrPushDist > EPSILON) {\r\n const pushDist = Math.sqrt(sqrPushDist) - ptR.pointRadius;\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, distOnVec / colR.height);\r\n if (pushDist < r) {\r\n const scaled = Vector3.scale(pushVec, r / pushDist, _pushoutCapsuleScaled);\r\n Vector3.add(posOnVec, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n// PushIn (keep point inside collider - inverse mode)\r\n\r\nexport function pushInFromSphere(\r\n center: Vector3,\r\n radius: number,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const direction = Vector3.sub(center, point, _pushInSphereDirection);\r\n const sqrLen = direction.magnitudeSq;\r\n if (sqrLen > EPSILON && sqrLen > radius * radius) {\r\n const dirLen = Math.sqrt(sqrLen);\r\n const directionN = Vector3.normalize(direction, _pushInSphereDirectionN);\r\n const scaled = Vector3.scale(directionN, dirLen - radius, _pushInSphereScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\nexport function pushInFromCollider(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return pushInFromSphere(colRW.positionCurrent, colRW.radius, point, out);\r\n }\r\n return pushInFromCapsule(colR, colRW, point, out);\r\n}\r\n\r\nexport function pushInFromCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point: Vector3,\r\n out?: CollisionResult\r\n): CollisionResult {\r\n const capsuleVec = colRW.directionCurrent;\r\n const capsuleVecN = Vector3.normalize(capsuleVec, _pushInCapsuleVecN);\r\n const capsulePos = colRW.positionCurrent;\r\n const targetVec = Vector3.sub(point, capsulePos, _pushInCapsuleTargetVec);\r\n const distOnVec = Vector3.dot(capsuleVecN, targetVec);\r\n\r\n if (distOnVec <= EPSILON) {\r\n return pushInFromSphere(capsulePos, colRW.radius, point, out);\r\n }\r\n if (distOnVec >= colR.height) {\r\n const tail = Vector3.add(capsulePos, capsuleVec, _pushInCapsuleTail);\r\n return pushInFromSphere(tail, colRW.radius * colR.radiusTailScale, point, out);\r\n }\r\n\r\n const posOnVec = Vector3.scale(capsuleVecN, distOnVec, _pushInCapsulePosOnVec);\r\n Vector3.add(capsulePos, posOnVec, posOnVec);\r\n const pullVec = Vector3.sub(posOnVec, point, _pushInCapsulePullVec);\r\n const sqrPullDist = pullVec.magnitudeSq;\r\n if (sqrPullDist > EPSILON) {\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, colR.height / distOnVec);\r\n if (sqrPullDist > r * r) {\r\n const pullDist = Math.sqrt(sqrPullDist);\r\n const pullVecN = Vector3.normalize(pullVec, _pushInCapsulePullVecN);\r\n const scaled = Vector3.scale(pullVecN, pullDist - r, _pushInCapsuleScaled);\r\n Vector3.add(point, scaled, scaled);\r\n return writeCollisionResult(out, true, scaled, !out);\r\n }\r\n }\r\n return writeCollisionResult(out, false, point, !out);\r\n}\r\n\r\n// Line segment vs collider detection\r\n\r\nexport function collisionDetectionSphere(\r\n center: Vector3,\r\n radius: number,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const dir = Vector3.sub(point2, point1, _collisionSphereDir);\r\n const dirLen = dir.magnitude;\r\n if (dirLen < EPSILON) {\r\n return writeLineCollisionResult(out, false, point1, center, radius, !out);\r\n }\r\n const dirN = Vector3.scale(dir, 1 / dirLen, _collisionSphereDirN);\r\n const toCenter = Vector3.sub(center, point1, _collisionSphereToCenter);\r\n const dot = Vector3.dot(dirN, toCenter);\r\n const clamped = Math.max(0, Math.min(dot, dirLen));\r\n const ptOnLine = Vector3.scale(dirN, clamped, _collisionSphereScaled);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(center, ptOnLine, _collisionSphereDiff);\r\n const hit = diff.magnitudeSq <= radius * radius;\r\n return writeLineCollisionResult(out, hit, ptOnLine, center, radius, !out);\r\n}\r\n\r\nexport function collisionDetectionCapsule(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n const capsuleDir = colRW.directionCurrent;\r\n const capsulePos = colRW.positionCurrent;\r\n\r\n let res = collisionDetectionSphere(capsulePos, colRW.radius, point1, point2, out);\r\n if (res.hit) {\r\n return res;\r\n }\r\n\r\n const tail = Vector3.add(capsulePos, capsuleDir, _collisionCapsuleTail);\r\n res = collisionDetectionSphere(\r\n tail,\r\n colRW.radius * colR.radiusTailScale,\r\n point1,\r\n point2,\r\n _collisionCapsuleTempLineResult\r\n );\r\n if (res.hit) {\r\n return writeLineCollisionResult(out, true, res.pointOnLine, res.pointOnCollider, res.radius, !out);\r\n }\r\n\r\n const pointDir = Vector3.sub(point2, point1, _collisionCapsulePointDir);\r\n const nearest = computeNearestPoints(capsulePos, capsuleDir, point1, pointDir, _nearestResult);\r\n const t1 = Math.max(0, Math.min(1, nearest.tP));\r\n const r = colRW.radius * lerp(1.0, colR.radiusTailScale, t1);\r\n\r\n if (nearest.sqrDistance > r * r) {\r\n return writeLineCollisionResult(out, false, point1, capsulePos, r, !out);\r\n }\r\n\r\n const t2 = Math.max(0, Math.min(1, nearest.tQ));\r\n const ptOnCol = Vector3.scale(capsuleDir, t1, _collisionCapsulePtOnCol);\r\n Vector3.add(capsulePos, ptOnCol, ptOnCol);\r\n const ptOnLine = Vector3.scale(pointDir, t2, _collisionCapsulePtOnLine);\r\n Vector3.add(point1, ptOnLine, ptOnLine);\r\n const diff = Vector3.sub(ptOnCol, ptOnLine, _collisionCapsuleDiff);\r\n const hit = diff.magnitudeSq <= r * r;\r\n return writeLineCollisionResult(out, hit, ptOnLine, ptOnCol, r, !out);\r\n}\r\n\r\nexport function collisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n return collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n}\r\n\r\nexport function pushInCollisionDetection(\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n point1: Vector3,\r\n point2: Vector3,\r\n out?: LineCollisionResult\r\n): LineCollisionResult {\r\n if (colR.height <= EPSILON) {\r\n return collisionDetectionSphere(colRW.positionCurrent, colRW.radius, point1, point2, out);\r\n }\r\n const res = collisionDetectionCapsule(colR, colRW, point1, point2, out);\r\n res.hit = false;\r\n return res;\r\n}\r\n\r\n// Nearest points between two line segments\r\n\r\nexport function computeNearestPoints(\r\n posP: Vector3,\r\n dirP: Vector3,\r\n posQ: Vector3,\r\n dirQ: Vector3,\r\n out?: NearestPointsResult\r\n): {\r\n tP: number;\r\n tQ: number;\r\n pointOnP: Vector3;\r\n pointOnQ: Vector3;\r\n sqrDistance: number;\r\n} {\r\n const cross0 = Vector3.cross(dirQ, dirP, _nearestCross0);\r\n const n1 = Vector3.cross(dirP, cross0, _nearestN1);\r\n const cross1 = Vector3.cross(dirP, dirQ, _nearestCross1);\r\n const n2 = Vector3.cross(dirQ, cross1, _nearestN2);\r\n const dP_n2 = Vector3.dot(dirP, n2);\r\n const dQ_n1 = Vector3.dot(dirQ, n1);\r\n const posDiff = Vector3.sub(posQ, posP, _nearestPosDiff);\r\n const tP = dP_n2 !== 0 ? Vector3.dot(posDiff, n2) / dP_n2 : 0;\r\n const tQ = dQ_n1 !== 0 ? Vector3.dot(Vector3.scale(posDiff, -1, posDiff), n1) / dQ_n1 : 0;\r\n const pointOnP = Vector3.scale(dirP, tP, _nearestPointOnP);\r\n Vector3.add(posP, pointOnP, pointOnP);\r\n const pointOnQ = Vector3.scale(dirQ, tQ, _nearestPointOnQ);\r\n Vector3.add(posQ, pointOnQ, pointOnQ);\r\n const diff = Vector3.sub(pointOnQ, pointOnP, _nearestPointDiff);\r\n return writeNearestPointsResult(out, tP, tQ, pointOnP, pointOnQ, diff.magnitudeSq, !out);\r\n}\r\n\r\n// Surface collision (triangle-based)\r\n\r\nexport function checkSurfaceCollision(\r\n ptA: Vector3,\r\n ptB: Vector3,\r\n ptC: Vector3,\r\n colliderPos: Vector3,\r\n colR: ColliderR,\r\n colRW: ColliderRW,\r\n out?: SurfaceCheckResult\r\n): SurfaceCheckResult {\r\n _surfaceNoHit.hit = false;\r\n _surfaceNoHit.intersectionPoint.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pushOut.setXYZ(0, 0, 0);\r\n _surfaceNoHit.pointOnCollider.set(colliderPos);\r\n _surfaceNoHit.radius = colRW.radius;\r\n\r\n let pointOnCollider = colliderPos;\r\n let radius = colRW.radius;\r\n const isCapsule = colR.height > EPSILON;\r\n\r\n const triCenter = centerOfTriangle(ptA, ptB, ptC, _surfaceTriCenter);\r\n const edgeAB = Vector3.sub(ptB, ptA, _surfaceEdgeAB);\r\n const edgeAC = Vector3.sub(ptC, ptA, _surfaceEdgeAC);\r\n const planeNormal = Vector3.cross(edgeAB, edgeAC, _surfacePlaneNormal);\r\n Vector3.normalize(planeNormal, planeNormal);\r\n Vector3.scale(planeNormal, -1, planeNormal);\r\n const planeNormalNeg = Vector3.scale(planeNormal, -1, _surfacePlaneNormalNeg);\r\n const planeDist = -Vector3.dot(planeNormalNeg, ptA);\r\n const colliderDir = Vector3.sub(colliderPos, triCenter, _surfaceColliderDir);\r\n Vector3.normalize(colliderDir, colliderDir);\r\n const dot = Vector3.dot(colliderDir, planeNormal);\r\n\r\n if (isCapsule) {\r\n const side = Vector3.dot(colRW.directionCurrent, planeNormal) * dot;\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const tempPOC = pointOnCollider;\r\n\r\n if (side < 0) {\r\n radius = colRW.radius * colR.radiusTailScale;\r\n pointOnCollider = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceTail);\r\n }\r\n\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n } else if (colR.forceType !== ColliderForce.Off) {\r\n pointOnCollider = tempPOC;\r\n let endVec = Vector3.add(colliderPos, colRW.directionCurrent, _surfaceEndVec);\r\n _surfaceColDirVec.set(colRW.directionCurrent);\r\n let colDirVec = _surfaceColDirVec;\r\n if (colR.forceType === ColliderForce.Pull) {\r\n const tmp = pointOnCollider;\r\n pointOnCollider = endVec;\r\n endVec = tmp;\r\n colDirVec = Vector3.scale(colDirVec, -1, colDirVec);\r\n }\r\n const enter2 = raycast(planeNormalNeg, planeDist, pointOnCollider, colDirVec);\r\n if (enter2 !== null) {\r\n const ip = Vector3.scale(colDirVec, enter2, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const intersecToEnd = Vector3.sub(endVec, ip, _surfaceIntersecToEnd);\r\n const colToEnd = Vector3.sub(endVec, pointOnCollider, _surfaceColToEnd);\r\n const colToIntersect = Vector3.sub(ip, pointOnCollider, _surfaceColToIntersect);\r\n const pDot = Vector3.dot(intersecToEnd, colToIntersect);\r\n const lDot = Vector3.dot(colToEnd, colToEnd);\r\n if (!(pDot >= 0 && pDot <= lDot)) {\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n }\r\n const dotVal = Vector3.dot(colToEnd, colToIntersect);\r\n const s2eMag = Vector3.dot(colToEnd, colToEnd);\r\n const colToEndN = Vector3.normalize(colToEnd, colToEnd);\r\n const eVec = Vector3.scale(colToEndN, -radius, _surfaceEVec);\r\n Vector3.add(pointOnCollider, eVec, eVec);\r\n const pushOut = Vector3.sub(ip, eVec, _surfacePushOut);\r\n const poc2 = Vector3.scale(colToEnd, dotVal / s2eMag, _surfacePoc2);\r\n Vector3.add(pointOnCollider, poc2, poc2);\r\n const toCol = Vector3.sub(poc2, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, poc2, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n const rayDir = Vector3.scale(planeNormal, dot * -1, _surfaceRayDir);\r\n const rayDirN = Vector3.normalize(rayDir, _surfaceRayDirN);\r\n const enter = raycast(planeNormalNeg, planeDist, pointOnCollider, rayDirN);\r\n if (enter !== null) {\r\n const ip = Vector3.scale(rayDirN, enter, _surfaceIntersection);\r\n Vector3.add(pointOnCollider, ip, ip);\r\n if (triangleContainsPoint(ptA, ptB, ptC, ip)) {\r\n const pushOut = Vector3.sub(ip, pointOnCollider, _surfacePushOut);\r\n const toCol = Vector3.sub(pointOnCollider, ip, _surfaceToCol);\r\n if (toCol.magnitudeSq <= radius * radius) {\r\n return writeSurfaceCheckResult(out, true, ip, pushOut, pointOnCollider, radius, !out);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return writeSurfaceCheckResult(\r\n out,\r\n _surfaceNoHit.hit,\r\n _surfaceNoHit.intersectionPoint,\r\n _surfaceNoHit.pushOut,\r\n _surfaceNoHit.pointOnCollider,\r\n _surfaceNoHit.radius,\r\n !out\r\n );\r\n}\r\n\r\n// Helpers\r\n\r\nfunction raycast(normal: Vector3, planeDist: number, origin: Vector3, direction: Vector3): number | null {\r\n const vdot = Vector3.dot(direction, normal);\r\n const ndot = -Vector3.dot(origin, normal) - planeDist;\r\n if (Math.abs(vdot) <= EPSILON) {\r\n return null;\r\n }\r\n const enter = ndot / vdot;\r\n return enter > 0 ? enter : null;\r\n}\r\n\r\nfunction centerOfTriangle(a: Vector3, b: Vector3, c: Vector3, result?: Vector3): Vector3 {\r\n result = result || new Vector3();\r\n return result.setXYZ((a.x + b.x + c.x) / 3, (a.y + b.y + c.y) / 3, (a.z + b.z + c.z) / 3);\r\n}\r\n\r\nfunction triangleContainsPoint(a: Vector3, b: Vector3, c: Vector3, p: Vector3): boolean {\r\n const ap = Vector3.sub(a, p, _triangleAp);\r\n const bp = Vector3.sub(b, p, _triangleBp);\r\n const cp = Vector3.sub(c, p, _triangleCp);\r\n const u = Vector3.cross(ap, bp, _triangleU);\r\n const vv = Vector3.cross(bp, cp, _triangleV);\r\n const w = Vector3.cross(cp, ap, _triangleW);\r\n if (Vector3.dot(u, vv) < 0) {\r\n return false;\r\n }\r\n if (Vector3.dot(vv, w) < 0) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction lerp(a: number, b: number, t: number): number {\r\n return a + (b - a) * t;\r\n}\r\n"],"names":["_pushoutSphereDirection","Vector3","_pushoutSphereScaled","_pushoutCapsuleVecN","_pushoutCapsuleTargetVec","_pushoutCapsuleTail","_pushoutCapsulePosOnVec","_pushoutCapsulePushVec","_pushoutCapsuleScaled","_pushInSphereDirection","_pushInSphereDirectionN","_pushInSphereScaled","_pushInCapsuleVecN","_pushInCapsuleTargetVec","_pushInCapsuleTail","_pushInCapsulePosOnVec","_pushInCapsulePullVec","_pushInCapsulePullVecN","_pushInCapsuleScaled","_collisionSphereDir","_collisionSphereDirN","_collisionSphereToCenter","_collisionSphereScaled","_collisionSphereDiff","_collisionCapsuleTail","_collisionCapsulePointDir","_collisionCapsulePtOnCol","_collisionCapsulePtOnLine","_collisionCapsuleDiff","_collisionCapsuleTempLineResult","hit","pointOnLine","pointOnCollider","radius","_nearestCross0","_nearestCross1","_nearestN1","_nearestN2","_nearestPosDiff","_nearestPointOnP","_nearestPointOnQ","_nearestPointDiff","_nearestResult","tP","tQ","pointOnP","pointOnQ","sqrDistance","_surfaceNoHit","intersectionPoint","pushOut","_surfaceTriCenter","_surfaceEdgeAB","_surfaceEdgeAC","_surfacePlaneNormal","_surfacePlaneNormalNeg","_surfaceColliderDir","_surfaceRayDir","_surfaceRayDirN","_surfaceTail","_surfaceIntersection","_surfacePushOut","_surfaceToCol","_surfaceEndVec","_surfaceColDirVec","_surfaceIntersecToEnd","_surfaceColToEnd","_surfaceColToIntersect","_surfaceEVec","_surfacePoc2","_triangleAp","_triangleBp","_triangleCp","_triangleU","_triangleV","_triangleW","writeCollisionResult","out","point","copyPoint","clone","set","writeLineCollisionResult","copyVectors","writeSurfaceCheckResult","writeNearestPointsResult","pushoutFromSphere","center","pointRadius","direction","sub","sqrLen","magnitudeSq","EPSILON","dirLen","Math","sqrt","scaled","scale","add","pushoutFromCollider","colR","colRW","ptR","height","positionCurrent","pushoutFromCapsule","capsuleVec","directionCurrent","capsuleVecN","normalize","capsulePos","targetVec","distOnVec","dot","tail","radiusTailScale","posOnVec","pushVec","sqrPushDist","pushDist","r","lerp","pushInFromSphere","directionN","pushInFromCollider","pushInFromCapsule","pullVec","sqrPullDist","pullDist","pullVecN","collisionDetectionSphere","point1","point2","dir","magnitude","dirN","toCenter","clamped","max","min","ptOnLine","diff","collisionDetectionCapsule","capsuleDir","res","pointDir","nearest","computeNearestPoints","t1","t2","ptOnCol","collisionDetection","pushInCollisionDetection","posP","dirP","posQ","dirQ","cross0","cross","n1","cross1","n2","dP_n2","dQ_n1","posDiff","checkSurfaceCollision","ptA","ptB","ptC","colliderPos","setXYZ","isCapsule","triCenter","centerOfTriangle","edgeAB","edgeAC","planeNormal","planeNormalNeg","planeDist","colliderDir","side","rayDir","tempPOC","rayDirN","enter","raycast","ip","triangleContainsPoint","toCol","forceType","ColliderForce","Off","endVec","colDirVec","Pull","tmp","enter2","intersecToEnd","colToEnd","colToIntersect","pDot","lDot","dotVal","s2eMag","colToEndN","eVec","poc2","normal","origin","vdot","ndot","abs","a","b","c","result","x","y","z","p","ap","bp","cp","u","vv","w","t"],"mappings":"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"}