@hology/core 0.0.91 → 0.0.93

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 (419) hide show
  1. package/dist/config/project-config.d.ts +1 -0
  2. package/dist/config/project-config.d.ts.map +1 -0
  3. package/dist/config/project-config.js +1 -2
  4. package/dist/controllers/base-game-controller.d.ts +1 -0
  5. package/dist/controllers/base-game-controller.d.ts.map +1 -0
  6. package/dist/controllers/base-game-controller.js +1 -2
  7. package/dist/csm.d.ts +1 -0
  8. package/dist/csm.d.ts.map +1 -0
  9. package/dist/csm.js +1 -2
  10. package/dist/effects/particles/examples.d.ts +1 -0
  11. package/dist/effects/particles/examples.d.ts.map +1 -0
  12. package/dist/effects/particles/examples.js +1 -2
  13. package/dist/effects/particles/particle-system-config.d.ts +1 -0
  14. package/dist/effects/particles/particle-system-config.d.ts.map +1 -0
  15. package/dist/effects/particles/particle-system-config.js +1 -2
  16. package/dist/effects/vfx/behaviours.d.ts +3 -1
  17. package/dist/effects/vfx/behaviours.d.ts.map +1 -0
  18. package/dist/effects/vfx/behaviours.js +1 -2
  19. package/dist/effects/vfx/index.d.ts +1 -0
  20. package/dist/effects/vfx/index.d.ts.map +1 -0
  21. package/dist/effects/vfx/index.js +1 -2
  22. package/dist/effects/vfx/initializsers.d.ts +20 -39
  23. package/dist/effects/vfx/initializsers.d.ts.map +1 -0
  24. package/dist/effects/vfx/initializsers.js +1 -2
  25. package/dist/effects/vfx/rates.d.ts +5 -4
  26. package/dist/effects/vfx/rates.d.ts.map +1 -0
  27. package/dist/effects/vfx/rates.js +1 -2
  28. package/dist/effects/vfx/stretched-sprite.d.ts +1 -0
  29. package/dist/effects/vfx/stretched-sprite.d.ts.map +1 -0
  30. package/dist/effects/vfx/stretched-sprite.js +1 -2
  31. package/dist/effects/vfx/trail-renderer.d.ts +1 -0
  32. package/dist/effects/vfx/trail-renderer.d.ts.map +1 -0
  33. package/dist/effects/vfx/trail-renderer.js +1 -2
  34. package/dist/effects/vfx/vfx-actor.d.ts +3 -1
  35. package/dist/effects/vfx/vfx-actor.d.ts.map +1 -0
  36. package/dist/effects/vfx/vfx-actor.js +1 -2
  37. package/dist/effects/vfx/vfx-asset.d.ts +14 -0
  38. package/dist/effects/vfx/vfx-asset.d.ts.map +1 -0
  39. package/dist/effects/vfx/vfx-asset.js +1 -2
  40. package/dist/effects/vfx/vfx-collision-behaviour.d.ts +19 -0
  41. package/dist/effects/vfx/vfx-collision-behaviour.d.ts.map +1 -0
  42. package/dist/effects/vfx/vfx-collision-behaviour.js +4 -0
  43. package/dist/effects/vfx/vfx-defs.d.ts +33 -19
  44. package/dist/effects/vfx/vfx-defs.d.ts.map +1 -0
  45. package/dist/effects/vfx/vfx-defs.js +1 -2
  46. package/dist/effects/vfx/vfx-materializer.d.ts +11 -3
  47. package/dist/effects/vfx/vfx-materializer.d.ts.map +1 -0
  48. package/dist/effects/vfx/vfx-materializer.js +1 -2
  49. package/dist/effects/vfx/vfx-old-materializer.d.ts +2 -11
  50. package/dist/effects/vfx/vfx-old-materializer.d.ts.map +1 -0
  51. package/dist/effects/vfx/vfx-old-materializer.js +1 -2
  52. package/dist/effects/vfx/vfx-param.d.ts +1 -0
  53. package/dist/effects/vfx/vfx-param.d.ts.map +1 -0
  54. package/dist/effects/vfx/vfx-param.js +1 -2
  55. package/dist/effects/vfx/vfx-renderers.d.ts +3 -1
  56. package/dist/effects/vfx/vfx-renderers.d.ts.map +1 -0
  57. package/dist/effects/vfx/vfx-renderers.js +1 -2
  58. package/dist/effects/vfx/vfx-service.d.ts +1 -0
  59. package/dist/effects/vfx/vfx-service.d.ts.map +1 -0
  60. package/dist/effects/vfx/vfx-service.js +1 -2
  61. package/dist/effects/vfx/zones.d.ts +2 -1
  62. package/dist/effects/vfx/zones.d.ts.map +1 -0
  63. package/dist/effects/vfx/zones.js +1 -2
  64. package/dist/game-component/component-decorators.d.ts +1 -0
  65. package/dist/game-component/component-decorators.d.ts.map +1 -0
  66. package/dist/game-component/component-decorators.js +1 -2
  67. package/dist/game-component/game-component.d.ts +1 -0
  68. package/dist/game-component/game-component.d.ts.map +1 -0
  69. package/dist/game-component/game-component.js +1 -2
  70. package/dist/gameplay/actors/actor.d.ts +1 -0
  71. package/dist/gameplay/actors/actor.d.ts.map +1 -0
  72. package/dist/gameplay/actors/actor.js +1 -2
  73. package/dist/gameplay/actors/builtin/camera-actor.d.ts +1 -0
  74. package/dist/gameplay/actors/builtin/camera-actor.d.ts.map +1 -0
  75. package/dist/gameplay/actors/builtin/camera-actor.js +1 -2
  76. package/dist/gameplay/actors/builtin/components/character/character-animation.d.ts +1 -0
  77. package/dist/gameplay/actors/builtin/components/character/character-animation.d.ts.map +1 -0
  78. package/dist/gameplay/actors/builtin/components/character/character-animation.js +1 -2
  79. package/dist/gameplay/actors/builtin/components/character/character-movement copy.d.ts +1 -0
  80. package/dist/gameplay/actors/builtin/components/character/character-movement copy.d.ts.map +1 -0
  81. package/dist/gameplay/actors/builtin/components/character/character-movement copy.js +1 -2
  82. package/dist/gameplay/actors/builtin/components/character/character-movement.d.ts +1 -0
  83. package/dist/gameplay/actors/builtin/components/character/character-movement.d.ts.map +1 -0
  84. package/dist/gameplay/actors/builtin/components/character/character-movement.js +1 -2
  85. package/dist/gameplay/actors/builtin/components/character/modes.d.ts +1 -0
  86. package/dist/gameplay/actors/builtin/components/character/modes.d.ts.map +1 -0
  87. package/dist/gameplay/actors/builtin/components/character/modes.js +1 -2
  88. package/dist/gameplay/actors/builtin/components/mesh-component.d.ts +1 -0
  89. package/dist/gameplay/actors/builtin/components/mesh-component.d.ts.map +1 -0
  90. package/dist/gameplay/actors/builtin/components/mesh-component.js +1 -2
  91. package/dist/gameplay/actors/builtin/components/scene-component.d.ts +1 -0
  92. package/dist/gameplay/actors/builtin/components/scene-component.d.ts.map +1 -0
  93. package/dist/gameplay/actors/builtin/components/scene-component.js +1 -2
  94. package/dist/gameplay/actors/builtin/index.d.ts +1 -0
  95. package/dist/gameplay/actors/builtin/index.d.ts.map +1 -0
  96. package/dist/gameplay/actors/builtin/index.js +1 -2
  97. package/dist/gameplay/actors/builtin/navmesh-actor.d.ts +1 -0
  98. package/dist/gameplay/actors/builtin/navmesh-actor.d.ts.map +1 -0
  99. package/dist/gameplay/actors/builtin/navmesh-actor.js +1 -2
  100. package/dist/gameplay/actors/builtin/positional-audio-actor.d.ts +1 -0
  101. package/dist/gameplay/actors/builtin/positional-audio-actor.d.ts.map +1 -0
  102. package/dist/gameplay/actors/builtin/positional-audio-actor.js +1 -2
  103. package/dist/gameplay/actors/builtin/spawn-point.d.ts +1 -0
  104. package/dist/gameplay/actors/builtin/spawn-point.d.ts.map +1 -0
  105. package/dist/gameplay/actors/builtin/spawn-point.js +1 -2
  106. package/dist/gameplay/actors/builtin/trigger-volume.d.ts +1 -0
  107. package/dist/gameplay/actors/builtin/trigger-volume.d.ts.map +1 -0
  108. package/dist/gameplay/actors/builtin/trigger-volume.js +1 -2
  109. package/dist/gameplay/actors/camera/camera-component.d.ts +1 -0
  110. package/dist/gameplay/actors/camera/camera-component.d.ts.map +1 -0
  111. package/dist/gameplay/actors/camera/camera-component.js +1 -2
  112. package/dist/gameplay/actors/camera/third-person-camera-component.d.ts +1 -0
  113. package/dist/gameplay/actors/camera/third-person-camera-component.d.ts.map +1 -0
  114. package/dist/gameplay/actors/camera/third-person-camera-component.js +1 -2
  115. package/dist/gameplay/actors/component.d.ts +1 -0
  116. package/dist/gameplay/actors/component.d.ts.map +1 -0
  117. package/dist/gameplay/actors/component.js +1 -2
  118. package/dist/gameplay/actors/factory.d.ts +1 -0
  119. package/dist/gameplay/actors/factory.d.ts.map +1 -0
  120. package/dist/gameplay/actors/factory.js +1 -2
  121. package/dist/gameplay/actors/index.d.ts +1 -0
  122. package/dist/gameplay/actors/index.d.ts.map +1 -0
  123. package/dist/gameplay/actors/index.js +1 -2
  124. package/dist/gameplay/actors/internal/component-init.d.ts +1 -0
  125. package/dist/gameplay/actors/internal/component-init.d.ts.map +1 -0
  126. package/dist/gameplay/actors/internal/component-init.js +1 -2
  127. package/dist/gameplay/actors/internal/container-map.d.ts +1 -0
  128. package/dist/gameplay/actors/internal/container-map.d.ts.map +1 -0
  129. package/dist/gameplay/actors/internal/container-map.js +1 -2
  130. package/dist/gameplay/ai/behavior-tree/bt.d.ts +1 -0
  131. package/dist/gameplay/ai/behavior-tree/bt.d.ts.map +1 -0
  132. package/dist/gameplay/ai/behavior-tree/bt.js +1 -2
  133. package/dist/gameplay/ai/behavior-tree/move.d.ts +1 -0
  134. package/dist/gameplay/ai/behavior-tree/move.d.ts.map +1 -0
  135. package/dist/gameplay/ai/behavior-tree/move.js +1 -2
  136. package/dist/gameplay/ai/build-tile.d.ts +2 -1
  137. package/dist/gameplay/ai/build-tile.d.ts.map +1 -0
  138. package/dist/gameplay/ai/build-tile.js +1 -2
  139. package/dist/gameplay/ai/dynamic-tiled-navmesh.d.ts +1 -0
  140. package/dist/gameplay/ai/dynamic-tiled-navmesh.d.ts.map +1 -0
  141. package/dist/gameplay/ai/dynamic-tiled-navmesh.js +1 -2
  142. package/dist/gameplay/ai/dynamic-tiled-navmesh.worker.d.ts +1 -0
  143. package/dist/gameplay/ai/dynamic-tiled-navmesh.worker.d.ts.map +1 -0
  144. package/dist/gameplay/ai/dynamic-tiled-navmesh.worker.js +1 -2
  145. package/dist/gameplay/ai/index.d.ts +1 -0
  146. package/dist/gameplay/ai/index.d.ts.map +1 -0
  147. package/dist/gameplay/ai/index.js +1 -2
  148. package/dist/gameplay/ai/navigation.d.ts +1 -0
  149. package/dist/gameplay/ai/navigation.d.ts.map +1 -0
  150. package/dist/gameplay/ai/navigation.js +1 -2
  151. package/dist/gameplay/animation/anim-sm.d.ts +1 -0
  152. package/dist/gameplay/animation/anim-sm.d.ts.map +1 -0
  153. package/dist/gameplay/animation/anim-sm.js +1 -2
  154. package/dist/gameplay/animation/root-motion.d.ts +1 -0
  155. package/dist/gameplay/animation/root-motion.d.ts.map +1 -0
  156. package/dist/gameplay/animation/root-motion.js +1 -2
  157. package/dist/gameplay/env.d.ts +1 -0
  158. package/dist/gameplay/env.d.ts.map +1 -0
  159. package/dist/gameplay/env.js +1 -2
  160. package/dist/gameplay/index.d.ts +1 -0
  161. package/dist/gameplay/index.d.ts.map +1 -0
  162. package/dist/gameplay/index.js +1 -2
  163. package/dist/gameplay/initiate.d.ts +1 -0
  164. package/dist/gameplay/initiate.d.ts.map +1 -0
  165. package/dist/gameplay/initiate.js +1 -2
  166. package/dist/gameplay/inject.d.ts +1 -0
  167. package/dist/gameplay/inject.d.ts.map +1 -0
  168. package/dist/gameplay/inject.js +1 -2
  169. package/dist/gameplay/input/index.d.ts +1 -0
  170. package/dist/gameplay/input/index.d.ts.map +1 -0
  171. package/dist/gameplay/input/index.js +1 -2
  172. package/dist/gameplay/input/input-service.d.ts +1 -0
  173. package/dist/gameplay/input/input-service.d.ts.map +1 -0
  174. package/dist/gameplay/input/input-service.js +1 -2
  175. package/dist/gameplay/input/input.d.ts +1 -0
  176. package/dist/gameplay/input/input.d.ts.map +1 -0
  177. package/dist/gameplay/input/input.js +1 -2
  178. package/dist/gameplay/input/keybind.d.ts +1 -0
  179. package/dist/gameplay/input/keybind.d.ts.map +1 -0
  180. package/dist/gameplay/input/keybind.js +1 -2
  181. package/dist/gameplay/polyfill.d.ts +1 -0
  182. package/dist/gameplay/polyfill.d.ts.map +1 -0
  183. package/dist/gameplay/polyfill.js +1 -2
  184. package/dist/gameplay/services/asset-loader.d.ts +1 -0
  185. package/dist/gameplay/services/asset-loader.d.ts.map +1 -0
  186. package/dist/gameplay/services/asset-loader.js +1 -2
  187. package/dist/gameplay/services/physics/abstract-physics-system.d.ts +1 -0
  188. package/dist/gameplay/services/physics/abstract-physics-system.d.ts.map +1 -0
  189. package/dist/gameplay/services/physics/abstract-physics-system.js +1 -2
  190. package/dist/gameplay/services/physics/collision-contact.d.ts +1 -0
  191. package/dist/gameplay/services/physics/collision-contact.d.ts.map +1 -0
  192. package/dist/gameplay/services/physics/collision-contact.js +1 -2
  193. package/dist/gameplay/services/physics/physics-system.d.ts +1 -0
  194. package/dist/gameplay/services/physics/physics-system.d.ts.map +1 -0
  195. package/dist/gameplay/services/physics/physics-system.js +1 -2
  196. package/dist/gameplay/services/pointer-events.d.ts +1 -0
  197. package/dist/gameplay/services/pointer-events.d.ts.map +1 -0
  198. package/dist/gameplay/services/pointer-events.js +1 -2
  199. package/dist/gameplay/services/render.d.ts +1 -0
  200. package/dist/gameplay/services/render.d.ts.map +1 -0
  201. package/dist/gameplay/services/render.js +1 -2
  202. package/dist/gameplay/services/world.d.ts +1 -0
  203. package/dist/gameplay/services/world.d.ts.map +1 -0
  204. package/dist/gameplay/services/world.js +1 -2
  205. package/dist/index.d.ts +1 -0
  206. package/dist/index.d.ts.map +1 -0
  207. package/dist/index.js +1 -2
  208. package/dist/rendering/shader-override.d.ts +1 -0
  209. package/dist/rendering/shader-override.d.ts.map +1 -0
  210. package/dist/rendering/shader-override.js +1 -2
  211. package/dist/rendering.d.ts +1 -0
  212. package/dist/rendering.d.ts.map +1 -0
  213. package/dist/rendering.js +1 -2
  214. package/dist/scene/asset-resource-loader.d.ts +1 -0
  215. package/dist/scene/asset-resource-loader.d.ts.map +1 -0
  216. package/dist/scene/asset-resource-loader.js +1 -2
  217. package/dist/scene/assets-provider.d.ts +1 -0
  218. package/dist/scene/assets-provider.d.ts.map +1 -0
  219. package/dist/scene/assets-provider.js +1 -2
  220. package/dist/scene/bootstrap.d.ts +1 -0
  221. package/dist/scene/bootstrap.d.ts.map +1 -0
  222. package/dist/scene/bootstrap.js +1 -2
  223. package/dist/scene/collision/collision-shape-import.d.ts +1 -0
  224. package/dist/scene/collision/collision-shape-import.d.ts.map +1 -0
  225. package/dist/scene/collision/collision-shape-import.js +1 -2
  226. package/dist/scene/collision/collision-shape.d.ts +1 -0
  227. package/dist/scene/collision/collision-shape.d.ts.map +1 -0
  228. package/dist/scene/collision/collision-shape.js +1 -2
  229. package/dist/scene/landscape/landscape-manager.d.ts +1 -0
  230. package/dist/scene/landscape/landscape-manager.d.ts.map +1 -0
  231. package/dist/scene/landscape/landscape-manager.js +1 -2
  232. package/dist/scene/landscape/landscape.d.ts +1 -0
  233. package/dist/scene/landscape/landscape.d.ts.map +1 -0
  234. package/dist/scene/landscape/landscape.js +1 -2
  235. package/dist/scene/landscape/utils.d.ts +1 -0
  236. package/dist/scene/landscape/utils.d.ts.map +1 -0
  237. package/dist/scene/landscape/utils.js +1 -2
  238. package/dist/scene/materializer.d.ts +1 -0
  239. package/dist/scene/materializer.d.ts.map +1 -0
  240. package/dist/scene/materializer.js +1 -2
  241. package/dist/scene/materials/grass-foliage.d.ts +1 -0
  242. package/dist/scene/materials/grass-foliage.d.ts.map +1 -0
  243. package/dist/scene/materials/grass-foliage.js +1 -2
  244. package/dist/scene/materials/grass.d.ts +1 -0
  245. package/dist/scene/materials/grass.d.ts.map +1 -0
  246. package/dist/scene/materials/grass.js +1 -2
  247. package/dist/scene/materials/utils/material-painting.d.ts +1 -0
  248. package/dist/scene/materials/utils/material-painting.d.ts.map +1 -0
  249. package/dist/scene/materials/utils/material-painting.js +1 -2
  250. package/dist/scene/materials/utils/noise.glsl.d.ts +1 -0
  251. package/dist/scene/materials/utils/noise.glsl.d.ts.map +1 -0
  252. package/dist/scene/materials/utils/noise.glsl.js +1 -2
  253. package/dist/scene/materials/water.d.ts +1 -0
  254. package/dist/scene/materials/water.d.ts.map +1 -0
  255. package/dist/scene/materials/water.js +1 -2
  256. package/dist/scene/model.d.ts +3 -1
  257. package/dist/scene/model.d.ts.map +1 -0
  258. package/dist/scene/model.js +1 -2
  259. package/dist/scene/objects/ramp-geometry.d.ts +1 -0
  260. package/dist/scene/objects/ramp-geometry.d.ts.map +1 -0
  261. package/dist/scene/objects/ramp-geometry.js +1 -2
  262. package/dist/scene/objects/shapes.d.ts +3 -3
  263. package/dist/scene/objects/shapes.d.ts.map +1 -0
  264. package/dist/scene/objects/shapes.js +1 -2
  265. package/dist/scene/objects/stairs-geometry.d.ts +1 -0
  266. package/dist/scene/objects/stairs-geometry.d.ts.map +1 -0
  267. package/dist/scene/objects/stairs-geometry.js +1 -2
  268. package/dist/scene/runtime-asset-service.d.ts +1 -0
  269. package/dist/scene/runtime-asset-service.d.ts.map +1 -0
  270. package/dist/scene/runtime-asset-service.js +1 -2
  271. package/dist/scene/runtime-backend-service.d.ts +1 -0
  272. package/dist/scene/runtime-backend-service.d.ts.map +1 -0
  273. package/dist/scene/runtime-backend-service.js +1 -2
  274. package/dist/scene/runtime-bundled-backend-service.d.ts +1 -0
  275. package/dist/scene/runtime-bundled-backend-service.d.ts.map +1 -0
  276. package/dist/scene/runtime-bundled-backend-service.js +1 -2
  277. package/dist/scene/scene-data-service.d.ts +1 -0
  278. package/dist/scene/scene-data-service.d.ts.map +1 -0
  279. package/dist/scene/scene-data-service.js +1 -2
  280. package/dist/scene/sky.d.ts +1 -0
  281. package/dist/scene/sky.d.ts.map +1 -0
  282. package/dist/scene/sky.js +1 -2
  283. package/dist/scene/storage/storage.d.ts +1 -0
  284. package/dist/scene/storage/storage.d.ts.map +1 -0
  285. package/dist/scene/storage/storage.js +1 -2
  286. package/dist/shader/builtin/index.d.ts +1 -0
  287. package/dist/shader/builtin/index.d.ts.map +1 -0
  288. package/dist/shader/builtin/index.js +1 -2
  289. package/dist/shader/builtin/lambert-shader.d.ts +1 -0
  290. package/dist/shader/builtin/lambert-shader.d.ts.map +1 -0
  291. package/dist/shader/builtin/lambert-shader.js +1 -2
  292. package/dist/shader/builtin/landscape-composite-shader.d.ts +1 -0
  293. package/dist/shader/builtin/landscape-composite-shader.d.ts.map +1 -0
  294. package/dist/shader/builtin/landscape-composite-shader.js +1 -2
  295. package/dist/shader/builtin/landscape-shader.d.ts +1 -0
  296. package/dist/shader/builtin/landscape-shader.d.ts.map +1 -0
  297. package/dist/shader/builtin/landscape-shader.js +1 -2
  298. package/dist/shader/builtin/standard-shader.d.ts +1 -0
  299. package/dist/shader/builtin/standard-shader.d.ts.map +1 -0
  300. package/dist/shader/builtin/standard-shader.js +1 -2
  301. package/dist/shader/builtin/unlit-shader.d.ts +1 -0
  302. package/dist/shader/builtin/unlit-shader.d.ts.map +1 -0
  303. package/dist/shader/builtin/unlit-shader.js +1 -2
  304. package/dist/shader/index.d.ts +1 -0
  305. package/dist/shader/index.d.ts.map +1 -0
  306. package/dist/shader/index.js +1 -2
  307. package/dist/shader/parameter.d.ts +3 -1
  308. package/dist/shader/parameter.d.ts.map +1 -0
  309. package/dist/shader/parameter.js +1 -2
  310. package/dist/shader/shader.d.ts +1 -0
  311. package/dist/shader/shader.d.ts.map +1 -0
  312. package/dist/shader/shader.js +1 -2
  313. package/dist/shader-nodes/bulge.d.ts +1 -0
  314. package/dist/shader-nodes/bulge.d.ts.map +1 -0
  315. package/dist/shader-nodes/bulge.js +1 -2
  316. package/dist/shader-nodes/depth.d.ts +1 -0
  317. package/dist/shader-nodes/depth.d.ts.map +1 -0
  318. package/dist/shader-nodes/depth.js +1 -2
  319. package/dist/shader-nodes/effects.d.ts +1 -0
  320. package/dist/shader-nodes/effects.d.ts.map +1 -0
  321. package/dist/shader-nodes/effects.js +1 -2
  322. package/dist/shader-nodes/glsl-node.d.ts +2 -1
  323. package/dist/shader-nodes/glsl-node.d.ts.map +1 -0
  324. package/dist/shader-nodes/glsl-node.js +1 -2
  325. package/dist/shader-nodes/index.d.ts +2 -0
  326. package/dist/shader-nodes/index.d.ts.map +1 -0
  327. package/dist/shader-nodes/index.js +1 -2
  328. package/dist/shader-nodes/landscape.d.ts +1 -0
  329. package/dist/shader-nodes/landscape.d.ts.map +1 -0
  330. package/dist/shader-nodes/landscape.js +1 -2
  331. package/dist/shader-nodes/layers.d.ts +1 -0
  332. package/dist/shader-nodes/layers.d.ts.map +1 -0
  333. package/dist/shader-nodes/layers.js +1 -2
  334. package/dist/shader-nodes/math.d.ts +1 -0
  335. package/dist/shader-nodes/math.d.ts.map +1 -0
  336. package/dist/shader-nodes/math.js +1 -2
  337. package/dist/shader-nodes/particle.d.ts +3 -0
  338. package/dist/shader-nodes/particle.d.ts.map +1 -0
  339. package/dist/shader-nodes/particle.js +1 -2
  340. package/dist/shader-nodes/shapes.d.ts +1 -0
  341. package/dist/shader-nodes/shapes.d.ts.map +1 -0
  342. package/dist/shader-nodes/shapes.js +1 -2
  343. package/dist/shader-nodes/texture-sequence.d.ts +2 -1
  344. package/dist/shader-nodes/texture-sequence.d.ts.map +1 -0
  345. package/dist/shader-nodes/texture-sequence.js +1 -2
  346. package/dist/shader-nodes/time.d.ts +1 -0
  347. package/dist/shader-nodes/time.d.ts.map +1 -0
  348. package/dist/shader-nodes/time.js +1 -2
  349. package/dist/shader-nodes/voronoi.d.ts +1 -0
  350. package/dist/shader-nodes/voronoi.d.ts.map +1 -0
  351. package/dist/shader-nodes/voronoi.js +1 -2
  352. package/dist/test/injection.test.d.ts +1 -0
  353. package/dist/test/injection.test.d.ts.map +1 -0
  354. package/dist/test/injection.test.js +1 -2
  355. package/dist/utils/async.d.ts +1 -0
  356. package/dist/utils/async.d.ts.map +1 -0
  357. package/dist/utils/async.js +1 -2
  358. package/dist/utils/buffer.d.ts +1 -0
  359. package/dist/utils/buffer.d.ts.map +1 -0
  360. package/dist/utils/buffer.js +1 -2
  361. package/dist/utils/collections.d.ts +1 -0
  362. package/dist/utils/collections.d.ts.map +1 -0
  363. package/dist/utils/collections.js +1 -2
  364. package/dist/utils/curve.d.ts +12 -0
  365. package/dist/utils/curve.d.ts.map +1 -0
  366. package/dist/utils/curve.js +4 -0
  367. package/dist/utils/files.d.ts +1 -0
  368. package/dist/utils/files.d.ts.map +1 -0
  369. package/dist/utils/files.js +1 -2
  370. package/dist/utils/materials.d.ts +1 -0
  371. package/dist/utils/materials.d.ts.map +1 -0
  372. package/dist/utils/materials.js +1 -2
  373. package/dist/utils/math.d.ts +1 -0
  374. package/dist/utils/math.d.ts.map +1 -0
  375. package/dist/utils/math.js +1 -2
  376. package/dist/utils/mesh.d.ts +1 -0
  377. package/dist/utils/mesh.d.ts.map +1 -0
  378. package/dist/utils/mesh.js +1 -2
  379. package/dist/utils/polyfill.d.ts +1 -0
  380. package/dist/utils/polyfill.d.ts.map +1 -0
  381. package/dist/utils/polyfill.js +1 -2
  382. package/dist/utils/three/depth-pass.d.ts +1 -0
  383. package/dist/utils/three/depth-pass.d.ts.map +1 -0
  384. package/dist/utils/three/depth-pass.js +1 -2
  385. package/dist/utils/three/gpu-stats-panel.d.ts +1 -0
  386. package/dist/utils/three/gpu-stats-panel.d.ts.map +1 -0
  387. package/dist/utils/three/gpu-stats-panel.js +1 -2
  388. package/dist/utils/three/line-sphere.d.ts +1 -0
  389. package/dist/utils/three/line-sphere.d.ts.map +1 -0
  390. package/dist/utils/three/line-sphere.js +1 -2
  391. package/dist/utils/three/outline-pass.d.ts +1 -0
  392. package/dist/utils/three/outline-pass.d.ts.map +1 -0
  393. package/dist/utils/three/outline-pass.js +1 -2
  394. package/dist/utils/three/positional-audio-helper.d.ts +1 -0
  395. package/dist/utils/three/positional-audio-helper.d.ts.map +1 -0
  396. package/dist/utils/three/positional-audio-helper.js +1 -2
  397. package/dist/utils/three/stats.d.ts +1 -0
  398. package/dist/utils/three/stats.d.ts.map +1 -0
  399. package/dist/utils/three/stats.js +1 -2
  400. package/dist/utils/three/transform-controls.d.ts +1 -0
  401. package/dist/utils/three/transform-controls.d.ts.map +1 -0
  402. package/dist/utils/three/transform-controls.js +1 -2
  403. package/dist/utils/three/traverse.d.ts +1 -0
  404. package/dist/utils/three/traverse.d.ts.map +1 -0
  405. package/dist/utils/three/traverse.js +1 -2
  406. package/dist/utils/type.d.ts +1 -0
  407. package/dist/utils/type.d.ts.map +1 -0
  408. package/dist/utils/type.js +1 -2
  409. package/dist/utils/uuid.d.ts +1 -0
  410. package/dist/utils/uuid.d.ts.map +1 -0
  411. package/dist/utils/uuid.js +1 -2
  412. package/dist/utils/voxel-bitset.d.ts +14 -0
  413. package/dist/utils/voxel-bitset.d.ts.map +1 -0
  414. package/dist/utils/voxel-bitset.js +4 -0
  415. package/dist/worker/index.d.ts +1 -0
  416. package/dist/worker/index.d.ts.map +1 -0
  417. package/dist/worker/index.js +1 -2
  418. package/package.json +84 -8
  419. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,19 @@
1
+ import { Behaviour, Emitter, Particle } from "@hology/nebula";
2
+ import { PhysicsSystem } from "../../gameplay/services/physics/physics-system.js";
3
+ export declare class WorldCollisionBehaviour extends Behaviour {
4
+ private physics;
5
+ private bounce;
6
+ private friction;
7
+ private lifeLoss;
8
+ /**
9
+ *
10
+ * @param physics
11
+ * @param bounce - Coefficient of restitution (0 = no bounce, 1 = full bounce).
12
+ * @param friction - If bounce is 0, friction can be used to control how much the particles slide
13
+ * against the surface. Low friction results in more sliding.
14
+ */
15
+ constructor(physics: PhysicsSystem, bounce?: number, friction?: number, lifeLoss?: number);
16
+ initialize(particle: Particle): void;
17
+ mutate(particle: Particle | Emitter, time: number, index: number): void;
18
+ }
19
+ //# sourceMappingURL=vfx-collision-behaviour.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-collision-behaviour.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-collision-behaviour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAiB,MAAM,mDAAmD,CAAA;AAuChG,qBAAa,uBAAwB,SAAQ,SAAS;IASlD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,QAAQ;IAXlB;;;;;;OAMG;gBAEO,OAAO,EAAE,aAAa,EACtB,MAAM,GAAE,MAAU,EAClB,QAAQ,GAAE,MAAU,EACpB,QAAQ,GAAE,MAAU;IAK9B,UAAU,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAgBpC,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAmHxE"}
@@ -0,0 +1,4 @@
1
+ import{Behaviour as o,Emitter as t}from"@hology/nebula";import{RayTestResult as i}from"../../gameplay/services/physics/physics-system.js";import{Color as e,Vector3 as l}from"three";export class WorldCollisionBehaviour extends o{constructor(o,t=0,i=0,e=0){super(),this.physics=o,this.bounce=t,this.friction=i,this.lifeLoss=e}initialize(o){null==o.old.rayFrom?o.old.rayFrom=new l:o.old.rayFrom.set(0,0,0),o.old.rayLength=-1,null==o.old.hitNormal?o.old.hitNormal=new l:o.old.hitNormal.set(0,0,0),o.old.hitDistance=-1}mutate(o,i,e){if(0===o.velocity.length())return;const l=.5*o.scale*.5;a.copy(o.velocity).normalize(),s.copy(o.velocity).multiplyScalar(i);const y=r.copy(o.old.velocity).normalize(),d=o.old.rayFrom,m=o.old.hitDistance,p=o.old.hitNormal,u=o.old.rayLength;if(y.dot(a)>.99&&o.position.distanceTo(d)+l<u)m>0?(n.hasHit=!0,n.distance=m-d.distanceTo(o.position),n.hitNormal.copy(p)):n.hasHit=!1;else{const t=15;c.copy(o.position).addScaledVector(o.velocity,i*t).addScaledVector(a,l),this.physics.rayTest(o.position,c,n),o.old.rayFrom.copy(o.position),o.old.hitDistance=n.hasHit?n.distance:-1,o.old.hitNormal.copy(n.hitNormal),o.old.rayLength=o.position.distanceTo(c)}var f,v,w;n.hasHit&&s.length()+l>n.distance&&(o.acceleration.set(0,0,0),this.bounce>0?(f=o.velocity,v=n.hitNormal,w=this.bounce,o.velocity.copy(f).sub(h.copy(v).multiplyScalar(2*f.dot(v))).multiplyScalar(w)):function(o,t,i=.95,e){const l=h.copy(t).multiplyScalar(o.dot(t)),s=e.sub(l).multiplyScalar(1-i)}(o.velocity,n.hitNormal,this.friction,o.velocity),o.old.hitDistance=-1,o.parent instanceof t&&o.parent.dispatch("PARTICLE_COLLISION",o),this.lifeLoss>0&&setTimeout((()=>{o.life-=this.lifeLoss+30}),30))}}const s=new l,a=new l,c=new l,n=new i,r=(new l,new l),h=new l;(new e).setRGB(Math.random(),Math.random(),Math.random());/*
2
+ * Copyright (©) 2023. All rights reserved.
3
+ * See the LICENSE.md file for details.
4
+ */
@@ -1,12 +1,9 @@
1
1
  import { Vector2, Vector3 } from "three";
2
- import { Behaviour, Emitter, Particle } from "three-nebula";
3
- declare const Initializer_base: any;
4
- declare class Initializer extends Initializer_base {
5
- init(emitter: Emitter, particle: Particle): void;
6
- }
2
+ import { Behaviour, Initializer } from "@hology/nebula";
3
+ import { Curve2 } from "../../utils/curve.js";
7
4
  type HexColor = `#${string}`;
8
- export type ShapeParameterDef<T = boolean | number | string | Vector3 | Vector2 | HexColor> = {
9
- type: T extends number ? 'number' : T extends HexColor ? 'color' : T extends string ? 'string' | 'select' : T extends Vector2 ? 'vec2' : T extends Vector3 ? 'vec3' : T extends boolean ? 'boolean' : never;
5
+ export type ShapeParameterDef<T = boolean | number | string | Vector3 | Vector2 | HexColor | Curve2> = {
6
+ type: T extends number ? 'number' : T extends HexColor ? 'color' : T extends string ? 'string' | 'select' : T extends Vector2 ? 'vec2' : T extends Vector3 ? 'vec3' : T extends Curve2 ? 'curve' : T extends boolean ? 'boolean' : never;
10
7
  default: T;
11
8
  };
12
9
  type FloatParameterDef = ShapeParameterDef<number> & {
@@ -133,14 +130,14 @@ declare class InitialScaleComponentsDef extends BaseIniDef<InitialScaleComponent
133
130
  declare class ForceDef extends BaseBevDef<ForceDef> {
134
131
  parameters: {
135
132
  force: ShapeParameterDef<Vector3>;
136
- ease: SelectParameterDef<string>;
133
+ ease: ShapeParameterDef<Curve2>;
137
134
  };
138
135
  make(params?: ParamsType<this>): Behaviour;
139
136
  }
140
137
  declare class GravityDef extends BaseBevDef<GravityDef> {
141
138
  parameters: {
142
139
  gravity: FloatParameterDef;
143
- easing: SelectParameterDef<string>;
140
+ easing: ShapeParameterDef<Curve2>;
144
141
  };
145
142
  make(params?: ParamsType<this>): Behaviour;
146
143
  }
@@ -148,7 +145,7 @@ declare class ScaleDef extends BaseBevDef<ScaleDef> {
148
145
  parameters: {
149
146
  a: FloatParameterDef;
150
147
  b: FloatParameterDef;
151
- ease: SelectParameterDef<string>;
148
+ ease: ShapeParameterDef<Curve2>;
152
149
  };
153
150
  make(params?: ParamsType<this>): Behaviour;
154
151
  }
@@ -156,14 +153,20 @@ declare class RandomDriftDef extends BaseBevDef<RandomDriftDef> {
156
153
  parameters: {
157
154
  drift: ShapeParameterDef<Vector3>;
158
155
  delay: FloatParameterDef;
159
- ease: SelectParameterDef<string>;
156
+ ease: ShapeParameterDef<Curve2>;
160
157
  };
161
158
  make(params?: ParamsType<this>): Behaviour;
162
159
  }
163
160
  declare class RotateDef extends BaseBevDef<RotateDef> {
164
161
  parameters: {
165
162
  rotation: ShapeParameterDef<Vector3>;
166
- ease: SelectParameterDef<string>;
163
+ ease: ShapeParameterDef<Curve2>;
164
+ };
165
+ make(params?: ParamsType<this>): Behaviour;
166
+ }
167
+ declare class RotateAddDef extends BaseBevDef<RotateDef> {
168
+ parameters: {
169
+ rotation: ShapeParameterDef<Vector3>;
167
170
  };
168
171
  make(params?: ParamsType<this>): Behaviour;
169
172
  }
@@ -177,7 +180,7 @@ declare class ChangeColorDef extends BaseBevDef<ChangeColorDef> {
177
180
  parameters: {
178
181
  a: ShapeParameterDef<`#${string}`>;
179
182
  b: ShapeParameterDef<`#${string}`>;
180
- ease: SelectParameterDef<string>;
183
+ ease: ShapeParameterDef<Curve2>;
181
184
  };
182
185
  make(params?: ParamsType<this>): Behaviour;
183
186
  }
@@ -185,7 +188,7 @@ declare class ChangeOpacityDef extends BaseBevDef<ChangeOpacityDef> {
185
188
  parameters: {
186
189
  a: FloatParameterDef;
187
190
  b: FloatParameterDef;
188
- ease: SelectParameterDef<string>;
191
+ ease: ShapeParameterDef<Curve2>;
189
192
  };
190
193
  make(params?: ParamsType<this>): Behaviour;
191
194
  }
@@ -201,7 +204,7 @@ declare class RepulsionDef extends BaseBevDef<RepulsionDef> {
201
204
  target: ShapeParameterDef<Vector3>;
202
205
  force: FloatParameterDef;
203
206
  radius: FloatParameterDef;
204
- easing: SelectParameterDef<string>;
207
+ easing: ShapeParameterDef<Curve2>;
205
208
  };
206
209
  make(params?: ParamsType<this>): Behaviour;
207
210
  }
@@ -210,14 +213,14 @@ declare class AttractionDef extends BaseBevDef<AttractionDef> {
210
213
  target: ShapeParameterDef<Vector3>;
211
214
  force: FloatParameterDef;
212
215
  radius: FloatParameterDef;
213
- easing: SelectParameterDef<string>;
216
+ easing: ShapeParameterDef<Curve2>;
214
217
  };
215
218
  make(params?: ParamsType<this>): Behaviour;
216
219
  }
217
220
  declare class MoveToDef extends BaseBevDef<MoveToDef> {
218
221
  parameters: {
219
222
  target: ShapeParameterDef<Vector3>;
220
- ease: SelectParameterDef<string>;
223
+ ease: ShapeParameterDef<Curve2>;
221
224
  };
222
225
  make(params?: ParamsType<this>): Behaviour;
223
226
  }
@@ -227,6 +230,14 @@ declare class LinearDampingDef extends BaseBevDef<LinearDampingDef> {
227
230
  };
228
231
  make(params?: ParamsType<this>): Behaviour;
229
232
  }
233
+ declare class WorldCollisionDef extends BaseBevDef<WorldCollisionDef> {
234
+ parameters: {
235
+ friction: FloatParameterDef;
236
+ bounce: FloatParameterDef;
237
+ lifeLoss: FloatParameterDef;
238
+ };
239
+ make(params?: ParamsType<this>): Behaviour;
240
+ }
230
241
  declare const vfxInitializsers: {
231
242
  lifetime: LifetimeDef;
232
243
  positionPoint: PositionPointDef;
@@ -251,17 +262,20 @@ declare const vfxBehaviours: {
251
262
  scale: ScaleDef;
252
263
  randomDrift: RandomDriftDef;
253
264
  rotate: RotateDef;
265
+ rotateAdd: RotateAddDef;
254
266
  changeColor: ChangeColorDef;
255
267
  changeOpacity: ChangeOpacityDef;
256
268
  vortex: VortexDef;
257
269
  moveTo: MoveToDef;
258
270
  linearDamping: LinearDampingDef;
259
271
  followParent: FollowParentDef;
272
+ worldCollision: WorldCollisionDef;
260
273
  };
261
274
  export type LibraryVfxInitalizerType = keyof typeof vfxInitializsers;
262
275
  export declare const VfxInitializserLibrary: Record<LibraryVfxInitalizerType, InitializerDefinition>;
263
- export declare const VfxInitializserLibraryKeys: ("rotation" | "mass" | "scale" | "velocity" | "lifetime" | "positionPoint" | "positionBox" | "positionSphere" | "positionLine" | "randomRotation" | "scaleComponents" | "randomScale" | "radialVelocity" | "randomDirection")[];
276
+ export declare const VfxInitializserLibraryKeys: LibraryVfxInitalizerType[];
264
277
  export type LibraryVfxBehaviourType = keyof typeof vfxBehaviours;
265
278
  export declare const VfxBehaviourLibrary: Record<LibraryVfxBehaviourType, BehaviourDefinition>;
266
- export declare const VfxBehaviourLibraryKeys: ("scale" | "force" | "gravity" | "repulsion" | "attraction" | "randomDrift" | "rotate" | "changeColor" | "changeOpacity" | "vortex" | "moveTo" | "linearDamping" | "followParent")[];
279
+ export declare const VfxBehaviourLibraryKeys: LibraryVfxBehaviourType[];
267
280
  export {};
281
+ //# sourceMappingURL=vfx-defs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-defs.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-defs.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import{Color as e,MathUtils as r,Vector2 as t,Vector3 as s}from"three";import{Alpha as n,Attraction as a,BoxZone as o,Color as i,ease as c,Force as u,Gravity as p,Life as m,LineZone as d,Mass as l,Position as w,RadialVelocity as x,RandomDrift as f,Repulsion as y,Rotate as h,Vector3D as k}from"three-nebula";import{AxisDirection as g,AxisPlane as b,Disperse as v,FollowParent as z,LinearDamping as L,MoveOverLife as j,OrientAlongVelocity as V,RotatePosition as O,Scale as B}from"./behaviours.js";import{AdditiveVelocity as R,InitialScale as T,InitialScaleComponents as C,RandomDirection as D,RandomRotation as I,RandomScale as P,Rotation as A}from"./initializsers.js";import{PointZone as K,SphereZone as S}from"./zones.js";Object.getPrototypeOf(m);class q{build(e={}){const r=N(e,this.parameters);return this.make(r)}}class E{build(e={}){const r=N(e,this.parameters);return this.make(r)}}function F(e,r,t){return{type:"number",default:e,float:!0,min:r,max:t}}function G(e){return{type:"vec3",default:(new s).fromArray(e)}}function H(e){return{type:"color",default:e}}function J(e,r){return{type:"select",opts:e,default:r}}function M(){return J(Array.from(Object.keys(c)).map((e=>e.substring(4))),"Linear")}function N(e,r){const t={};for(let s in r)null==e[s]?t[s]=r[s].default:t[s]=e[s];return t}function Q(e){return null!=e?c["ease"+e]:c.easeLinear}const U={lifetime:new class extends E{constructor(){super(...arguments),this.parameters={duration:F(1,0,1e5)}}make(e={}){return new m(e.duration)}},positionPoint:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position;return new w(new K(r,t,s))}},positionBox:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0]),dimensions:G([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position,{x:n,y:a,z:i}=e.dimensions;return new w(new o(r,t,s,n,a,i))}},positionSphere:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0]),radius:F(1)}}make(e={}){const{x:r,y:t,z:s}=e.position;return new w(new S(r,t,s,e.radius))}},positionLine:new class extends E{constructor(){super(...arguments),this.parameters={a:G([0,0,0]),b:G([0,0,1])}}make(e={}){const{x:r,y:t,z:s}=e.a,{x:n,y:a,z:o}=e.b;return new w(new d(r,t,s,n,a,o))}},rotation:new class extends E{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0])}}make(e={}){const{x:r,y:t,z:n}=e.rotation;return new A(new s(r,t,n))}},randomRotation:new class extends E{constructor(){super(...arguments),this.parameters={}}make(e={}){return new I}},scale:new class extends E{constructor(){super(...arguments),this.parameters={scale:F(1)}}make(e={}){return new T(e.scale)}},scaleComponents:new class extends E{constructor(){super(...arguments),this.parameters={scale:G([1,1,1])}}make(e={}){return new C(e.scale)}},randomScale:new class extends E{constructor(){super(...arguments),this.parameters={min:F(1),max:F(1)}}make(e={}){return new P(e.min,e.max)}},mass:new class extends E{constructor(){super(...arguments),this.parameters={min:F(1)}}make(e={}){return new l(e.min)}},velocity:new class extends E{constructor(){super(...arguments),this.parameters={velocity:G([0,0,0])}}make(e={}){const{x:r,y:t,z:n}=e.velocity;return new R(new s(r,t,n))}},radialVelocity:new class extends E{constructor(){super(...arguments),this.parameters={speed:F(1),direction:G([0,1,0]),spread:F(0)}}make(e={}){return new x(e.speed,new k(e.direction.x,e.direction.y,e.direction.z),e.spread)}},randomDirection:new class extends E{constructor(){super(...arguments),this.parameters={speed:F(1)}}make(e={}){return new D(e.speed)}}},W={force:new class extends q{constructor(){super(...arguments),this.parameters={force:G([0,0,0]),ease:M()}}make(e={}){return new u(e.force.x,e.force.y,e.force.z,void 0,Q(e.ease))}},gravity:new class extends q{constructor(){super(...arguments),this.parameters={gravity:F(8),easing:M()}}make(e={}){return new p(e.gravity,void 0,Q(e.easing))}},repulsion:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,0,0]),force:F(1),radius:F(1),easing:M()}}make(e={}){const r=new k(e.target.x,e.target.y,e.target.z);return new y(r,e.force,e.radius,void 0,Q(e.easing))}},attraction:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,0,0]),force:F(1),radius:F(1),easing:M()}}make(e={}){const r=new k(e.target.x,e.target.y,e.target.z);return new a(r,e.force,e.radius,void 0,Q(e.easing))}},scale:new class extends q{constructor(){super(...arguments),this.parameters={a:F(1),b:F(1),ease:M()}}make(e={}){return new B(e.a,e.b,Q(e.ease))}},randomDrift:new class extends q{constructor(){super(...arguments),this.parameters={drift:G([1,1,1]),delay:F(0),ease:M()}}make(e={}){return new f(e.drift.x,e.drift.y,e.drift.z,e.delay,void 0,Q(e.ease))}},rotate:new class extends q{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0]),ease:M()}}make(e={}){const{x:t,y:s,z:n}=e.rotation;return new h(r.degToRad(t),r.degToRad(s),r.degToRad(n),void 0,Q(e.ease))}},changeColor:new class extends q{constructor(){super(...arguments),this.parameters={a:H("#ffffff"),b:H("#ffffff"),ease:M()}}make(r={}){return new i(new e(r.a),new e(r.b),void 0,Q(r.ease))}},changeOpacity:new class extends q{constructor(){super(...arguments),this.parameters={a:F(1,0,1),b:F(0,0,1),ease:M()}}make(e={}){return new n(e.a,e.b,void 0,Q(e.ease))}},vortex:new class extends q{constructor(){super(...arguments),this.parameters={axis:G([0,1,0]),amount:F(1)}}make(e={}){return new O(e.axis,e.amount)}},moveTo:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,1,0]),ease:M()}}make(e={}){return new j(e.target.x,e.target.y,e.target.z,Q(e.ease))}},linearDamping:new class extends q{constructor(){super(...arguments),this.parameters={factor:F(.1,0,1)}}make(e={}){return new L(e.factor)}},followParent:new class extends q{constructor(){super(...arguments),this.parameters={speed:F(1)}}make(e={}){return new z(e.speed)}}};export const VfxInitializserLibrary=U;export const VfxInitializserLibraryKeys=Object.keys(VfxInitializserLibrary);export const VfxBehaviourLibrary=W;export const VfxBehaviourLibraryKeys=Object.keys(VfxBehaviourLibrary);
2
- /*
1
+ import{MathUtils as e,Vector2 as r,Vector3 as t}from"three";import{Alpha as s,Attraction as n,BoxZone as a,Color as o,ease as i,Force as c,Gravity as u,Life as m,LineZone as p,Mass as d,Position as l,RadialVelocity as w,RandomDrift as x,Repulsion as f,Rotate as h,Vector3D as y}from"@hology/nebula";import{AxisDirection as k,AxisPlane as g,Disperse as v,FollowParent as b,LinearDamping as z,MoveOverLife as L,OrientAlongVelocity as T,RotatePosition as j,Scale as R}from"./behaviours.js";import{AdditiveVelocity as V,InitialScale as B,InitialScaleComponents as C,RandomDirection as D,RandomRotation as I,RandomScale as O,Rotation as A}from"./initializsers.js";import{PointZone as K,SphereZone as P}from"./zones.js";import{WorldCollisionBehaviour as S}from"./vfx-collision-behaviour.js";import{Curve2 as Y}from"../../utils/curve.js";class q{build(e={}){const r=M(e,this.parameters);return this.make(r)}}class E{build(e={}){const r=M(e,this.parameters);return this.make(r)}}function F(e,r,t){return{type:"number",default:e,float:!0,min:r,max:t}}function G(e){return{type:"vec3",default:(new t).fromArray(e)}}function H(e){return{type:"color",default:e}}function J(){return{type:"curve",default:Y.linear()}}function M(e,r){const t={};for(let s in r)null==e[s]?t[s]=r[s].default:t[s]=e[s];return t}function N(e){return r=>e.getY(r)}const Q={lifetime:new class extends E{constructor(){super(...arguments),this.parameters={duration:F(1,0,1e5)}}make(e={}){return new m(e.duration)}},positionPoint:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position;return new l(new K(r,t,s))}},positionBox:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0]),dimensions:G([0,0,0])}}make(e={}){const{x:r,y:t,z:s}=e.position,{x:n,y:o,z:i}=e.dimensions;return new l(new a(r,t,s,n,o,i))}},positionSphere:new class extends E{constructor(){super(...arguments),this.parameters={position:G([0,0,0]),radius:F(1)}}make(e={}){const{x:r,y:t,z:s}=e.position;return new l(new P(r,t,s,e.radius))}},positionLine:new class extends E{constructor(){super(...arguments),this.parameters={a:G([0,0,0]),b:G([0,0,1])}}make(e={}){const{x:r,y:t,z:s}=e.a,{x:n,y:a,z:o}=e.b;return new l(new p(r,t,s,n,a,o))}},rotation:new class extends E{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0])}}make(e={}){const{x:r,y:s,z:n}=e.rotation;return new A(new t(r,s,n))}},randomRotation:new class extends E{constructor(){super(...arguments),this.parameters={}}make(e={}){return new I}},scale:new class extends E{constructor(){super(...arguments),this.parameters={scale:F(1)}}make(e={}){return new B(e.scale)}},scaleComponents:new class extends E{constructor(){super(...arguments),this.parameters={scale:G([1,1,1])}}make(e={}){return new C(e.scale)}},randomScale:new class extends E{constructor(){super(...arguments),this.parameters={min:F(1),max:F(1)}}make(e={}){return new O(e.min,e.max)}},mass:new class extends E{constructor(){super(...arguments),this.parameters={min:F(1)}}make(e={}){return new d(e.min)}},velocity:new class extends E{constructor(){super(...arguments),this.parameters={velocity:G([0,0,0])}}make(e={}){const{x:r,y:s,z:n}=e.velocity;return new V(new t(r,s,n))}},radialVelocity:new class extends E{constructor(){super(...arguments),this.parameters={speed:F(1),direction:G([0,1,0]),spread:F(0)}}make(e={}){return new w(e.speed,new y(e.direction.x,e.direction.y,e.direction.z),e.spread)}},randomDirection:new class extends E{constructor(){super(...arguments),this.parameters={speed:F(1)}}make(e={}){return new D(e.speed)}}},U={force:new class extends q{constructor(){super(...arguments),this.parameters={force:G([0,0,0]),ease:J()}}make(e={}){return new c(e.force.x,e.force.y,e.force.z,void 0,N(e.ease))}},gravity:new class extends q{constructor(){super(...arguments),this.parameters={gravity:F(8),easing:J()}}make(e={}){return new u(e.gravity,void 0,N(e.easing))}},repulsion:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,0,0]),force:F(1),radius:F(1),easing:J()}}make(e={}){const r=new y(e.target.x,e.target.y,e.target.z);return new f(r,e.force,e.radius,void 0,N(e.easing))}},attraction:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,0,0]),force:F(1),radius:F(1),easing:J()}}make(e={}){const r=new y(e.target.x,e.target.y,e.target.z);return new n(r,e.force,e.radius,void 0,N(e.easing))}},scale:new class extends q{constructor(){super(...arguments),this.parameters={a:F(1),b:F(1),ease:J()}}make(e={}){return new R(e.a,e.b,N(e.ease))}},randomDrift:new class extends q{constructor(){super(...arguments),this.parameters={drift:G([1,1,1]),delay:F(0),ease:J()}}make(e={}){return new x(e.drift.x,e.drift.y,e.drift.z,e.delay,void 0,N(e.ease))}},rotate:new class extends q{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0]),ease:J()}}make(r={}){const{x:t,y:s,z:n}=r.rotation;return new h(e.degToRad(t),e.degToRad(s),e.degToRad(n),void 0,N(r.ease))}},rotateAdd:new class extends q{constructor(){super(...arguments),this.parameters={rotation:G([0,0,0])}}make(r={}){const{x:t,y:s,z:n}=r.rotation,a=new h(e.degToRad(t),e.degToRad(s),e.degToRad(n),void 0);return a.rotationType="add",a}},changeColor:new class extends q{constructor(){super(...arguments),this.parameters={a:H("#ffffff"),b:H("#ffffff"),ease:J()}}make(e={}){return new o(e.a,e.b,void 0,N(e.ease))}},changeOpacity:new class extends q{constructor(){super(...arguments),this.parameters={a:F(1,0,1),b:F(0,0,1),ease:J()}}make(e={}){return new s(e.a,e.b,void 0,N(e.ease))}},vortex:new class extends q{constructor(){super(...arguments),this.parameters={axis:G([0,1,0]),amount:F(1)}}make(e={}){return new j(e.axis,e.amount)}},moveTo:new class extends q{constructor(){super(...arguments),this.parameters={target:G([0,1,0]),ease:J()}}make(e={}){return new L(e.target.x,e.target.y,e.target.z,N(e.ease))}},linearDamping:new class extends q{constructor(){super(...arguments),this.parameters={factor:F(.1,0,1)}}make(e={}){return new z(e.factor)}},followParent:new class extends q{constructor(){super(...arguments),this.parameters={speed:F(1)}}make(e={}){return new b(e.speed)}},worldCollision:new class extends q{constructor(){super(...arguments),this.parameters={friction:F(1,0,1),bounce:F(1,0,1),lifeLoss:F(0,0)}}make(e={}){return new S(null,e.bounce,e.friction,e.lifeLoss)}}};export const VfxInitializserLibrary=Q;export const VfxInitializserLibraryKeys=Object.keys(VfxInitializserLibrary);export const VfxBehaviourLibrary=U;export const VfxBehaviourLibraryKeys=Object.keys(VfxBehaviourLibrary);/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -1,7 +1,8 @@
1
+ import System from "@hology/nebula";
1
2
  import * as THREE from 'three';
2
3
  import { Object3D } from "three";
3
- import System from "three-nebula";
4
- import { ViewController } from '../../gameplay/index.js';
4
+ import { NodeShaderMaterial } from "three-shader-graph";
5
+ import { PhysicsSystem, ViewController } from '../../gameplay/index.js';
5
6
  import { Asset, VfxAsset } from '../../scene/model.js';
6
7
  export type VfxAssetProvider = {
7
8
  getAsset(assetId: string): Promise<Asset>;
@@ -9,11 +10,17 @@ export type VfxAssetProvider = {
9
10
  getMesh(assetId: string): Promise<THREE.Object3D>;
10
11
  getMaterial(assetId: string): Promise<THREE.Material>;
11
12
  };
12
- export declare function materializeVfx(asset: VfxAsset, target: Object3D, assetProvider: VfxAssetProvider, view: ViewController): Promise<{
13
+ export declare function materializeVfx(asset: VfxAsset, target: Object3D, assetProvider: VfxAssetProvider, view: ViewController, physics: PhysicsSystem): Promise<{
13
14
  container: THREE.Object3D<THREE.Object3DEventMap>;
14
15
  system: System;
15
16
  dispose: () => void;
16
17
  }>;
18
+ export declare class SpriteNodeShaderMaterial extends NodeShaderMaterial {
19
+ get color(): THREE.ColorRepresentation;
20
+ set color(value: THREE.ColorRepresentation);
21
+ get rotation(): number;
22
+ set rotation(value: number);
23
+ }
17
24
  export declare class EmitterPool<T> {
18
25
  private creator;
19
26
  instances: T[];
@@ -30,3 +37,4 @@ export declare class EmitterPool<T> {
30
37
  release(instance: T): void;
31
38
  dispose(): void;
32
39
  }
40
+ //# sourceMappingURL=vfx-materializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-materializer.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-materializer.ts"],"names":[],"mappings":"AAAA,OAAO,MAAiE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAmD,kBAAkB,EAA4T,MAAM,oBAAoB,CAAC;AAEna,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,KAAK,EAAuB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAgB5E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;IACzC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACnD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACjD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;CACtD,CAAA;AAGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa;;;;GAyDpJ;AA2YD,qBAAa,wBAAyB,SAAQ,kBAAkB;IAE9D,IAAI,KAAK,IAGQ,KAAK,CAAC,mBAAmB,CADzC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAEzC;IACD,IAAI,QAAQ,IAGQ,MAAM,CADzB;IACD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEzB;CACF;AAgQD,qBAAa,WAAW,CAAC,CAAC;IAIZ,OAAO,CAAC,OAAO;IAF3B,SAAS,EAAE,CAAC,EAAE,CAAK;gBAEC,OAAO,EAAE,MAAM,CAAC;IAEpC;;;OAGG;IACH,GAAG,IAAI,CAAC;IAQR;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMnB,OAAO;CAGR"}
@@ -1,5 +1,4 @@
1
- import*as t from"three";import{Object3D as e}from"three";import i,{Behaviour as n,Body as o,Emitter as s,Rate as r}from"three-nebula";import{AttributeVec3Node as a,AttributeVec4Node as l,NodeShaderMaterial as c,RgbNode as m,UniformVec3Node as u,Vec3ExpressionNode as p,Vec4Node as d,attributeFloat as h,attributeVec3 as f,attributeVec4 as g,attributes as w,float as y,glslFunction as A,lambertMaterial as v,log as x,pow as E,rgba as b,saturate as P,textureSampler2d as M,transformed as I,uniforms as R,varyingAttributes as z,varyingVec3 as V,varyingVec4 as B}from"three-shader-graph";import{prepareShapeParameters as T}from"../../scene/materializer.js";import{ShapeLibrary as S}from"../../scene/objects/shapes.js";import{fragmentLinearEyeDepth as j,linearEyeDepth as k}from"../../shader-nodes/depth.js";import{particleEnergyUniformName as C,particleVelcoityUniformName as F}from"../../shader-nodes/particle.js";import{DefaultInitializer as Q}from"./initializsers.js";import{DelayRate as U,OnceRate as H}from"./rates.js";import{ThreeBlendingMode as D}from"./vfx-asset.js";import{VfxBehaviourLibrary as G,VfxInitializserLibrary as J}from"./vfx-defs.js";import{MultiRenderer as q}from"./vfx-renderers.js";import{StretchedSprite as W}from"./stretched-sprite.js";export async function materializeVfx(n,o,s,r){let a=o;for(;null!=a.parent;)a=a.parent;const l=new e;l.name="particle system local",o.add(l);const c=new e;c.name="particle system world",a.add(c);const m=new q(c,l,t,r),u=new i;return(await Promise.all(n.vfx.emitters.map((async t=>{const e=await L(t,s,u);return e.setParentRecursive(u),e.emit()})))).forEach((t=>u.addEmitter(t))),u.addRenderer(m).emit({onEnd:()=>{console.log("ended")}}),{container:c,system:u,dispose:()=>{c.removeFromParent(),l.removeFromParent(),m.dispose()}}}async function L(i,n,s){const m=function(t){let e;switch(t.rate.type){case"continuous":e=new U(t.rate.delay??0,t.rate.count,t.rate.time);break;case"once":e=new H(t.rate.delay??0,t.rate.count);break;default:console.warn(`Failed to configure rate for emitter: ${JSON.stringify(t)}`),e=new r(0,1/0)}return e}(i);let C;switch(i.output.type){case"sprite":C=new o(await async function(e,i){const n=null!=e.texture?await i.getTexture(e.texture):N,o=M(n).sample(z.uv),s=new u("color").rgb,r=(new u("opacity").rgb,k.subtract(j).divide(k));let a=o.x;if("number"==typeof e.softness&&e.softness>0){const t=E(r,y(e.softness));a=a.multiply(t)}const l=A(d,{position:I.position,modelViewMatrix:R.modelViewMatrix},"\n vec2 center = vec2(0.5, 0.5);\n float rotation = 0.0;\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n // Using scale form instance matrix instead of modelMatrix\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n // This times 2 on scale seem to make it appear like when using regular sprites. \n // Not sure if this is correct though.\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * (scale);\n\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\n mvPosition.xy += rotatedPosition;\n return projectionMatrix * mvPosition;\n ");var c=new K({color:b(s,a).multiply(o),transparent:!0,position:l,uniforms:{color:{value:new t.Color(e.color)}}});c.blending=D[e.blendingMode]??t.NormalBlending;const m=new t.Mesh(new t.PlaneGeometry(1,1),c);return m.name="sprite",m}(i.output,n));break;case"stretchedSprite":C=new o(await async function(e,i){const n=null!=e.texture?await i.getTexture(e.texture):N,o=M(n).sample(z.uv),s=B(new l("color")),r=s.rgb;let a=s.w;if("number"==typeof e.softness&&e.softness>0){const t=k.subtract(j).divide(x(k)),i=E(t,y(e.softness));a=P(a.multiply(i))}const c=A(d,{position:w.position,offset:g("offset"),modelViewMatrix:R.modelViewMatrix,velocity:g("velocity"),size:f("size"),rotation:h("rotation")},"\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n\n vec4 mvPosition = modelViewMatrix * vec4( offset , 1.0 );\n vec3 viewVelocity = normalMatrix * velocity.xyz;\n float vlength = length(viewVelocity); \n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, viewVelocity)) * avgSize; \n mvPosition.xyz -= (position.x + 0.5) * viewVelocity * (1.0 + lengthFactor / vlength) * avgSize;\n return projectionMatrix * mvPosition;\n ");var m=new K({color:b(r,a).multiply(o),transparent:!0,position:c,uniforms:{}});m.blending=D[e.blendingMode]??t.NormalBlending;const u=new W(new t.PlaneGeometry(1,1),m);return u.scaleFactor=e.scale,u}(i.output,n));break;case"shape":C=new o(await async function(i,n){const o=S[i.shape];if(null==o)return console.error(`No shape with type ${i.shape}`),new e;const s=T(i.params??{}),r=o.geometry(s),l=null!=i.material?await n.getMaterial(i.material):function(){const t=V(new p("instanceColor")).rgb,e=V(new a("particleData")).x;return new c({color:v({color:t}).rgb.rgba(e),transparent:!0})}();return new t.Mesh(r,l)}(i.output,n));break;case"mesh":C=new o(await async function(i,n){if(null==i.assetId)return console.warn("Can't use mesh as particle without asset id"),new e;const o=await n.getMesh(i.assetId),s=await n.getAsset(i.assetId),r=[];if(null!=s.materialAssignments)for(const e of s.materialAssignments)o.traverse((i=>{i instanceof t.Mesh&&i.material instanceof t.Material&&i.material.color instanceof t.Color&&(i.material.name!=e.name&&null!=e.name||"#"+i.material.color.getHexString()!==e.color||r.push(n.getMaterial(e.materialId).then((t=>i.material=t))))}));return await Promise.all(r),o.traverse((t=>{})),o}(i.output,n));break;case"trail":C=new o({type:"trail",taper:i.output.taper,headGeometry:null,dragTexture:!1,color:i.output.color,colorEnd:i.output.colorEnd,length:i.output.length,opacityStart:i.output.opacityStart,opacityEnd:i.output.opacityEnd,bloom:i.output.bloom});break;default:console.error("Failed to create particly system body: "+JSON.stringify(i))}const F=new X;F.parent=s,F.setRate(m),F._space=i.output.space;const q=await Promise.all(i.initializers.filter((t=>null!=J[t.type])).map((async t=>{const e=J[t.type],i=await T(t.params??{});return e.build(i)})));q.push(C,new Q),F.addInitializers(q);const Y=await Promise.all(i.behaviours.filter((t=>null!=G[t.type])).map((async t=>{const e=G[t.type],i=await T(t.params??{});return e.build(i)})));Y.push(new O),F.addBehaviours(Y);for(const t of i.children){const e=await L(t,n,s),i=new EmitterPool((()=>{const t=e.clone();return t.onExpired=()=>{const e=F.childEmitters.findIndex((e=>e.id===t.id));-1!=e&&F.childEmitters.splice(e,1),i.release(t)},t})),o=F.eventDispatcher,r=new Map;F.bindEmitterEvent=!0,o.addEventListener("PARTICLE_DEAD",(t=>{const e=r.get(t.id);if(null!=e){const t=F.childEmitters.findIndex((t=>t.id===e.id));null!=t&&e.stopEmit()}})),o.addEventListener("PARTICLE_CREATED",(t=>{const e=i.get();e.age=0,e.totalEmitTimes=-1,e.particles.length=0,e.currentEmitTime=0,e.cID=0,F.childEmitters.push(e),r.set(t.id,e),e.parentParticle=t,e.emit()}))}return F}const N=(new t.TextureLoader).load("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJkSURBVHjaxJeJbusgEEW94S1L//83X18M2MSuLd2pbqc4wZGqRLrKBsyZhQHny7Jk73xVL8xpVhWrcmiB5lX+6GJ5YgQ2owbAm8oIwH1VgKZUmGcRqKGGPgtEQQAzGR8hQ59fAmhJHSAagigJ4E7GPWRXOYC6owAd1JM6wDQPADyMWUqZRMqmAojHp1Vn6EQQEgUNMJLnUjMyJsM49wygBkAPw9dVFwXRkncCIIW3GRgoTQUZn6HxCMAFEFd8TwEQ78X4rHbILoAUmeT+RFG4UhQ6MiIAE4W/UsYFjuVjAIa2nIY4q1R0GFtQWG3E84lqw2GO2QOoCKBVu0BAPgDSU0eUDjjQenNkV/AW/pWChhpMTelo1a64AOKM30vk18GzTHXCNtI/Knz3DFBgsUqBGIjTInXRY1yA9xkVoqW5tVq3pDR9A0hfF5BSARmVnh7RMDCaIdcNgbPBkgzn1Bu+SfIEFSpSBmkxyrMicb0fAEuCZrWnN89veA/4XcakrPcjBWzkTuLjlbfTQPOlBhz+HwkqqPXmPQDdrQItxE1moGof1S74j/8txk8EHhTQrAE8qlwfqS5yukm1x/rAJ9Jiaa6nyATqD78aUVBhFo8b1V4DdTXdCW+IxA1zB4JhiOhZMEWO1HqnvdoHZ4FAMIhV9REF8FiUm0jsYPEJx/Fm/N8OhH90HI9YRHesWbXXZwAShU8qThe7H8YAuJmw5yOd989uRINKRTJAhoF8jbqrHKfeCYdIISZfSq26bk/K+yO3YvfKrVgiwQBHnwt8ynPB25+M8hceTt/ybPhnryJ78+tLgAEAuCFyiQgQB30AAAAASUVORK5CYII=");class K extends c{get color(){return this.uniforms.color.value}set color(e){this.uniforms.color.value=new t.Color(e)}}class O extends n{initialize(e){if(e.body instanceof t.Mesh){const t=e.body.material;t instanceof c&&(null!=t.uniforms[C]||null!=t.uniforms[F])&&(e.body.material=t.clone())}}mutate(e,i,n){if(this.energize(e,i),e.target instanceof t.Mesh){const t=e.target.material;t instanceof c&&(null!=t.uniforms[C]&&(t.uniforms[C].value=this.energy),null!=t.uniforms[F]&&(t.uniforms[F].value=e.velocity))}}}class X extends s{constructor(){super(...arguments),this.childEmitters=[],this.bindEmitterEvent=!1,this.onExpired=()=>{}}update(t){if(!this.isEmitting&&0===this.particles.length)return;this.age+=t,(this.dead||this.age>=this.life)&&this.destroy(),this.generate(t),this.integrate(t);let e=this.particles.length;for(;e--;){const t=this.particles[e];t.dead&&(this.parent&&this.parent.dispatch("PARTICLE_DEAD",t),this.bindEmitterEvent&&this.dispatch("PARTICLE_DEAD",t),this.parent.pool.expire(t.reset()),this.particles.splice(e,1))}if(this.updateEmitterBehaviours(t),this.isEmitting||0!==this.particles.length)for(const e of this.childEmitters)null!=e.parentParticle?e.position.copy(e.parentParticle.position):e.setPosition(this.position),e.update(t);else this.onExpired()}clone(){const t=new X;return t.setRate(this.rate.clone()),t.behaviours=this.behaviours,t.initializers=this.initializers,t._space=this._space,t.body=this.body,t.parent=this.parent,t}setParentRecursive(t){this.parent=t,this.childEmitters.forEach((e=>e.setParentRecursive(t)))}}export class EmitterPool{constructor(t){this.creator=t,this.instances=[]}get(){0==this.instances.length&&this.instances.push(this.creator());return this.instances.pop()}release(t){this.instances.push(t)}dispose(){this.instances.length=0}}
2
- /*
1
+ import e,{Behaviour as t,Body as i,Emitter as n,Rate as s}from"@hology/nebula";import*as o from"three";import{Object3D as r}from"three";import{AttributeVec3Node as a,AttributeVec4Node as l,NodeShaderMaterial as c,RgbNode as m,UniformFloatNode as p,UniformVec3Node as u,Vec3ExpressionNode as h,Vec4Node as d,attributeFloat as f,attributeVec3 as y,attributeVec4 as g,attributes as w,float as v,glslFunction as A,lambertMaterial as x,log as E,pow as b,rgb as M,rgba as P,saturate as I,standardMaterial as S,textureSampler2d as R,transformed as C,uniforms as B,varying as k,varyingAttributes as z,varyingVec3 as T,varyingVec4 as V}from"three-shader-graph";import{prepareShapeParameters as j}from"../../scene/materializer.js";import{SerializedParamType as D}from"../../scene/model.js";import{ShapeLibrary as F}from"../../scene/objects/shapes.js";import{fragmentLinearEyeDepth as Q,linearEyeDepth as U}from"../../shader-nodes/depth.js";import{particleEnergyUniformName as L,particleTimeUniformName as H,particleUniforms as q,particleVelcoityUniformName as G}from"../../shader-nodes/particle.js";import{sampleFlipbook as J}from"../../shader-nodes/texture-sequence.js";import{DefaultInitializer as N}from"./initializsers.js";import{DelayRate as W,OnceRate as O}from"./rates.js";import{StretchedSprite as K}from"./stretched-sprite.js";import{ThreeBlendingMode as X}from"./vfx-asset.js";import{VfxBehaviourLibrary as Y,VfxInitializserLibrary as Z}from"./vfx-defs.js";import{MultiRenderer as _}from"./vfx-renderers.js";import{WorldCollisionBehaviour as $}from"./vfx-collision-behaviour.js";export async function materializeVfx(t,i,n,s,a){let l=i;for(;null!=l.parent;)l=l.parent;const c=new r;c.name="particle system local",i.add(c);const m=new r;m.name="particle system world",l.add(m);const p=new _(m,c,o,s),u=new e;return(await Promise.all(t.vfx.emitters.map((async e=>{const t=await ee(e,n,u,a);return t.setParentRecursive(u),t.emit()})))).forEach((e=>u.addEmitter(e))),u.addRenderer(p).emit({onEnd:()=>{}}),{container:m,system:u,dispose:()=>{m.removeFromParent(),c.removeFromParent(),p.dispose()}}}async function ee(e,t,n,m){const T=function(e){let t;switch(e.rate.type){case"continuous":t=new W(e.rate.delay??0,e.rate.count,e.rate.time);break;case"once":t=new O(e.rate.delay??0,e.rate.count);break;default:console.warn(`Failed to configure rate for emitter: ${JSON.stringify(e)}`),t=new s(0,1/0)}return t}(e);let L;switch(e.output.type){case"sprite":L=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):te,n=R(i);let s=n.sample(z.uv);e.flipbook?.enabled&&(s=J(n,w.uv,e.flipbook.columns,e.flipbook.rows,q.time,e.flipbook.fps,e.flipbook.mode));const r=new p("rotation",0),a=new u("color").rgb,l=(new u("opacity").rgb,U.subtract(Q).divide(U));let c=s.x;if("number"==typeof e.softness&&e.softness>0){const t=b(l,v(e.softness));c=c.multiply(t)}const m=A(d,{position:C.position,modelViewMatrix:B.modelViewMatrix,rotation:r},"\n vec2 center = vec2(0.5, 0.5);\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n // Using scale form instance matrix instead of modelMatrix\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n // This times 2 on scale seem to make it appear like when using regular sprites. \n // Not sure if this is correct though.\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * (scale);\n\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\n mvPosition.xy += rotatedPosition;\n return projectionMatrix * mvPosition;\n ");var h=new SpriteNodeShaderMaterial({color:P(a,c).multiply(s),transparent:!0,position:m,uniforms:{color:{value:new o.Color(e.color)}}});h.blending=X[e.blendingMode]??o.NormalBlending;const f=new o.Mesh(new o.PlaneGeometry(1,1),h);return f.name="sprite",f}(e.output,t));break;case"stretchedSprite":L=new i(await async function(e,t){const i=null!=e.texture?await t.getTexture(e.texture):te,n=R(i).sample(z.uv),s=V(new l("color")),r=s.rgb;let a=s.w;if("number"==typeof e.softness&&e.softness>0){const t=U.subtract(Q).divide(E(U)),i=b(t,v(e.softness));a=I(a.multiply(i))}const c=A(d,{position:w.position,offset:g("offset"),modelViewMatrix:B.modelViewMatrix,velocity:g("velocity"),size:y("size"),rotation:f("rotation")},"\n float lengthFactor = velocity.w;\n float avgSize = (size.x + size.y) * 0.5;\n\n vec4 mvPosition = modelViewMatrix * vec4( offset , 1.0 );\n vec3 viewVelocity = normalMatrix * velocity.xyz;\n float vlength = length(viewVelocity); \n mvPosition.xyz += position.y * normalize(cross(mvPosition.xyz, viewVelocity)) * avgSize; \n mvPosition.xyz -= (position.x + 0.5) * viewVelocity * (1.0 + lengthFactor / vlength) * avgSize;\n return projectionMatrix * mvPosition;\n ");var m=new SpriteNodeShaderMaterial({color:P(r,a).multiply(n),transparent:!0,position:c,uniforms:{}});m.blending=X[e.blendingMode]??o.NormalBlending;const p=new K(new o.PlaneGeometry(1,1),m);return p.scaleFactor=e.scale,p}(e.output,t));break;case"shape":L=new i(await async function(e,t){const i=F[e.shape];if(null==i)return console.error(`No shape with type ${e.shape}`),new r;const n=j(e.params??{}),s=i.geometry(n),l=null!=e.material?function(e){const t=k(new h("instanceColor")).rgb,i=k(new a("particleData")).x;let n;if(e instanceof o.MeshStandardMaterial||e instanceof o.MeshLambertMaterial||e instanceof o.MeshBasicMaterial){let s=t.multiply(M(e.color));null!=e.map&&(s=s.multiply(R(e.map).sample(z.uv).rgb)),e instanceof o.MeshStandardMaterial?n=new c({color:S({color:s,emissive:M(e.emissive),emissiveIntensity:v(e.emissiveIntensity),roughness:e.roughness,metalness:e.metalness}).rgb.rgba(1),transparent:e.transparent}):e instanceof o.MeshLambertMaterial?n=new c({color:x({color:s}).rgb.rgba(i),transparent:e.transparent}):e instanceof o.MeshBasicMaterial&&(n=new c({color:s,transparent:e.transparent}))}null!=n&&(!0===e.userData?.hasBloom&&null!=n&&(n.userData.hasBloom=!0),n.side=e.side,n.transparent=e.transparent);return n??e}(await t.getMaterial(e.material)):function(){const e=k(new h("instanceColor")).rgb,t=k(new a("particleData")).x;return new c({color:x({color:e}).rgb.rgba(t),transparent:!0})}();return new o.Mesh(s,l)}(e.output,t));break;case"mesh":L=new i(await async function(e,t){if(null==e.assetId)return console.warn("Can't use mesh as particle without asset id"),new r;const i=await t.getMesh(e.assetId),n=await t.getAsset(e.assetId),s=[];if(null!=n.materialAssignments)for(const e of n.materialAssignments)i.traverse((i=>{i instanceof o.Mesh&&i.material instanceof o.Material&&i.material.color instanceof o.Color&&(i.material.name!=e.name&&null!=e.name||"#"+i.material.color.getHexString()!==e.color||s.push(t.getMaterial(e.materialId).then((e=>i.material=e))))}));return await Promise.all(s),i.traverse((e=>{})),i}(e.output,t));break;case"trail":L=new i({type:"trail",taper:e.output.taper,headGeometry:null,dragTexture:!1,color:e.output.color,colorEnd:e.output.colorEnd,length:e.output.length,opacityStart:e.output.opacityStart,opacityEnd:e.output.opacityEnd,bloom:e.output.bloom});break;default:console.error("Failed to create particly system body: "+JSON.stringify(e))}const H=new ne;H.parent=n,H.setRate(T),H._space=e.output.space;const G=await Promise.all(e.initializers.filter((e=>null!=Z[e.type])).map((async e=>{const t=Z[e.type],i=await j(e.params??{});return t.build(i)})));G.push(L,new N),H.addInitializers(G);const _=await Promise.all(e.behaviours.filter((e=>null!=Y[e.type])).map((async e=>{const t=Y[e.type];for(const[i,n]of Object.entries(e.params))t.parameters&&null!=t.parameters[i]&&"curve"===t.parameters[i].type&&n.type!==D.Curve&&(n.type=D.Curve);const i=await j(e.params??{});return t.build(i)})).sort(((e,t)=>e instanceof $?1:0)));_.push(new ie);for(const e of _)e instanceof $&&(e.physics=m);H.addBehaviours(_);for(const i of e.children){const e=await ee(i,t,n,m),s=new EmitterPool((()=>{const t=e.clone();return t.onExpired=()=>{const e=H.childEmitters.findIndex((e=>e.id===t.id));-1!=e&&H.childEmitters.splice(e,1),s.release(t)},t})),o=H.eventDispatcher,r=new Map;H.bindEmitterEvent=!0,o.addEventListener("PARTICLE_DEAD",(e=>{const t=r.get(e.id);if(null!=t){const e=H.childEmitters.findIndex((e=>e.id===t.id));null!=e&&t.stopEmit()}}));let a="PARTICLE_CREATED";if("spawnEvent"in i)switch(i.spawnEvent){case"collision":a="PARTICLE_COLLISION";break;case"start":a="PARTICLE_CREATED"}o.addEventListener(a,(e=>{const t=s.get();t.age=0,t.totalEmitTimes=-1,t.particles.length=0,t.currentEmitTime=0,t.cID=0,t.eventDispatcher.removeAllEventListeners(),H.childEmitters.push(t),r.set(e.id,t),t.parentParticle=e,t.system=H.system,t.emit()}))}return H}const te=(new o.TextureLoader).load("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJkSURBVHjaxJeJbusgEEW94S1L//83X18M2MSuLd2pbqc4wZGqRLrKBsyZhQHny7Jk73xVL8xpVhWrcmiB5lX+6GJ5YgQ2owbAm8oIwH1VgKZUmGcRqKGGPgtEQQAzGR8hQ59fAmhJHSAagigJ4E7GPWRXOYC6owAd1JM6wDQPADyMWUqZRMqmAojHp1Vn6EQQEgUNMJLnUjMyJsM49wygBkAPw9dVFwXRkncCIIW3GRgoTQUZn6HxCMAFEFd8TwEQ78X4rHbILoAUmeT+RFG4UhQ6MiIAE4W/UsYFjuVjAIa2nIY4q1R0GFtQWG3E84lqw2GO2QOoCKBVu0BAPgDSU0eUDjjQenNkV/AW/pWChhpMTelo1a64AOKM30vk18GzTHXCNtI/Knz3DFBgsUqBGIjTInXRY1yA9xkVoqW5tVq3pDR9A0hfF5BSARmVnh7RMDCaIdcNgbPBkgzn1Bu+SfIEFSpSBmkxyrMicb0fAEuCZrWnN89veA/4XcakrPcjBWzkTuLjlbfTQPOlBhz+HwkqqPXmPQDdrQItxE1moGof1S74j/8txk8EHhTQrAE8qlwfqS5yukm1x/rAJ9Jiaa6nyATqD78aUVBhFo8b1V4DdTXdCW+IxA1zB4JhiOhZMEWO1HqnvdoHZ4FAMIhV9REF8FiUm0jsYPEJx/Fm/N8OhH90HI9YRHesWbXXZwAShU8qThe7H8YAuJmw5yOd989uRINKRTJAhoF8jbqrHKfeCYdIISZfSq26bk/K+yO3YvfKrVgiwQBHnwt8ynPB25+M8hceTt/ybPhnryJ78+tLgAEAuCFyiQgQB30AAAAASUVORK5CYII=");export class SpriteNodeShaderMaterial extends c{get color(){return this.uniforms.color.value}set color(e){this.uniforms.color.value=new o.Color(e)}get rotation(){return this.uniforms.rotation.value}set rotation(e){this.uniforms.rotation.value=e}}(new o.SpriteMaterial).rotation;class ie extends t{initialize(e){if(e.body instanceof o.Mesh){const t=e.body.material;t instanceof c&&(null!=t.uniforms[L]||null!=t.uniforms[H]||null!=t.uniforms[G])&&(e.body.material=t.clone())}}mutate(e,t,i){if(this.energize(e,t),e.target instanceof o.Mesh){const t=e.target.material;t instanceof c&&(null!=t.uniforms[L]&&(t.uniforms[L].value=this.energy),null!=t.uniforms[H]&&(t.uniforms[H].value=e.age),null!=t.uniforms[G]&&(t.uniforms[G].value=e.velocity))}}}class ne extends n{constructor(){super(...arguments),this.childEmitters=[],this.bindEmitterEvent=!1,this.onExpired=()=>{}}update(e){if(!this.isEmitting&&0===this.particles.length)return;this.age+=e,(this.dead||this.age>=this.life)&&this.destroy(),this.generate(e),this.integrate(e);let t=this.particles.length;for(;t--;){const e=this.particles[t];e.dead&&(this.system&&this.system.dispatch("PARTICLE_DEAD",e),this.bindEmitterEvent&&this.dispatch("PARTICLE_DEAD",e),this.system.pool.expire(e.reset()),this.particles.splice(t,1))}this.updateEmitterBehaviours(e),this.updateChildren(e),this.isEmitting||0!==this.particles.length||this.onExpired()}updateChildren(e){for(const t of this.childEmitters)null!=t.parentParticle?t.position.copy(t.parentParticle.position):t.setPosition(this.position),t.update(e)}clone(){const e=new ne;return e.setRate(this.rate.clone()),e.behaviours=this.behaviours,e.initializers=this.initializers,e._space=this._space,e.body=this.body,e.parent=this.parent,e.system=this.system,e}setParentRecursive(e){this.system=e,this.childEmitters.forEach((t=>t.setParentRecursive(e)))}}export class EmitterPool{constructor(e){this.creator=e,this.instances=[]}get(){0==this.instances.length&&this.instances.push(this.creator());return this.instances.pop()}release(e){this.instances.push(e)}dispose(){this.instances.length=0}}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -1,11 +1,2 @@
1
- import { VfxAsset } from 'scene/model';
2
- import * as THREE from 'three';
3
- import { Object3D } from 'three';
4
- import System from 'three-nebula';
5
- import { MeshRenderer, Rate } from 'three-nebula';
6
- export declare function materializeVfxOld(asset: VfxAsset, target: Object3D): {
7
- system: System;
8
- rate: Rate;
9
- renderer: MeshRenderer;
10
- dispose: () => THREE.Object3D<THREE.Object3DEventMap>;
11
- };
1
+ export {};
2
+ //# sourceMappingURL=vfx-old-materializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-old-materializer.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-old-materializer.ts"],"names":[],"mappings":""}
@@ -1,5 +1,4 @@
1
- import*as e from"three";import{Object3D as n}from"three";import t from"three-nebula";import{Body as r,BoxZone as a,Emitter as o,Force as i,Life as w,Mass as d,MeshRenderer as m,PointZone as s,Position as l,RadialVelocity as f,Radius as p,Rate as c,Rotate as h,Scale as u,Span as v,Vector3D as x,ease as M}from"three-nebula";import{RotatePosition as b}from"./behaviours";import{OnceRate as E}from"./rates";export function materializeVfxOld(I,y){let z=y;if(!0!==I.vfx.localSpace)for(;null!=z.parent;)z=z.parent;const B=new n;B.name="particle system",z.add(B);const O=new m(B,e),P=new e.Mesh(new e.BoxGeometry(.3,.3,.3),new e.MeshStandardMaterial({color:16777215})),R=new c(new v(3,9),new v(.02,.15)),L=new o,S=new t;L.setLife(4).setRate(R).addInitializers([new d(1),new p(1),new w(1),new r(P),new l(new a(.5)),new f(10,new x(0,0,1),30)]).addBehaviours([new b(new e.Vector3(0,0,1),4),new i(0,0,.1),new h("random",2.5*-Math.PI,2*Math.PI,1,M.easeOutCubic),new u(1,.2)]).emit();const V=new E(0),g=(new o).setLife(5).addInitializers([new d(1),new p(1),new w(3),new r(P),new l(new s(0,0,0))]).addBehaviours([new u(4,6,void 0,M.easeOutExpo)]).setRate(V).emit();return V.nextTime=0,S.addEmitter(L).addEmitter(g).addRenderer(O).emit({onEnd:()=>{console.log("ended")}}),{system:S,rate:R,renderer:O,dispose:()=>B.removeFromParent()}}
2
- /*
1
+ export{};/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -38,3 +38,4 @@ export declare class VfxPool<T extends VfxActor = VfxActor> {
38
38
  release(instance: T): void;
39
39
  dispose(): void;
40
40
  }
41
+ //# sourceMappingURL=vfx-param.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-param.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-param.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,SAAS,EAAS,MAAM,yBAAyB,CAAC;AAG3D,qBAAa,YAAY;IAEX,OAAO,CAAC,aAAa;IAAiB,OAAO,CAAC,KAAK;gBAA3C,aAAa,EAAE,aAAa,EAAU,KAAK,EAAE,QAAQ;IAEzE;;;;;;OAMG;IACG,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;IAW3D;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;CAI1D;AAqBD,qBAAa,OAAO,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IAIpC,OAAO,CAAC,OAAO;IAF3B,SAAS,EAAE,CAAC,EAAE,CAAK;gBAEC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC;IAE7C;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC;IASvB;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC;IAMnB,OAAO;CAGR"}
@@ -1,5 +1,4 @@
1
- import{VfxActor as t}from"./vfx-actor.js";import{BaseActor as s}from"../../gameplay/index.js";export class VisualEffect{constructor(t,s){this.actorProvider=t,this.asset=s}async create(e){const a=await this.actorProvider.create(t);return e instanceof s?e.object.add(a.object):e.add(a.object),await a.fromAsset(this.asset),a}createPool(t){return new VfxPool((()=>this.create(t)))}}export class VfxPool{constructor(t){this.creator=t,this.instances=[]}async get(){0==this.instances.length&&this.instances.push(await this.creator());const t=this.instances.shift();return t.restart(),t}release(t){this.instances.push(t)}dispose(){this.instances.length=0}}
2
- /*
1
+ import{VfxActor as t}from"./vfx-actor.js";import{BaseActor as s}from"../../gameplay/index.js";export class VisualEffect{constructor(t,s){this.actorProvider=t,this.asset=s}async create(e){const a=await this.actorProvider.create(t);return e instanceof s?e.object.add(a.object):e.add(a.object),await a.fromAsset(this.asset),a}createPool(t){return new VfxPool((()=>this.create(t)))}}export class VfxPool{constructor(t){this.creator=t,this.instances=[]}async get(){0==this.instances.length&&this.instances.push(await this.creator());const t=this.instances.shift();return t.restart(),t}release(t){this.instances.push(t)}dispose(){this.instances.length=0}}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -1,6 +1,6 @@
1
+ import { CustomRenderer, MeshRenderer, Particle } from '@hology/nebula';
1
2
  import * as THREE from 'three';
2
3
  import { Object3D } from 'three';
3
- import { CustomRenderer, MeshRenderer, Particle } from 'three-nebula';
4
4
  import { ViewController } from '../../gameplay';
5
5
  export declare class MultiRenderer extends CustomRenderer {
6
6
  private worldContainer;
@@ -74,6 +74,7 @@ export declare class InstancedRenderer extends MeshRenderer {
74
74
  dispose(): void;
75
75
  onSystemUpdate(): void;
76
76
  private meshes;
77
+ private calcMaxCount;
77
78
  onParticleCreated(particle: Particle & {
78
79
  body?: MeshRenderer['_body'];
79
80
  target: any;
@@ -89,3 +90,4 @@ export declare class InstancedRenderer extends MeshRenderer {
89
90
  */
90
91
  declare function sortInstancedMeshByDistance(mesh: InstancedMeshInfo, camera: THREE.Camera): void;
91
92
  export { sortInstancedMeshByDistance };
93
+ //# sourceMappingURL=vfx-renderers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-renderers.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-renderers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAQ,QAAQ,EAA4B,MAAM,gBAAgB,CAAA;AACvG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAA4B,QAAQ,EAAE,MAAM,OAAO,CAAA;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAS/C,qBAAa,aAAc,SAAQ,cAAc;IAInC,OAAO,CAAC,cAAc;IAAY,OAAO,CAAC,cAAc;IAAY,OAAO,CAAC,KAAK;IAAgB,OAAO,CAAC,IAAI;IAHzH,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;gBAEP,cAAc,EAAE,QAAQ,EAAU,cAAc,EAAE,QAAQ,EAAU,KAAK,EAAE,OAAO,KAAK,EAAU,IAAI,EAAE,cAAc;IAMzI,cAAc;IASd,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI3C,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI1C,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAOxC,OAAO,CAAC,WAAW;IAwDnB,OAAO;CAYR;AAED,MAAM,MAAM,gBAAgB,GAAG,aAAa,CAAA;AAE5C,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,CAAC,EAAE,KAAK,CAAC,cAAc,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,KAAK,CAAC,cAAc,CAAA;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAGhB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAElB,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO;IAIP,cAAc,IAAI,IAAI;IAMtB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ;IAqEpC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ;IA6BnC,cAAc,CAAC,QAAQ,EAAE,QAAQ;CAYlC;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO;IACP,KAAK,CAAC,QAAQ,KAAA;IAqBd,MAAM,CAAC,QAAQ,KAAA;IAKf,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG;QAAC,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC,IAAI,GAAC,QAAQ,CAAA;KAAC;IAmBlG,gBAAgB,CAAC,QAAQ,KAAA;IAoDzB,cAAc,CAAC,QAAQ,KAAA;CAWxB;AAID,qBAAa,gCAAiC,SAAQ,YAAY;IAEJ,OAAO,CAAC,IAAI;gBAA5D,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,KAAK,EAAU,IAAI,EAAE,cAAc;IAGxF,OAAO;IAIP,cAAc;IAoFd,OAAO,CAAC,MAAM,CAAiB;IAE/B,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG;QAAC,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAC;IA6ElF,gBAAgB,CAAC,QAAQ,KAAA;IAIzB,cAAc,CAAC,QAAQ,KAAA;CASxB;AAOD,KAAK,iBAAiB,GAAG;IAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAC,CAAA;AAEpI,qBAAa,iBAAkB,SAAQ,YAAY;IAEW,OAAO,CAAC,IAAI;gBAA5D,SAAS,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,KAAK,EAAU,IAAI,EAAE,cAAc;IAGxF,OAAO;IAIP,cAAc;IAUd,OAAO,CAAC,MAAM,CAA0B;IAExC,OAAO,CAAC,YAAY;IAWpB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG;QAAC,IAAI,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;QAAC,MAAM,EAAE,GAAG,CAAA;KAAC;IAmElF,gBAAgB,CAAC,QAAQ,KAAA;IAkCzB,cAAc,CAAC,QAAQ,KAAA;CAcxB;AA+CD;;;;;GAKG;AACH,iBAAS,2BAA2B,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAqExF;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAA"}
@@ -1,5 +1,4 @@
1
- import*as e from"three";import{InstancedBufferAttribute as t,Object3D as r}from"three";import{CustomRenderer as a,MeshRenderer as s,PUID as i}from"three-nebula";import{NodeShaderMaterial as o}from"three-shader-graph";import{StretchedSprite as n}from"./stretched-sprite.js";import{Trail as l}from"./trail-renderer.js";var c;!function(e){e[e.mesh=0]="mesh",e[e.instanced=1]="instanced",e[e.sprite=2]="sprite",e[e.stretchedBillboard=3]="stretchedBillboard",e[e.trail=4]="trail"}(c||(c={}));export class MultiRenderer extends a{constructor(e,t,r,a){super(),this.worldContainer=e,this.localContainer=t,this.three=r,this.view=a,this.localRenderers=[],this.worldRenderers=[]}onSystemUpdate(){for(const e of this.worldRenderers)e?.onSystemUpdate();for(const e of this.localRenderers)e?.onSystemUpdate()}onParticleCreated(e){this.getRenderer(e)?.onParticleCreated(e)}onParticleUpdate(e){this.getRenderer(e)?.onParticleUpdate(e)}onParticleDead(e){this.getRenderer(e)?.onParticleDead(e),e._renderer=null}getRenderer(t){if(t._renderer)return t._renderer;const r=t?.parent._space??"world",a="world"===r?this.worldContainer:this.localContainer,s="world"===r?this.worldRenderers:this.localRenderers;return"trail"===t.body.type?(null==s[c.trail]&&(s[c.trail]=new TrailRenderer(a,this.three)),t._renderer=s[c.trail]):t.body instanceof n?(null==s[c.stretchedBillboard]&&(s[c.stretchedBillboard]=new StretchedSpriteInstancedRenderer(a,this.three,this.view)),t._renderer=s[c.stretchedBillboard]):t.body instanceof e.Sprite||t.body instanceof e.Mesh&&"sprite"===t.body.name?(null==s[c.sprite]&&(s[c.sprite]=new CombinedRenderer(a,this.three)),t._renderer=s[c.sprite]):t.body instanceof e.Mesh&&0==t.body.children.length&&t.body.material instanceof o?(null==s[c.instanced]&&(s[c.instanced]=new InstancedRenderer(a,this.three,this.view)),t._renderer=s[c.instanced]):t.body instanceof e.Object3D?(null==s[c.mesh]&&(s[c.mesh]=new CombinedRenderer(a,this.three)),t._renderer=s[c.mesh]):void 0}dispose(){this.localRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()})),this.worldRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()}))}}export class TrailRenderer extends s{constructor(){super(...arguments),this.trails=[]}dispose(){}onSystemUpdate(){for(const e of this.trails)e.update()}onParticleCreated(t){const a=t.body,s=new l(this.container,!0),i=new r,o=l.createBaseMaterial();o.uniforms.taper.value=a.taper??!1;const n=new e.Color(a.color??0),c=new e.Color(a.colorEnd??0);o.uniforms.headColor.value.set(n.r,n.g,n.b,a.opacityStart??1),o.uniforms.tailColor.value.set(c.r,c.g,c.b,a.opacityEnd??1),a.bloom&&(o.userData.hasBloom=!0),s.initialize(o,Math.round(a.length??10),!1,0,null,i);const d=t.rotation;i.rotation.set(d.x,d.y,d.z);t.scale;s.activate(),this.trails.push(s),t.target=i}onParticleUpdate(e){const t=e.target;t.position.copy(e.position);e.velocity.clone().normalize();const r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const t=this.trails[r];if(e.useAlpha){t.material.uniforms.headColor.value.setW(e.alpha);t.material.uniforms.tailColor.value.setW(e.alpha)}}}onParticleDead(e){const t=e.target,r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const e=this.trails[r];e.removeFromParent(),e.mesh.removeFromParent(),t.removeFromParent(),this.trails.splice(r,1)}}}export class CombinedRenderer extends s{dispose(){}scale(t){const r=t.transform.initialScale;t.target instanceof e.Sprite?null!=r?t.target.scale.set(r.x*t.scale*t.radius,r.y*t.scale*t.radius,1):t.target.scale.set(t.scale*t.radius,t.scale*t.radius,1):null!=r?t.target.scale.set(r.x*t.scale,r.y*t.scale,r.z*t.scale):super.scale(t)}rotate(e){e.target.material.rotation=e.rotation.z}onParticleCreated(t){t.target||(t.target=this._targetPool.get(t.body),(t.useAlpha||t.useColor)&&(t.target instanceof e.Mesh||t.target instanceof e.Sprite&&t.target.material instanceof e.Material)&&(t.target.material.__puid=i.id(t.body.material),t.target.material=this._materialPool.get(t.target.material))),t.target&&t.target instanceof r&&(t.target.position.set(t.position.x,t.position.y,t.position.z),this.container.add(t.target))}onParticleUpdate(t){const{target:a,useAlpha:s,useColor:i,rotation:o}=t;if(a){if(a.position.copy(t.position),this.isThreeSprite(t)||a.rotation.set(o.x,o.y,o.z),this.scale(t),t.transform&&t.transform.orientAlongVelocity&&a instanceof r){const e=d.set(t.velocity.x,t.velocity.y,t.velocity.z).normalize(),r=a.getWorldDirection(m);r.applyAxisAngle(p,Math.PI/-2),h.setFromUnitVectors(r,e),a.quaternion.copy(h)}a.material instanceof e.Material&&(s&&(a.material.opacity=t.alpha,a.material.transparent=!0),i&&null!=a.material.color&&a.material.color.copy(t.color))}}onParticleDead(e){e.target&&(e.target.material&&(e.useAlpha||e.useColor)&&this._materialPool.expire(e.target.material),this._targetPool.expire(e.target),this.container.remove(e.target),e.target=null)}}export class StretchedSpriteInstancedRenderer extends s{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.geometry.dispose()))}onSystemUpdate(){for(const t of this.meshes){const r=t.mesh.geometry.getAttribute("offset"),a=t.mesh.geometry.getAttribute("size"),s=t.mesh.geometry.getAttribute("velocity"),i=t.mesh.geometry.getAttribute("rotation"),o=t.mesh.geometry.getAttribute("color");let n=0;for(const l of t.particles){if(null==l||l.dead)continue;if(l.useColor||l.color instanceof e.Color){const e=A.copy(l.color).getRGB(U);o.setXYZW(n,e.r,e.g,e.b,1),o.needsUpdate=!0}l.useAlpha&&(o.setW(n,l.alpha),o.needsUpdate=!0),"number"==typeof l.rotation?i.setX(n,l.rotation):i.setX(n,l.rotation.x);const t=l.position;if(r.setXYZ(n,t.x,t.y,t.z),"number"!=typeof l.scale)throw new Error("Particle scale is not a number");a.setXYZ(n,l.scale,l.scale,l.scale);let c=l.body.scaleFactor;0===c&&(c=.001);const d=1,m=l.velocity;s.setXYZW(n,m.x*c,m.y*c,m.z*c,d),n++}n>0&&(r.clearUpdateRanges(),r.addUpdateRange(0,3*n),r.needsUpdate=!0,a.clearUpdateRanges(),a.addUpdateRange(0,3*n),a.needsUpdate=!0,o.clearUpdateRanges(),o.addUpdateRange(0,4*n),o.needsUpdate=!0,s.clearUpdateRanges(),s.addUpdateRange(0,4*n),s.needsUpdate=!0,i.clearUpdateRanges(),i.addUpdateRange(0,n),i.needsUpdate=!0)}}onParticleCreated(r){if(r.body instanceof n&&null==r.target){const a=r.body;let s=this.meshes.find((e=>e.mesh.material.uuid===a.material.uuid));if(null==s){const i=R(r),o=new e.InstancedBufferGeometry;o.setIndex(a.geometry.getIndex()),o.setAttribute("position",a.geometry.getAttribute("position")),a.geometry.hasAttribute("normal")&&o.setAttribute("normal",a.geometry.getAttribute("normal")),o.setAttribute("uv",a.geometry.getAttribute("uv"));const n=new t(new Float32Array(3*i),3);n.setUsage(e.DynamicDrawUsage),o.setAttribute("offset",n);const l=new t(new Float32Array(4*i),4);l.setUsage(e.DynamicDrawUsage),o.setAttribute("color",l);const c=new t(new Float32Array(3*i),3);c.setUsage(e.DynamicDrawUsage),o.setAttribute("size",c);const d=new t(new Float32Array(4*i),4);d.setUsage(e.DynamicDrawUsage),o.setAttribute("velocity",d);const m=new t(new Float32Array(4*i),1);m.setUsage(e.DynamicDrawUsage),o.setAttribute("rotation",m),s={mesh:new e.Mesh(o,a.material),indices:new Float32Array(i),particles:[]},this.meshes.push(s),this.container.add(s.mesh)}let i=s.indices.findIndex((e=>0===e));i<0&&(i=function(e){let t=e[0],r=0;for(let a=1;a<e.length;a++)e[a]<t&&(t=e[a],r=a);return r}(s.indices)),s.indices[i]=performance.now(),r.target=i,s.particles[i]=r}}onParticleUpdate(e){}onParticleDead(e){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));r&&(r.particles[e.target]=null,r.indices[e.target]=0),e.target=null}}const d=new e.Vector3,m=new e.Vector3,h=new e.Quaternion,p=new e.Vector3(1,0,0);export class InstancedRenderer extends s{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.dispose()))}onSystemUpdate(){for(const e of this.meshes);}onParticleCreated(t){if(!(t.body instanceof e.Sprite)){if(null==t.target){const r=t.body;let a=this.meshes.find((e=>e.mesh.geometry.uuid===r.geometry.uuid&&e.mesh.material.uuid===r.material.uuid));if(null==a){const s=t.parent.rate,i=Math.min(Math.ceil(s.numPan.b/Math.min(Math.max(s.timePan.a,.01),1)),1e5);a={mesh:new e.InstancedMesh(r.geometry,r.material,i),indices:new Array(i).fill(null),particles:[]},a.mesh.setColorAt(0,A.copy(new e.Color(t.color))),a.mesh.instanceColor.needsUpdate=!0;const o=new Float32Array(3*i);f.makeScale(0,0,0);for(let e=0;e<i;e++)o[3*e+0]=1,o[3*e+1]=1,a.mesh.setMatrixAt(e,f);a.mesh.instanceMatrix.needsUpdate=!0,a.mesh.geometry.setAttribute("particleData",new e.InstancedBufferAttribute(o,3)),this.meshes.push(a),this.container.add(a.mesh)}let s=a.indices.findIndex((e=>null==e));s<0&&(s=a.indices.indexOf(Math.min(...a.indices))),a.indices[s]=performance.now(),t.target=s,a.particles[s]=t}if("number"==typeof t.target){t.transform.initialScale;const e=t.body;let r=this.meshes.find((t=>t.mesh.geometry.uuid===e.geometry.uuid&&t.mesh.material.uuid===e.material.uuid));g(t,r.mesh),t.useAlpha&&(r.mesh.material.transparent=!0)}}}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:a,rotation:s}=e;if(null==t)return;const i=e.body;let o=this.meshes.find((e=>e.mesh.geometry.uuid===i.geometry.uuid&&e.mesh.material.uuid===i.material.uuid));if(g(e,o.mesh),a&&(o.mesh.setColorAt(e.target,A.copy(e.color)),o.mesh.instanceColor.needsUpdate=!0),r){const t=o.mesh.geometry.getAttribute("particleData");t.setX(e.target,e.alpha),t.needsUpdate=!0}}onParticleDead(e){if(null!=e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));r.indices[e.target]=null,e.scale=0,g(e,r.mesh),r.mesh.instanceMatrix.needsUpdate=!0,e.target=null}}}const u=new r;function g(e,t){if(b.set(e.position.x,e.position.y,e.position.z),e.transform&&e.transform.orientAlongVelocity){const r=d.set(e.position.x-e.old.position.x,e.position.y-e.old.position.y,e.position.z-e.old.position.z).normalize();t.getMatrixAt(e.target,u.matrix);const a=u.getWorldDirection(w);a.applyAxisAngle(p,Math.PI/-2),y.setFromUnitVectors(a,r)}else x.set(e.rotation.x,e.rotation.y,e.rotation.z),y.setFromEuler(x);const r=e.transform.initialScale;null!=r?w.set(r.x*e.scale,r.y*e.scale,r.z*e.scale):w.set(e.scale,e.scale,e.scale),f.compose(b,y,w),t.setMatrixAt(e.target,f),t.instanceMatrix.needsUpdate=!0}const f=new e.Matrix4,y=new e.Quaternion,b=new e.Vector3,w=new e.Vector3,x=new e.Euler,A=new e.Color(0),U={r:0,g:0,b:0};function P(t,r){const a=t.mesh,s=a.count,i=[],o=a.geometry.getAttribute("particleData"),n=new e.Vector3;for(let l=0;l<s;l++){const s=new e.Matrix4,c=new e.Color;a.getMatrixAt(l,s),a.getColorAt(l,c);const d=o.getX(l);n.setFromMatrixPosition(s);const m=n.distanceTo(r.position);i.push({index:l,distance:m,matrix:s,particle:t.particles[l],color:c,pdx:d})}i.sort(((e,t)=>t.distance-e.distance));for(let e=0;e<s;e++){const t=i[e].matrix;null==i[e].particle&&t.makeScale(0,0,0),a.setMatrixAt(e,t),a.setColorAt(e,i[e].color),o.setX(e,i[e].pdx)}a.instanceMatrix.needsUpdate=!0}export{P as sortInstancedMeshByDistance};function R(e){const t=null!=e.parent.parentParticle?R(e.parent.parentParticle):1,r=e.parent.rate;return Math.min(Math.ceil(r.numPan.b/Math.min(Math.max(r.timePan.a,.01),1)),1e5)*e.life*t}
2
- /*
1
+ import{CustomRenderer as e,MeshRenderer as t,PUID as r}from"@hology/nebula";import*as a from"three";import{InstancedBufferAttribute as s,Object3D as i}from"three";import{NodeShaderMaterial as n}from"three-shader-graph";import{SpriteNodeShaderMaterial as o}from"../../effects/vfx/vfx-materializer";import{StretchedSprite as l}from"./stretched-sprite.js";import{Trail as c}from"./trail-renderer.js";var d;!function(e){e[e.mesh=0]="mesh",e[e.instanced=1]="instanced",e[e.sprite=2]="sprite",e[e.stretchedBillboard=3]="stretchedBillboard",e[e.trail=4]="trail"}(d||(d={}));export class MultiRenderer extends e{constructor(e,t,r,a){super(),this.worldContainer=e,this.localContainer=t,this.three=r,this.view=a,this.localRenderers=[],this.worldRenderers=[]}onSystemUpdate(){for(const e of this.worldRenderers)e?.onSystemUpdate();for(const e of this.localRenderers)e?.onSystemUpdate()}onParticleCreated(e){this.getRenderer(e)?.onParticleCreated(e)}onParticleUpdate(e){this.getRenderer(e)?.onParticleUpdate(e)}onParticleDead(e){this.getRenderer(e)?.onParticleDead(e),e._renderer=null}getRenderer(e){if(e._renderer)return e._renderer;const t=(null!=e?.parent?e?.parent._space:null)??"world",r="world"===t?this.worldContainer:this.localContainer,s="world"===t?this.worldRenderers:this.localRenderers;return"trail"===e.body.type?(null==s[d.trail]&&(s[d.trail]=new TrailRenderer(r,this.three)),e._renderer=s[d.trail]):e.body instanceof l?(null==s[d.stretchedBillboard]&&(s[d.stretchedBillboard]=new StretchedSpriteInstancedRenderer(r,this.three,this.view)),e._renderer=s[d.stretchedBillboard]):e.body instanceof a.Sprite||e.body instanceof a.Mesh&&"sprite"===e.body.name?(null==s[d.sprite]&&(s[d.sprite]=new CombinedRenderer(r,this.three)),e._renderer=s[d.sprite]):e.body instanceof a.Mesh&&0==e.body.children.length&&e.body.material instanceof n?(null==s[d.instanced]&&(s[d.instanced]=new InstancedRenderer(r,this.three,this.view)),e._renderer=s[d.instanced]):e.body instanceof a.Object3D?(null==s[d.mesh]&&(s[d.mesh]=new CombinedRenderer(r,this.three)),e._renderer=s[d.mesh]):void 0}dispose(){this.localRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()})),this.worldRenderers.forEach((e=>{e instanceof InstancedRenderer&&e.dispose()}))}}export class TrailRenderer extends t{constructor(){super(...arguments),this.trails=[]}dispose(){}onSystemUpdate(){for(const e of this.trails)e.update()}onParticleCreated(e){const t=e.body,r=new c(this.container,!0),s=new i,n=c.createBaseMaterial();n.uniforms.taper.value=t.taper??!1;const o=new a.Color(t.color??0),l=new a.Color(t.colorEnd??0);n.uniforms.headColor.value.set(o.r,o.g,o.b,t.opacityStart??1),n.uniforms.tailColor.value.set(l.r,l.g,l.b,t.opacityEnd??1),t.bloom&&(n.userData.hasBloom=!0),r.initialize(n,Math.round(t.length??10),!1,0,null,s);const d=e.rotation;s.rotation.set(d.x,d.y,d.z);e.scale;r.activate(),this.trails.push(r),e.target=s}onParticleUpdate(e){const t=e.target;t.position.copy(e.position);e.velocity.clone().normalize();const r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const t=this.trails[r];if(e.useAlpha){t.material.uniforms.headColor.value.setW(e.alpha);t.material.uniforms.tailColor.value.setW(e.alpha)}}}onParticleDead(e){const t=e.target,r=this.trails.findIndex((e=>e.targetObject.id===t.id));if(-1!=r){const e=this.trails[r];e.removeFromParent(),e.mesh.removeFromParent(),t.removeFromParent(),this.trails.splice(r,1)}}}export class CombinedRenderer extends t{dispose(){}scale(e){const t=e.transform.initialScale;e.target instanceof a.Sprite?null!=t?e.target.scale.set(t.x*e.scale*e.radius,t.y*e.scale*e.radius,1):e.target.scale.set(e.scale*e.radius,e.scale*e.radius,1):null!=t?e.target.scale.set(t.x*e.scale,t.y*e.scale,t.z*e.scale):super.scale(e)}rotate(e){e.target.material.rotation=e.rotation.z}onParticleCreated(e){e.target||(e.target=this._targetPool.get(e.body),(e.useAlpha||e.useColor)&&(e.target instanceof a.Mesh||e.target instanceof a.Sprite&&e.target.material instanceof a.Material)&&(e.target.material.__puid=r.id(e.body.material),e.target.material=this._materialPool.get(e.target.material))),e.target&&e.target instanceof i&&(e.target.position.set(e.position.x,e.position.y,e.position.z),this.container.add(e.target))}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:s,rotation:n}=e;if(t){if(t.position.copy(e.position),this.isThreeSprite(e)||(t instanceof a.Mesh&&t.material instanceof o?e.target.material.rotation=e.rotation.z:t.rotation.set(n.x,n.y,n.z)),this.scale(e),e.transform&&e.transform.orientAlongVelocity&&t instanceof i){const r=m.set(e.velocity.x,e.velocity.y,e.velocity.z).normalize(),a=t.getWorldDirection(h);a.applyAxisAngle(u,Math.PI/-2),p.setFromUnitVectors(a,r),t.quaternion.copy(p)}t.material instanceof a.Material&&(r&&(t.material.opacity=e.alpha,t.material.transparent=!0),s&&null!=t.material.color&&t.material.color.copy(e.color))}}onParticleDead(e){e.target&&(e.target.material&&(e.useAlpha||e.useColor)&&this._materialPool.expire(e.target.material),this._targetPool.expire(e.target),this.container.remove(e.target),e.target=null)}}export class StretchedSpriteInstancedRenderer extends t{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.geometry.dispose()))}onSystemUpdate(){for(const e of this.meshes){const t=e.mesh.geometry.getAttribute("offset"),r=e.mesh.geometry.getAttribute("size"),s=e.mesh.geometry.getAttribute("velocity"),i=e.mesh.geometry.getAttribute("rotation"),n=e.mesh.geometry.getAttribute("color");let o=0;for(const l of e.particles){if(null==l||l.dead)continue;if(l.useColor||l.color instanceof a.Color){const e=U.copy(l.color).getRGB(M);n.setXYZW(o,e.r,e.g,e.b,1),n.needsUpdate=!0}l.useAlpha&&(n.setW(o,l.alpha),n.needsUpdate=!0),"number"==typeof l.rotation?i.setX(o,l.rotation):i.setX(o,l.rotation.x);const e=l.position;if(t.setXYZ(o,e.x,e.y,e.z),"number"!=typeof l.scale)throw new Error("Particle scale is not a number");r.setXYZ(o,l.scale,l.scale,l.scale);let c=l.body.scaleFactor;0===c&&(c=.001);const d=1,m=l.velocity;s.setXYZW(o,m.x*c,m.y*c,m.z*c,d),o++}o>0&&(t.clearUpdateRanges(),t.addUpdateRange(0,3*o),t.needsUpdate=!0,r.clearUpdateRanges(),r.addUpdateRange(0,3*o),r.needsUpdate=!0,n.clearUpdateRanges(),n.addUpdateRange(0,4*o),n.needsUpdate=!0,s.clearUpdateRanges(),s.addUpdateRange(0,4*o),s.needsUpdate=!0,i.clearUpdateRanges(),i.addUpdateRange(0,o),i.needsUpdate=!0)}}onParticleCreated(e){if(e.body instanceof l&&null==e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));if(null==r){const i=P(e),n=new a.InstancedBufferGeometry;n.setIndex(t.geometry.getIndex()),n.setAttribute("position",t.geometry.getAttribute("position")),t.geometry.hasAttribute("normal")&&n.setAttribute("normal",t.geometry.getAttribute("normal")),n.setAttribute("uv",t.geometry.getAttribute("uv"));const o=new s(new Float32Array(3*i),3);o.setUsage(a.DynamicDrawUsage),n.setAttribute("offset",o);const l=new s(new Float32Array(4*i),4);l.setUsage(a.DynamicDrawUsage),n.setAttribute("color",l);const c=new s(new Float32Array(3*i),3);c.setUsage(a.DynamicDrawUsage),n.setAttribute("size",c);const d=new s(new Float32Array(4*i),4);d.setUsage(a.DynamicDrawUsage),n.setAttribute("velocity",d);const m=new s(new Float32Array(4*i),1);m.setUsage(a.DynamicDrawUsage),n.setAttribute("rotation",m),r={mesh:new a.Mesh(n,t.material),indices:new Float32Array(i),particles:[]},this.meshes.push(r),this.container.add(r.mesh)}let i=r.indices.findIndex((e=>0===e));i<0&&(i=function(e){let t=e[0],r=0;for(let a=1;a<e.length;a++)e[a]<t&&(t=e[a],r=a);return r}(r.indices)),r.indices[i]=performance.now(),e.target=i,r.particles[i]=e}}onParticleUpdate(e){}onParticleDead(e){const t=e.body;let r=this.meshes.find((e=>e.mesh.material.uuid===t.material.uuid));r&&(r.particles[e.target]=null,r.indices[e.target]=0),e.target=null}}const m=new a.Vector3,h=new a.Vector3,p=new a.Quaternion,u=new a.Vector3(1,0,0);export class InstancedRenderer extends t{constructor(e,t,r){super(e,t),this.view=r,this.meshes=[]}dispose(){this.meshes.forEach((e=>e.mesh.dispose()))}onSystemUpdate(){for(const e of this.meshes);}calcMaxCount(e){if(null==e)return 1;const t=e.parent.rate;return Math.min(t.numPan.b*Math.ceil(e.life/Math.min(Math.max(t.timePan.a,.01),1)),1e5)*this.calcMaxCount(e.parent.parentParticle)}onParticleCreated(e){if(!(e.body instanceof a.Sprite)){if(null==e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));if(null==r){const s=this.calcMaxCount(e);r={mesh:new a.InstancedMesh(t.geometry,t.material,s),indices:new Array(s).fill(null),particles:[]},r.mesh.setColorAt(0,U.setScalar(1)),r.mesh.instanceColor.needsUpdate=!0;const i=new Float32Array(3*s);y.makeScale(0,0,0);for(let e=0;e<s;e++)i[3*e+0]=1,i[3*e+1]=1,r.mesh.setMatrixAt(e,y);r.mesh.instanceMatrix.needsUpdate=!0,r.mesh.geometry.setAttribute("particleData",new a.InstancedBufferAttribute(i,3)),this.meshes.push(r),this.container.add(r.mesh)}let s=r.indices.findIndex((e=>null==e));s<0&&(s=r.indices.indexOf(Math.min(...r.indices))),r.indices[s]=performance.now(),e.target=s,r.particles[s]=e}if("number"==typeof e.target){e.transform.initialScale;const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));f(e,r.mesh),e.useAlpha&&(r.mesh.material.transparent=!0)}}}onParticleUpdate(e){const{target:t,useAlpha:r,useColor:a,rotation:s}=e;if(null==t)return;const i=e.body;let n=this.meshes.find((e=>e.mesh.geometry.uuid===i.geometry.uuid&&e.mesh.material.uuid===i.material.uuid));if(f(e,n.mesh),a&&(n.mesh.setColorAt(e.target,U.copy(e.color)),n.mesh.instanceColor.needsUpdate=!0),r){const t=n.mesh.geometry.getAttribute("particleData");t.setX(e.target,e.alpha),t.needsUpdate=!0}}onParticleDead(e){if(null!=e.target){const t=e.body;let r=this.meshes.find((e=>e.mesh.geometry.uuid===t.geometry.uuid&&e.mesh.material.uuid===t.material.uuid));r.indices[e.target]=null,e.scale=0,f(e,r.mesh),r.mesh.instanceMatrix.needsUpdate=!0,e.target=null}}}const g=new i;function f(e,t){if(w.set(e.position.x,e.position.y,e.position.z),e.transform&&e.transform.orientAlongVelocity){const r=m.set(e.position.x-e.old.position.x,e.position.y-e.old.position.y,e.position.z-e.old.position.z).normalize();t.getMatrixAt(e.target,g.matrix);const a=g.getWorldDirection(x);a.applyAxisAngle(u,Math.PI/-2),b.setFromUnitVectors(a,r)}else A.set(e.rotation.x,e.rotation.y,e.rotation.z),b.setFromEuler(A);const r=e.transform.initialScale;null!=r?x.set(r.x*e.scale,r.y*e.scale,r.z*e.scale):x.set(e.scale,e.scale,e.scale),y.compose(w,b,x),t.setMatrixAt(e.target,y),t.instanceMatrix.needsUpdate=!0}const y=new a.Matrix4,b=new a.Quaternion,w=new a.Vector3,x=new a.Vector3,A=new a.Euler,U=new a.Color(0),M={r:0,g:0,b:0};function C(e,t){const r=e.mesh,s=r.count,i=[],n=r.geometry.getAttribute("particleData"),o=new a.Vector3;for(let l=0;l<s;l++){const s=new a.Matrix4,c=new a.Color;r.getMatrixAt(l,s),r.getColorAt(l,c);const d=n.getX(l);o.setFromMatrixPosition(s);const m=o.distanceTo(t.position);i.push({index:l,distance:m,matrix:s,particle:e.particles[l],color:c,pdx:d})}i.sort(((e,t)=>t.distance-e.distance));for(let e=0;e<s;e++){const t=i[e].matrix;null==i[e].particle&&t.makeScale(0,0,0),r.setMatrixAt(e,t),r.setColorAt(e,i[e].color),n.setX(e,i[e].pdx)}r.instanceMatrix.needsUpdate=!0}export{C as sortInstancedMeshByDistance};function P(e){const t=null!=e.parent.parentParticle?P(e.parent.parentParticle):1,r=e.parent.rate;return Math.min(Math.ceil(r.numPan.b/Math.min(Math.max(r.timePan.a,.01),1)),1e5)*e.life*t}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -12,3 +12,4 @@ export declare class VfxService {
12
12
  createPoolFromAssetId(assetId: AssetId, parent?: Object3D | BaseActor): Promise<VfxPool>;
13
13
  createPoolFromAsset(asset: Asset, parent?: Object3D | BaseActor): Promise<VfxPool<VfxActor>>;
14
14
  }
15
+ //# sourceMappingURL=vfx-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vfx-service.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/vfx-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAA6B,SAAS,EAAmB,QAAQ,EAAuB,MAAM,gBAAgB,CAAA;AACrH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,qBACa,UAAU;IACrB,OAAO,CAAC,KAAK,CAA8B;IAE3C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,KAAK,CAAgB;IAEvB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,GAAC,SAA4B,GAAG,OAAO,CAAC,QAAQ,CAAC;IAKrG,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,QAAQ,GAAC,SAA4B;IAW3E,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,GAAE,QAAQ,GAAC,SAA4B,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxG,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,QAAQ,GAAC,SAA4B;CAStF"}
@@ -1,5 +1,4 @@
1
- import{__decorate as t}from"tslib";import{ActorFactory as s,AssetLoader as e,BaseActor as r,inject as o,Service as a,VfxActor as c,World as i}from"../../gameplay";import{VfxPool as n}from"./vfx-param";let h=class{constructor(){this.pools=new Map,this.actorFactory=o(s),this.assetService=o(e),this.world=o(i)}async createFromAssetId(t,s=this.world.scene){const e=await this.assetService.getAsset(t);return this.createFromAsset(e,s)}async createFromAsset(t,s=this.world.scene){const e=await this.actorFactory.create(c);return s instanceof r?s.object.add(e.object):s.add(e.object),await e.fromAsset(t),e}async createPoolFromAssetId(t,s=this.world.scene){const e=await this.assetService.getAsset(t);return this.createPoolFromAsset(e,s)}async createPoolFromAsset(t,s=this.world.scene){let e;return this.pools.has(t.id)||(e=new n((()=>this.createFromAsset(t,s))),this.pools.set(t.id,e)),e}};h=t([a()],h);export{h as VfxService};
2
- /*
1
+ import{__decorate as t}from"tslib";import{ActorFactory as s,AssetLoader as e,BaseActor as r,inject as o,Service as a,VfxActor as c,World as i}from"../../gameplay";import{VfxPool as n}from"./vfx-param";let h=class{constructor(){this.pools=new Map,this.actorFactory=o(s),this.assetService=o(e),this.world=o(i)}async createFromAssetId(t,s=this.world.scene){const e=await this.assetService.getAsset(t);return this.createFromAsset(e,s)}async createFromAsset(t,s=this.world.scene){const e=await this.actorFactory.create(c);return s instanceof r?s.object.add(e.object):s.add(e.object),await e.fromAsset(t),e}async createPoolFromAssetId(t,s=this.world.scene){const e=await this.assetService.getAsset(t);return this.createPoolFromAsset(e,s)}async createPoolFromAsset(t,s=this.world.scene){let e;return this.pools.has(t.id)||(e=new n((()=>this.createFromAsset(t,s))),this.pools.set(t.id,e)),e}};h=t([a()],h);export{h as VfxService};/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -1,4 +1,4 @@
1
- import { Vector3D } from "three-nebula";
1
+ import { Vector3D } from "@hology/nebula";
2
2
  declare const SphereZone_base: any;
3
3
  /**
4
4
  * A spherical zone for particles to be emitted within.
@@ -72,3 +72,4 @@ export declare class PointZone extends PointZone_base {
72
72
  getPosition(): any;
73
73
  }
74
74
  export {};
75
+ //# sourceMappingURL=zones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zones.d.ts","sourceRoot":"","sources":["../../../src/effects/vfx/zones.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;;AAM1C;;;GAGG;AACH,qBAAa,UAAW,SAAQ,eAAyC;IAc3D,OAAO,CAAC,CAAC;IAAU,OAAO,CAAC,CAAC;IAAU,OAAO,CAAC,CAAC;IAAU,OAAO,CAAC,MAAM;IAbnF,OAAO,CAAC,GAAG,CAAI;IACf,OAAO,CAAC,GAAG,CAAI;IACf,SAAS,CAAC,MAAM,EAAE,MAAM,CAAA;IACxB,SAAS,CAAC,MAAM,WAAiB;IACjC;;;;;;;;OAQG;gBACiB,CAAC,EAAE,MAAM,EAAU,CAAC,EAAE,MAAM,EAAU,CAAC,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM;IAI3F;;;;OAIG;IACH,YAAY;IAIZ;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,KAAA;IAMd;;;;OAIG;IACH,MAAM;IAGN,WAAW,iBAgBN;IACL,MAAM,0BAkBD;CACN;;AAKD,qBAAa,SAAU,SAAQ,cAAyC;IAa1D,OAAO,CAAC,CAAC;IAAU,OAAO,CAAC,CAAC;IAAU,OAAO,CAAC,CAAC;IAZ3D;;;;;;;;;;;OAWG;gBACiB,CAAC,EAAE,MAAM,EAAU,CAAC,EAAE,MAAM,EAAU,CAAC,EAAE,MAAM;IAInE;;;;OAIG;IACH,WAAW;IAIX,WAAW;CAOZ"}
@@ -1,5 +1,4 @@
1
- import{Vector3D as t}from"three-nebula";import{SphereZone as s}from"three-nebula";const o=Math.PI;export class SphereZone extends(Object.getPrototypeOf(s)){constructor(s,i,e,r){var h,n,a;super("SphereZone"),this.x=s,this.y=i,this.z=e,this.radius=r,this.the=0,this.phi=0,this.vector=new t,this.getPosition=(()=>{var t,s,i;return()=>(this.random=Math.random(),i=this.random*this.radius,t=o*Math.random(),s=2*o*Math.random(),this.vector.x=this.x+i*Math.sin(t)*Math.cos(s),this.vector.y=this.y+i*Math.sin(s)*Math.sin(t),this.vector.z=this.z+i*Math.cos(t),this.vector)})(),this._bound=(n=new t,a=new t,function(t){t.position.distanceTo(this)+t.radius>=this.radius&&(n.copy(t.position).sub(this).normalize(),a.copy(t.velocity),h=2*a.dot(n),t.velocity.sub(n.scalar(h)))})}isSphereZone(){return!0}_dead(t){t.position.distanceTo(this)-t.radius>this.radius&&(t.dead=!0)}_cross(){console.warn(`${this.constructor.name} does not support the _cross method`)}}export class PointZone extends(Object.getPrototypeOf(s)){constructor(t,s,o){super("PointZone"),this.x=t,this.y=s,this.z=o}isPointZone(){return!0}getPosition(){return this.vector.x=this.x,this.vector.y=this.y,this.vector.z=this.z,this.vector}}
2
- /*
1
+ import{Vector3D as t}from"@hology/nebula";import{SphereZone as s}from"@hology/nebula";const o=Math.PI;export class SphereZone extends(Object.getPrototypeOf(s)){constructor(s,i,e,r){var h,n,a;super("SphereZone"),this.x=s,this.y=i,this.z=e,this.radius=r,this.the=0,this.phi=0,this.vector=new t,this.getPosition=(()=>{var t,s,i;return()=>(this.random=Math.random(),i=this.random*this.radius,t=o*Math.random(),s=2*o*Math.random(),this.vector.x=this.x+i*Math.sin(t)*Math.cos(s),this.vector.y=this.y+i*Math.sin(s)*Math.sin(t),this.vector.z=this.z+i*Math.cos(t),this.vector)})(),this._bound=(n=new t,a=new t,function(t){t.position.distanceTo(this)+t.radius>=this.radius&&(n.copy(t.position).sub(this).normalize(),a.copy(t.velocity),h=2*a.dot(n),t.velocity.sub(n.multiplyScalar(h)))})}isSphereZone(){return!0}_dead(t){t.position.distanceTo(this)-t.radius>this.radius&&(t.dead=!0)}_cross(){console.warn(`${this.constructor.name} does not support the _cross method`)}}export class PointZone extends(Object.getPrototypeOf(s)){constructor(t,s,o){super("PointZone"),this.x=t,this.y=s,this.z=o}isPointZone(){return!0}getPosition(){return this.vector.x=this.x,this.vector.y=this.y,this.vector.z=this.z,this.vector}}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -3,3 +3,4 @@ export declare function Param(name?: string, obj?: {}): {
3
3
  (target: Function): void;
4
4
  (target: Object, propertyKey: string | symbol): void;
5
5
  };
6
+ //# sourceMappingURL=component-decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-decorators.d.ts","sourceRoot":"","sources":["../../src/game-component/component-decorators.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAG1B,wBAAgB,KAAK,CAAC,IAAI,GAAE,MAAa,EAAE,GAAG,GAAE,EAAS;;;EAExD"}
@@ -1,5 +1,4 @@
1
- import"reflect-metadata";const t=Symbol("Param");export function Param(a=null,e=null){return Reflect.metadata(t,a)}
2
- /*
1
+ import"reflect-metadata";const t=Symbol("Param");export function Param(a=null,e=null){return Reflect.metadata(t,a)}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -6,3 +6,4 @@ export declare abstract class GameComponent {
6
6
  update(deltaTime: number): void | Promise<void>;
7
7
  onInit(): void;
8
8
  }
9
+ //# sourceMappingURL=game-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-component.d.ts","sourceRoot":"","sources":["../../src/game-component/game-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,8BAAsB,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,QAAQ,CAAA;IAChB,KAAK,EAAE,GAAG,CAAA;IAEV,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAC,OAAO,CAAC,IAAI,CAAC;IAC7C,MAAM;CACd"}
@@ -1,5 +1,4 @@
1
- export class GameComponent{update(e){}onInit(){}}
2
- /*
1
+ export class GameComponent{update(e){}onInit(){}}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -35,3 +35,4 @@ export declare abstract class BaseActor {
35
35
  getComponent<T extends ActorComponent>(type: Constructable<T>): T;
36
36
  }
37
37
  export declare function _setupActorUpdateEventHandlers(): void;
38
+ //# sourceMappingURL=actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../../src/gameplay/actors/actor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAa,MAAM,MAAM,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAS,MAAM,OAAO,CAAA;AACvC,OAAkB,EAAE,aAAa,EAAW,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,cAAc,EAAU,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAO7E,wBAAgB,KAAK,KAEF,sBAAiB,UAMnC;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,CAAA;AAE5B;;GAEG;AACH,8BAAsB,SAAS;IAC7B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAY;IAIzB,eAAe,UAAQ;IAE9B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAc;IACvC,QAAQ,CAAC,QAAQ,gBAAsB;IACvC,IACI,QAAQ,4BAEX;IACD,IACI,UAAU,+BAEb;IACD,IACI,QAAQ,0BAEX;IACD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,GAAC,IAAI;IAC5B,WAAW,IAAI,IAAI;IACnB,SAAS,IAAI,IAAI;IACjB;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IACjC;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;;IAYrC,MAAM,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC;IAiC5F,YAAY,CAAC,CAAC,SAAS,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC;CAOlE;AAID,wBAAgB,8BAA8B,SAO7C"}
@@ -1,5 +1,4 @@
1
- import{__decorate as t,__metadata as e}from"tslib";import o,{ignore as i}from"@plumier/reflect";import{Subject as n,skipWhile as s}from"rxjs";import{Group as r}from"three";import a,{Service as p}from"typedi";import{ActorComponent as c}from"./component.js";import{initComponents as d}from"./internal/component-init.js";import{activeContainerInstance as m,containerRefMap as h}from"./internal/container-map.js";import{randomString as l}from"../../utils/math.js";import{inject as u}from"../inject.js";import{ViewController as f}from"../services/render.js";export function Actor(){const t=p({transient:!0});return function(e){e.__isActor=!0,t(e),o.noop()(e),o.parameterProperties()(e)}}let U=0;export class BaseActor{get position(){return this.object?.position}get quaternion(){return this.object?.quaternion}get rotation(){return this.object?.rotation}onInit(){}onBeginPlay(){}onEndPlay(){}onUpdate(t){}onLateUpdate(t){}constructor(){this.id=++U,this.__isInitialised=!1,this.object=new r,this.disposed=new n,this.onUpdate!==BaseActor.prototype.onUpdate&&u(f).onUpdate(this).pipe(s((()=>!this.__isInitialised))).subscribe((t=>this.onUpdate(t))),this.onLateUpdate!==BaseActor.prototype.onLateUpdate&&u(f).onLateUpdate(this).pipe(s((()=>!this.__isInitialised))).subscribe((t=>this.onLateUpdate(t)))}attach(t,e){const o=m.value,i=h.get(this)??m.value??a.of("default");m.value=i;const n=l();i.set({id:n,type:t,transient:!0});const s=i.get(n);if(m.value=o,null!=e)for(const t of Object.keys(e))s[t]=e[t];return this.__isInitialised&&(s.actor=this,s.onInit(),d(s,this)),s}getComponent(t){for(const e of Object.values(this))if(e instanceof t)return e}}t([i(),e("design:type",Object),e("design:paramtypes",[])],BaseActor.prototype,"position",null),t([i(),e("design:type",Object),e("design:paramtypes",[])],BaseActor.prototype,"quaternion",null),t([i(),e("design:type",Object),e("design:paramtypes",[])],BaseActor.prototype,"rotation",null);export function _setupActorUpdateEventHandlers(){this.onUpdate!==c.prototype.onUpdate&&u(f).onUpdate(this.actor).pipe(s((()=>!this.actor?.__isInitialised))).subscribe((t=>this.onUpdate(t))),this.onLateUpdate!==c.prototype.onLateUpdate&&u(f).onLateUpdate(this.actor).pipe(s((()=>!this.actor?.__isInitialised))).subscribe((t=>this.onLateUpdate(t)))}
2
- /*
1
+ import{__decorate as t,__metadata as e}from"tslib";import o,{ignore as i}from"@plumier/reflect";import{Subject as n,skipWhile as s}from"rxjs";import{Group as r}from"three";import a,{Service as p}from"typedi";import{ActorComponent as c}from"./component.js";import{initComponents as d}from"./internal/component-init.js";import{activeContainerInstance as m,containerRefMap as h}from"./internal/container-map.js";import{randomString as l}from"../../utils/math.js";import{inject as u}from"../inject.js";import{ViewController as f}from"../services/render.js";export function Actor(){const t=p({transient:!0});return function(e){e.__isActor=!0,t(e),o.noop()(e),o.parameterProperties()(e)}}let U=0;export class BaseActor{get position(){return this.object?.position}get quaternion(){return this.object?.quaternion}get rotation(){return this.object?.rotation}onInit(){}onBeginPlay(){}onEndPlay(){}onUpdate(t){}onLateUpdate(t){}constructor(){this.id=++U,this.__isInitialised=!1,this.object=new r,this.disposed=new n,this.onUpdate!==BaseActor.prototype.onUpdate&&u(f).onUpdate(this).pipe(s((()=>!this.__isInitialised))).subscribe((t=>this.onUpdate(t))),this.onLateUpdate!==BaseActor.prototype.onLateUpdate&&u(f).onLateUpdate(this).pipe(s((()=>!this.__isInitialised))).subscribe((t=>this.onLateUpdate(t)))}attach(t,e){const o=m.value,i=h.get(this)??m.value??a.of("default");m.value=i;const n=l();i.set({id:n,type:t,transient:!0});const s=i.get(n);if(m.value=o,null!=e)for(const t of Object.keys(e))s[t]=e[t];return this.__isInitialised&&(s.actor=this,s.onInit(),d(s,this)),s}getComponent(t){for(const e of Object.values(this))if(e instanceof t)return e}}t([i(),e("design:type",Object),e("design:paramtypes",[])],BaseActor.prototype,"position",null),t([i(),e("design:type",Object),e("design:paramtypes",[])],BaseActor.prototype,"quaternion",null),t([i(),e("design:type",Object),e("design:paramtypes",[])],BaseActor.prototype,"rotation",null);export function _setupActorUpdateEventHandlers(){this.onUpdate!==c.prototype.onUpdate&&u(f).onUpdate(this.actor).pipe(s((()=>!this.actor?.__isInitialised))).subscribe((t=>this.onUpdate(t))),this.onLateUpdate!==c.prototype.onLateUpdate&&u(f).onLateUpdate(this.actor).pipe(s((()=>!this.actor?.__isInitialised))).subscribe((t=>this.onLateUpdate(t)))}/*
3
2
  * Copyright (©) 2023. All rights reserved.
4
3
  * See the LICENSE.md file for details.
5
4
  */
@@ -3,3 +3,4 @@ import { CameraComponent } from '../camera/camera-component.js';
3
3
  export declare class CameraActor extends BaseActor {
4
4
  camera: CameraComponent;
5
5
  }
6
+ //# sourceMappingURL=camera-actor.d.ts.map