fraxel 0.1.0-alpha.1

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 (501) hide show
  1. package/dist/animation/easing.d.ts +29 -0
  2. package/dist/animation/easing.d.ts.map +1 -0
  3. package/dist/animation/easing.js +50 -0
  4. package/dist/animation/easing.js.map +1 -0
  5. package/dist/animation/index.d.ts +7 -0
  6. package/dist/animation/index.d.ts.map +1 -0
  7. package/dist/animation/index.js +7 -0
  8. package/dist/animation/index.js.map +1 -0
  9. package/dist/animation/multiple.d.ts +26 -0
  10. package/dist/animation/multiple.d.ts.map +1 -0
  11. package/dist/animation/multiple.js +27 -0
  12. package/dist/animation/multiple.js.map +1 -0
  13. package/dist/animation/properties.d.ts +30 -0
  14. package/dist/animation/properties.d.ts.map +1 -0
  15. package/dist/animation/properties.js +32 -0
  16. package/dist/animation/properties.js.map +1 -0
  17. package/dist/animation/sequences.d.ts +30 -0
  18. package/dist/animation/sequences.d.ts.map +1 -0
  19. package/dist/animation/sequences.js +50 -0
  20. package/dist/animation/sequences.js.map +1 -0
  21. package/dist/animation/sprite-sheet.d.ts +81 -0
  22. package/dist/animation/sprite-sheet.d.ts.map +1 -0
  23. package/dist/animation/sprite-sheet.js +103 -0
  24. package/dist/animation/sprite-sheet.js.map +1 -0
  25. package/dist/animation/tween.d.ts +78 -0
  26. package/dist/animation/tween.d.ts.map +1 -0
  27. package/dist/animation/tween.js +103 -0
  28. package/dist/animation/tween.js.map +1 -0
  29. package/dist/assets/index.d.ts +6 -0
  30. package/dist/assets/index.d.ts.map +1 -0
  31. package/dist/assets/index.js +5 -0
  32. package/dist/assets/index.js.map +1 -0
  33. package/dist/assets/load-sound.d.ts +17 -0
  34. package/dist/assets/load-sound.d.ts.map +1 -0
  35. package/dist/assets/load-sound.js +35 -0
  36. package/dist/assets/load-sound.js.map +1 -0
  37. package/dist/assets/load-texture.d.ts +12 -0
  38. package/dist/assets/load-texture.d.ts.map +1 -0
  39. package/dist/assets/load-texture.js +40 -0
  40. package/dist/assets/load-texture.js.map +1 -0
  41. package/dist/assets/loader.d.ts +59 -0
  42. package/dist/assets/loader.d.ts.map +1 -0
  43. package/dist/assets/loader.js +65 -0
  44. package/dist/assets/loader.js.map +1 -0
  45. package/dist/assets/texture.d.ts +36 -0
  46. package/dist/assets/texture.d.ts.map +1 -0
  47. package/dist/assets/texture.js +49 -0
  48. package/dist/assets/texture.js.map +1 -0
  49. package/dist/audio/audio-context.d.ts +14 -0
  50. package/dist/audio/audio-context.d.ts.map +1 -0
  51. package/dist/audio/audio-context.js +20 -0
  52. package/dist/audio/audio-context.js.map +1 -0
  53. package/dist/audio/index.d.ts +2 -0
  54. package/dist/audio/index.d.ts.map +1 -0
  55. package/dist/audio/index.js +2 -0
  56. package/dist/audio/index.js.map +1 -0
  57. package/dist/collision/broadphase/spatial-hash.d.ts +32 -0
  58. package/dist/collision/broadphase/spatial-hash.d.ts.map +1 -0
  59. package/dist/collision/broadphase/spatial-hash.js +87 -0
  60. package/dist/collision/broadphase/spatial-hash.js.map +1 -0
  61. package/dist/collision/collision-system.d.ts +52 -0
  62. package/dist/collision/collision-system.d.ts.map +1 -0
  63. package/dist/collision/collision-system.js +278 -0
  64. package/dist/collision/collision-system.js.map +1 -0
  65. package/dist/collision/events/collision-emitter.d.ts +38 -0
  66. package/dist/collision/events/collision-emitter.d.ts.map +1 -0
  67. package/dist/collision/events/collision-emitter.js +47 -0
  68. package/dist/collision/events/collision-emitter.js.map +1 -0
  69. package/dist/collision/index.d.ts +13 -0
  70. package/dist/collision/index.d.ts.map +1 -0
  71. package/dist/collision/index.js +11 -0
  72. package/dist/collision/index.js.map +1 -0
  73. package/dist/collision/narrowphase/detector.d.ts +26 -0
  74. package/dist/collision/narrowphase/detector.d.ts.map +1 -0
  75. package/dist/collision/narrowphase/detector.js +70 -0
  76. package/dist/collision/narrowphase/detector.js.map +1 -0
  77. package/dist/collision/narrowphase/shapes.d.ts +91 -0
  78. package/dist/collision/narrowphase/shapes.d.ts.map +1 -0
  79. package/dist/collision/narrowphase/shapes.js +52 -0
  80. package/dist/collision/narrowphase/shapes.js.map +1 -0
  81. package/dist/collision/physics/physics-body.d.ts +38 -0
  82. package/dist/collision/physics/physics-body.d.ts.map +1 -0
  83. package/dist/collision/physics/physics-body.js +53 -0
  84. package/dist/collision/physics/physics-body.js.map +1 -0
  85. package/dist/collision/physics/physics-system.d.ts +23 -0
  86. package/dist/collision/physics/physics-system.d.ts.map +1 -0
  87. package/dist/collision/physics/physics-system.js +86 -0
  88. package/dist/collision/physics/physics-system.js.map +1 -0
  89. package/dist/collision/physics/resolver.d.ts +16 -0
  90. package/dist/collision/physics/resolver.d.ts.map +1 -0
  91. package/dist/collision/physics/resolver.js +91 -0
  92. package/dist/collision/physics/resolver.js.map +1 -0
  93. package/dist/collision/types.d.ts +22 -0
  94. package/dist/collision/types.d.ts.map +1 -0
  95. package/dist/collision/types.js +2 -0
  96. package/dist/collision/types.js.map +1 -0
  97. package/dist/core/game-config.d.ts +34 -0
  98. package/dist/core/game-config.d.ts.map +1 -0
  99. package/dist/core/game-config.js +31 -0
  100. package/dist/core/game-config.js.map +1 -0
  101. package/dist/core/game.d.ts +86 -0
  102. package/dist/core/game.d.ts.map +1 -0
  103. package/dist/core/game.js +166 -0
  104. package/dist/core/game.js.map +1 -0
  105. package/dist/core/index.d.ts +6 -0
  106. package/dist/core/index.d.ts.map +1 -0
  107. package/dist/core/index.js +6 -0
  108. package/dist/core/index.js.map +1 -0
  109. package/dist/core/scene-manager.d.ts +28 -0
  110. package/dist/core/scene-manager.d.ts.map +1 -0
  111. package/dist/core/scene-manager.js +65 -0
  112. package/dist/core/scene-manager.js.map +1 -0
  113. package/dist/core/scene.d.ts +43 -0
  114. package/dist/core/scene.d.ts.map +1 -0
  115. package/dist/core/scene.js +48 -0
  116. package/dist/core/scene.js.map +1 -0
  117. package/dist/core/theme.d.ts +63 -0
  118. package/dist/core/theme.d.ts.map +1 -0
  119. package/dist/core/theme.js +59 -0
  120. package/dist/core/theme.js.map +1 -0
  121. package/dist/errors/animation.d.ts +24 -0
  122. package/dist/errors/animation.d.ts.map +1 -0
  123. package/dist/errors/animation.js +29 -0
  124. package/dist/errors/animation.js.map +1 -0
  125. package/dist/errors/assets.d.ts +34 -0
  126. package/dist/errors/assets.d.ts.map +1 -0
  127. package/dist/errors/assets.js +41 -0
  128. package/dist/errors/assets.js.map +1 -0
  129. package/dist/errors/base.d.ts +12 -0
  130. package/dist/errors/base.d.ts.map +1 -0
  131. package/dist/errors/base.js +15 -0
  132. package/dist/errors/base.js.map +1 -0
  133. package/dist/errors/env.d.ts +24 -0
  134. package/dist/errors/env.d.ts.map +1 -0
  135. package/dist/errors/env.js +29 -0
  136. package/dist/errors/env.js.map +1 -0
  137. package/dist/errors/hook.d.ts +46 -0
  138. package/dist/errors/hook.d.ts.map +1 -0
  139. package/dist/errors/hook.js +55 -0
  140. package/dist/errors/hook.js.map +1 -0
  141. package/dist/errors/index.d.ts +11 -0
  142. package/dist/errors/index.d.ts.map +1 -0
  143. package/dist/errors/index.js +11 -0
  144. package/dist/errors/index.js.map +1 -0
  145. package/dist/errors/jsx.d.ts +26 -0
  146. package/dist/errors/jsx.d.ts.map +1 -0
  147. package/dist/errors/jsx.js +45 -0
  148. package/dist/errors/jsx.js.map +1 -0
  149. package/dist/errors/lifecycle.d.ts +35 -0
  150. package/dist/errors/lifecycle.d.ts.map +1 -0
  151. package/dist/errors/lifecycle.js +42 -0
  152. package/dist/errors/lifecycle.js.map +1 -0
  153. package/dist/errors/math.d.ts +24 -0
  154. package/dist/errors/math.d.ts.map +1 -0
  155. package/dist/errors/math.js +34 -0
  156. package/dist/errors/math.js.map +1 -0
  157. package/dist/errors/node.d.ts +68 -0
  158. package/dist/errors/node.d.ts.map +1 -0
  159. package/dist/errors/node.js +87 -0
  160. package/dist/errors/node.js.map +1 -0
  161. package/dist/errors/scene.d.ts +35 -0
  162. package/dist/errors/scene.d.ts.map +1 -0
  163. package/dist/errors/scene.js +42 -0
  164. package/dist/errors/scene.js.map +1 -0
  165. package/dist/events/event.d.ts +106 -0
  166. package/dist/events/event.d.ts.map +1 -0
  167. package/dist/events/event.js +125 -0
  168. package/dist/events/event.js.map +1 -0
  169. package/dist/events/index.d.ts +2 -0
  170. package/dist/events/index.d.ts.map +1 -0
  171. package/dist/events/index.js +2 -0
  172. package/dist/events/index.js.map +1 -0
  173. package/dist/events/types.d.ts +20 -0
  174. package/dist/events/types.d.ts.map +1 -0
  175. package/dist/events/types.js +2 -0
  176. package/dist/events/types.js.map +1 -0
  177. package/dist/hooks/context.d.ts +15 -0
  178. package/dist/hooks/context.d.ts.map +1 -0
  179. package/dist/hooks/context.js +26 -0
  180. package/dist/hooks/context.js.map +1 -0
  181. package/dist/hooks/deriveds/by-nodes/index.d.ts +7 -0
  182. package/dist/hooks/deriveds/by-nodes/index.d.ts.map +1 -0
  183. package/dist/hooks/deriveds/by-nodes/index.js +7 -0
  184. package/dist/hooks/deriveds/by-nodes/index.js.map +1 -0
  185. package/dist/hooks/deriveds/by-nodes/use-animation.d.ts +44 -0
  186. package/dist/hooks/deriveds/by-nodes/use-animation.d.ts.map +1 -0
  187. package/dist/hooks/deriveds/by-nodes/use-animation.js +61 -0
  188. package/dist/hooks/deriveds/by-nodes/use-animation.js.map +1 -0
  189. package/dist/hooks/deriveds/by-nodes/use-audio.d.ts +33 -0
  190. package/dist/hooks/deriveds/by-nodes/use-audio.d.ts.map +1 -0
  191. package/dist/hooks/deriveds/by-nodes/use-audio.js +43 -0
  192. package/dist/hooks/deriveds/by-nodes/use-audio.js.map +1 -0
  193. package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts +32 -0
  194. package/dist/hooks/deriveds/by-nodes/use-clickable.d.ts.map +1 -0
  195. package/dist/hooks/deriveds/by-nodes/use-clickable.js +43 -0
  196. package/dist/hooks/deriveds/by-nodes/use-clickable.js.map +1 -0
  197. package/dist/hooks/deriveds/by-nodes/use-collider.d.ts +35 -0
  198. package/dist/hooks/deriveds/by-nodes/use-collider.d.ts.map +1 -0
  199. package/dist/hooks/deriveds/by-nodes/use-collider.js +55 -0
  200. package/dist/hooks/deriveds/by-nodes/use-collider.js.map +1 -0
  201. package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts +35 -0
  202. package/dist/hooks/deriveds/by-nodes/use-ray-cast.d.ts.map +1 -0
  203. package/dist/hooks/deriveds/by-nodes/use-ray-cast.js +47 -0
  204. package/dist/hooks/deriveds/by-nodes/use-ray-cast.js.map +1 -0
  205. package/dist/hooks/deriveds/by-nodes/use-timer.d.ts +34 -0
  206. package/dist/hooks/deriveds/by-nodes/use-timer.d.ts.map +1 -0
  207. package/dist/hooks/deriveds/by-nodes/use-timer.js +48 -0
  208. package/dist/hooks/deriveds/by-nodes/use-timer.js.map +1 -0
  209. package/dist/hooks/deriveds/index.d.ts +5 -0
  210. package/dist/hooks/deriveds/index.d.ts.map +1 -0
  211. package/dist/hooks/deriveds/index.js +5 -0
  212. package/dist/hooks/deriveds/index.js.map +1 -0
  213. package/dist/hooks/deriveds/use-condition.d.ts +37 -0
  214. package/dist/hooks/deriveds/use-condition.d.ts.map +1 -0
  215. package/dist/hooks/deriveds/use-condition.js +47 -0
  216. package/dist/hooks/deriveds/use-condition.js.map +1 -0
  217. package/dist/hooks/deriveds/use-match.d.ts +26 -0
  218. package/dist/hooks/deriveds/use-match.d.ts.map +1 -0
  219. package/dist/hooks/deriveds/use-match.js +38 -0
  220. package/dist/hooks/deriveds/use-match.js.map +1 -0
  221. package/dist/hooks/deriveds/use-partial-node.d.ts +22 -0
  222. package/dist/hooks/deriveds/use-partial-node.d.ts.map +1 -0
  223. package/dist/hooks/deriveds/use-partial-node.js +25 -0
  224. package/dist/hooks/deriveds/use-partial-node.js.map +1 -0
  225. package/dist/hooks/deriveds/use-when.d.ts +28 -0
  226. package/dist/hooks/deriveds/use-when.d.ts.map +1 -0
  227. package/dist/hooks/deriveds/use-when.js +35 -0
  228. package/dist/hooks/deriveds/use-when.js.map +1 -0
  229. package/dist/hooks/index.d.ts +16 -0
  230. package/dist/hooks/index.d.ts.map +1 -0
  231. package/dist/hooks/index.js +16 -0
  232. package/dist/hooks/index.js.map +1 -0
  233. package/dist/hooks/use-child.d.ts +24 -0
  234. package/dist/hooks/use-child.d.ts.map +1 -0
  235. package/dist/hooks/use-child.js +37 -0
  236. package/dist/hooks/use-child.js.map +1 -0
  237. package/dist/hooks/use-computed.d.ts +28 -0
  238. package/dist/hooks/use-computed.d.ts.map +1 -0
  239. package/dist/hooks/use-computed.js +41 -0
  240. package/dist/hooks/use-computed.js.map +1 -0
  241. package/dist/hooks/use-context.d.ts +58 -0
  242. package/dist/hooks/use-context.d.ts.map +1 -0
  243. package/dist/hooks/use-context.js +77 -0
  244. package/dist/hooks/use-context.js.map +1 -0
  245. package/dist/hooks/use-effect.d.ts +24 -0
  246. package/dist/hooks/use-effect.d.ts.map +1 -0
  247. package/dist/hooks/use-effect.js +63 -0
  248. package/dist/hooks/use-effect.js.map +1 -0
  249. package/dist/hooks/use-event.d.ts +29 -0
  250. package/dist/hooks/use-event.d.ts.map +1 -0
  251. package/dist/hooks/use-event.js +30 -0
  252. package/dist/hooks/use-event.js.map +1 -0
  253. package/dist/hooks/use-game.d.ts +17 -0
  254. package/dist/hooks/use-game.d.ts.map +1 -0
  255. package/dist/hooks/use-game.js +35 -0
  256. package/dist/hooks/use-game.js.map +1 -0
  257. package/dist/hooks/use-mount.d.ts +21 -0
  258. package/dist/hooks/use-mount.d.ts.map +1 -0
  259. package/dist/hooks/use-mount.js +33 -0
  260. package/dist/hooks/use-mount.js.map +1 -0
  261. package/dist/hooks/use-node.d.ts +42 -0
  262. package/dist/hooks/use-node.d.ts.map +1 -0
  263. package/dist/hooks/use-node.js +63 -0
  264. package/dist/hooks/use-node.js.map +1 -0
  265. package/dist/hooks/use-ref.d.ts +27 -0
  266. package/dist/hooks/use-ref.d.ts.map +1 -0
  267. package/dist/hooks/use-ref.js +33 -0
  268. package/dist/hooks/use-ref.js.map +1 -0
  269. package/dist/hooks/use-script.d.ts +33 -0
  270. package/dist/hooks/use-script.d.ts.map +1 -0
  271. package/dist/hooks/use-script.js +40 -0
  272. package/dist/hooks/use-script.js.map +1 -0
  273. package/dist/hooks/use-signal.d.ts +25 -0
  274. package/dist/hooks/use-signal.d.ts.map +1 -0
  275. package/dist/hooks/use-signal.js +36 -0
  276. package/dist/hooks/use-signal.js.map +1 -0
  277. package/dist/hooks/use-spawn.d.ts +27 -0
  278. package/dist/hooks/use-spawn.d.ts.map +1 -0
  279. package/dist/hooks/use-spawn.js +39 -0
  280. package/dist/hooks/use-spawn.js.map +1 -0
  281. package/dist/hooks/use-trigger.d.ts +51 -0
  282. package/dist/hooks/use-trigger.d.ts.map +1 -0
  283. package/dist/hooks/use-trigger.js +68 -0
  284. package/dist/hooks/use-trigger.js.map +1 -0
  285. package/dist/index.d.ts +11 -0
  286. package/dist/index.d.ts.map +1 -0
  287. package/dist/index.js +11 -0
  288. package/dist/index.js.map +1 -0
  289. package/dist/input/input.d.ts +46 -0
  290. package/dist/input/input.d.ts.map +1 -0
  291. package/dist/input/input.js +159 -0
  292. package/dist/input/input.js.map +1 -0
  293. package/dist/jsx/components/fragment.d.ts +3 -0
  294. package/dist/jsx/components/fragment.d.ts.map +1 -0
  295. package/dist/jsx/components/fragment.js +7 -0
  296. package/dist/jsx/components/fragment.js.map +1 -0
  297. package/dist/jsx/components/game.d.ts +21 -0
  298. package/dist/jsx/components/game.d.ts.map +1 -0
  299. package/dist/jsx/components/game.js +17 -0
  300. package/dist/jsx/components/game.js.map +1 -0
  301. package/dist/jsx/components/index.d.ts +5 -0
  302. package/dist/jsx/components/index.d.ts.map +1 -0
  303. package/dist/jsx/components/index.js +5 -0
  304. package/dist/jsx/components/index.js.map +1 -0
  305. package/dist/jsx/components/list.d.ts +88 -0
  306. package/dist/jsx/components/list.d.ts.map +1 -0
  307. package/dist/jsx/components/list.js +93 -0
  308. package/dist/jsx/components/list.js.map +1 -0
  309. package/dist/jsx/components/scene.d.ts +40 -0
  310. package/dist/jsx/components/scene.d.ts.map +1 -0
  311. package/dist/jsx/components/scene.js +20 -0
  312. package/dist/jsx/components/scene.js.map +1 -0
  313. package/dist/jsx/index.d.ts +5 -0
  314. package/dist/jsx/index.d.ts.map +1 -0
  315. package/dist/jsx/index.js +5 -0
  316. package/dist/jsx/index.js.map +1 -0
  317. package/dist/jsx/jsx.d.ts +3 -0
  318. package/dist/jsx/jsx.d.ts.map +1 -0
  319. package/dist/jsx/jsx.js +4 -0
  320. package/dist/jsx/jsx.js.map +1 -0
  321. package/dist/jsx/render/game.d.ts +41 -0
  322. package/dist/jsx/render/game.d.ts.map +1 -0
  323. package/dist/jsx/render/game.js +86 -0
  324. package/dist/jsx/render/game.js.map +1 -0
  325. package/dist/jsx/render/index.d.ts +3 -0
  326. package/dist/jsx/render/index.d.ts.map +1 -0
  327. package/dist/jsx/render/index.js +3 -0
  328. package/dist/jsx/render/index.js.map +1 -0
  329. package/dist/jsx/render/to-nodes.d.ts +10 -0
  330. package/dist/jsx/render/to-nodes.d.ts.map +1 -0
  331. package/dist/jsx/render/to-nodes.js +52 -0
  332. package/dist/jsx/render/to-nodes.js.map +1 -0
  333. package/dist/jsx/render/types/class-component.d.ts +4 -0
  334. package/dist/jsx/render/types/class-component.d.ts.map +1 -0
  335. package/dist/jsx/render/types/class-component.js +8 -0
  336. package/dist/jsx/render/types/class-component.js.map +1 -0
  337. package/dist/jsx/render/types/func-components.d.ts +4 -0
  338. package/dist/jsx/render/types/func-components.d.ts.map +1 -0
  339. package/dist/jsx/render/types/func-components.js +8 -0
  340. package/dist/jsx/render/types/func-components.js.map +1 -0
  341. package/dist/jsx/render/types/instrinsic-elements.d.ts +6 -0
  342. package/dist/jsx/render/types/instrinsic-elements.d.ts.map +1 -0
  343. package/dist/jsx/render/types/instrinsic-elements.js +41 -0
  344. package/dist/jsx/render/types/instrinsic-elements.js.map +1 -0
  345. package/dist/jsx/types.d.ts +41 -0
  346. package/dist/jsx/types.d.ts.map +1 -0
  347. package/dist/jsx/types.js +2 -0
  348. package/dist/jsx/types.js.map +1 -0
  349. package/dist/jsx/utils.d.ts +4 -0
  350. package/dist/jsx/utils.d.ts.map +1 -0
  351. package/dist/jsx/utils.js +15 -0
  352. package/dist/jsx/utils.js.map +1 -0
  353. package/dist/jsx-runtime.d.ts +6 -0
  354. package/dist/jsx-runtime.d.ts.map +1 -0
  355. package/dist/jsx-runtime.js +6 -0
  356. package/dist/jsx-runtime.js.map +1 -0
  357. package/dist/math/index.d.ts +3 -0
  358. package/dist/math/index.d.ts.map +1 -0
  359. package/dist/math/index.js +2 -0
  360. package/dist/math/index.js.map +1 -0
  361. package/dist/math/types.d.ts +13 -0
  362. package/dist/math/types.d.ts.map +1 -0
  363. package/dist/math/types.js +2 -0
  364. package/dist/math/types.js.map +1 -0
  365. package/dist/math/vector2.d.ts +145 -0
  366. package/dist/math/vector2.d.ts.map +1 -0
  367. package/dist/math/vector2.js +164 -0
  368. package/dist/math/vector2.js.map +1 -0
  369. package/dist/nodes/_node.d.ts +283 -0
  370. package/dist/nodes/_node.d.ts.map +1 -0
  371. package/dist/nodes/_node.js +371 -0
  372. package/dist/nodes/_node.js.map +1 -0
  373. package/dist/nodes/animation-player.d.ts +208 -0
  374. package/dist/nodes/animation-player.d.ts.map +1 -0
  375. package/dist/nodes/animation-player.js +249 -0
  376. package/dist/nodes/animation-player.js.map +1 -0
  377. package/dist/nodes/audio-player.d.ts +128 -0
  378. package/dist/nodes/audio-player.d.ts.map +1 -0
  379. package/dist/nodes/audio-player.js +173 -0
  380. package/dist/nodes/audio-player.js.map +1 -0
  381. package/dist/nodes/group.d.ts +55 -0
  382. package/dist/nodes/group.d.ts.map +1 -0
  383. package/dist/nodes/group.js +54 -0
  384. package/dist/nodes/group.js.map +1 -0
  385. package/dist/nodes/index.d.ts +8 -0
  386. package/dist/nodes/index.d.ts.map +1 -0
  387. package/dist/nodes/index.js +7 -0
  388. package/dist/nodes/index.js.map +1 -0
  389. package/dist/nodes/lib/enum.d.ts +42 -0
  390. package/dist/nodes/lib/enum.d.ts.map +1 -0
  391. package/dist/nodes/lib/enum.js +43 -0
  392. package/dist/nodes/lib/enum.js.map +1 -0
  393. package/dist/nodes/lib/index.d.ts +5 -0
  394. package/dist/nodes/lib/index.d.ts.map +1 -0
  395. package/dist/nodes/lib/index.js +5 -0
  396. package/dist/nodes/lib/index.js.map +1 -0
  397. package/dist/nodes/lib/registry.d.ts +43 -0
  398. package/dist/nodes/lib/registry.d.ts.map +1 -0
  399. package/dist/nodes/lib/registry.js +46 -0
  400. package/dist/nodes/lib/registry.js.map +1 -0
  401. package/dist/nodes/lib/types.d.ts +89 -0
  402. package/dist/nodes/lib/types.d.ts.map +1 -0
  403. package/dist/nodes/lib/types.js +2 -0
  404. package/dist/nodes/lib/types.js.map +1 -0
  405. package/dist/nodes/lib/utils.d.ts +35 -0
  406. package/dist/nodes/lib/utils.d.ts.map +1 -0
  407. package/dist/nodes/lib/utils.js +58 -0
  408. package/dist/nodes/lib/utils.js.map +1 -0
  409. package/dist/nodes/node2d/_node2d.d.ts +59 -0
  410. package/dist/nodes/node2d/_node2d.d.ts.map +1 -0
  411. package/dist/nodes/node2d/_node2d.js +57 -0
  412. package/dist/nodes/node2d/_node2d.js.map +1 -0
  413. package/dist/nodes/node2d/camera.d.ts +64 -0
  414. package/dist/nodes/node2d/camera.d.ts.map +1 -0
  415. package/dist/nodes/node2d/camera.js +72 -0
  416. package/dist/nodes/node2d/camera.js.map +1 -0
  417. package/dist/nodes/node2d/clickable.d.ts +96 -0
  418. package/dist/nodes/node2d/clickable.d.ts.map +1 -0
  419. package/dist/nodes/node2d/clickable.js +117 -0
  420. package/dist/nodes/node2d/clickable.js.map +1 -0
  421. package/dist/nodes/node2d/collider.d.ts +96 -0
  422. package/dist/nodes/node2d/collider.d.ts.map +1 -0
  423. package/dist/nodes/node2d/collider.js +116 -0
  424. package/dist/nodes/node2d/collider.js.map +1 -0
  425. package/dist/nodes/node2d/index.d.ts +12 -0
  426. package/dist/nodes/node2d/index.d.ts.map +1 -0
  427. package/dist/nodes/node2d/index.js +11 -0
  428. package/dist/nodes/node2d/index.js.map +1 -0
  429. package/dist/nodes/node2d/lib/index.d.ts +2 -0
  430. package/dist/nodes/node2d/lib/index.d.ts.map +1 -0
  431. package/dist/nodes/node2d/lib/index.js +2 -0
  432. package/dist/nodes/node2d/lib/index.js.map +1 -0
  433. package/dist/nodes/node2d/lib/utils.d.ts +4 -0
  434. package/dist/nodes/node2d/lib/utils.d.ts.map +1 -0
  435. package/dist/nodes/node2d/lib/utils.js +14 -0
  436. package/dist/nodes/node2d/lib/utils.js.map +1 -0
  437. package/dist/nodes/node2d/ray-cast.d.ts +115 -0
  438. package/dist/nodes/node2d/ray-cast.d.ts.map +1 -0
  439. package/dist/nodes/node2d/ray-cast.js +129 -0
  440. package/dist/nodes/node2d/ray-cast.js.map +1 -0
  441. package/dist/nodes/node2d/rectangle.d.ts +87 -0
  442. package/dist/nodes/node2d/rectangle.d.ts.map +1 -0
  443. package/dist/nodes/node2d/rectangle.js +60 -0
  444. package/dist/nodes/node2d/rectangle.js.map +1 -0
  445. package/dist/nodes/node2d/rigid-body.d.ts +65 -0
  446. package/dist/nodes/node2d/rigid-body.d.ts.map +1 -0
  447. package/dist/nodes/node2d/rigid-body.js +56 -0
  448. package/dist/nodes/node2d/rigid-body.js.map +1 -0
  449. package/dist/nodes/node2d/sprite.d.ts +285 -0
  450. package/dist/nodes/node2d/sprite.d.ts.map +1 -0
  451. package/dist/nodes/node2d/sprite.js +226 -0
  452. package/dist/nodes/node2d/sprite.js.map +1 -0
  453. package/dist/nodes/node2d/text.d.ts +62 -0
  454. package/dist/nodes/node2d/text.d.ts.map +1 -0
  455. package/dist/nodes/node2d/text.js +52 -0
  456. package/dist/nodes/node2d/text.js.map +1 -0
  457. package/dist/nodes/node2d/transform.d.ts +32 -0
  458. package/dist/nodes/node2d/transform.d.ts.map +1 -0
  459. package/dist/nodes/node2d/transform.js +30 -0
  460. package/dist/nodes/node2d/transform.js.map +1 -0
  461. package/dist/nodes/timer.d.ts +107 -0
  462. package/dist/nodes/timer.d.ts.map +1 -0
  463. package/dist/nodes/timer.js +108 -0
  464. package/dist/nodes/timer.js.map +1 -0
  465. package/dist/reactivity/index.d.ts +5 -0
  466. package/dist/reactivity/index.d.ts.map +1 -0
  467. package/dist/reactivity/index.js +5 -0
  468. package/dist/reactivity/index.js.map +1 -0
  469. package/dist/reactivity/reactive.d.ts +4 -0
  470. package/dist/reactivity/reactive.d.ts.map +1 -0
  471. package/dist/reactivity/reactive.js +50 -0
  472. package/dist/reactivity/reactive.js.map +1 -0
  473. package/dist/reactivity/register.d.ts +7 -0
  474. package/dist/reactivity/register.d.ts.map +1 -0
  475. package/dist/reactivity/register.js +18 -0
  476. package/dist/reactivity/register.js.map +1 -0
  477. package/dist/reactivity/signal.d.ts +126 -0
  478. package/dist/reactivity/signal.d.ts.map +1 -0
  479. package/dist/reactivity/signal.js +152 -0
  480. package/dist/reactivity/signal.js.map +1 -0
  481. package/dist/reactivity/types.d.ts +31 -0
  482. package/dist/reactivity/types.d.ts.map +1 -0
  483. package/dist/reactivity/types.js +2 -0
  484. package/dist/reactivity/types.js.map +1 -0
  485. package/dist/scripts/index.d.ts +2 -0
  486. package/dist/scripts/index.d.ts.map +1 -0
  487. package/dist/scripts/index.js +2 -0
  488. package/dist/scripts/index.js.map +1 -0
  489. package/dist/scripts/script.d.ts +80 -0
  490. package/dist/scripts/script.d.ts.map +1 -0
  491. package/dist/scripts/script.js +75 -0
  492. package/dist/scripts/script.js.map +1 -0
  493. package/dist/utils/dpr.d.ts +2 -0
  494. package/dist/utils/dpr.d.ts.map +1 -0
  495. package/dist/utils/dpr.js +14 -0
  496. package/dist/utils/dpr.js.map +1 -0
  497. package/dist/utils/ternaries.d.ts +6 -0
  498. package/dist/utils/ternaries.d.ts.map +1 -0
  499. package/dist/utils/ternaries.js +17 -0
  500. package/dist/utils/ternaries.js.map +1 -0
  501. package/package.json +56 -0
@@ -0,0 +1,249 @@
1
+ import { KeyframeNotFoundError } from '../errors/animation.js';
2
+ import { Event } from '../events/event.js';
3
+ import { PrimaryNode } from './lib/enum.js';
4
+ import { Node } from './_node.js';
5
+ import { Nodes } from './lib/registry.js';
6
+ import { subReactive } from '../reactivity/reactive.js';
7
+ export class AnimationPlayer extends Node {
8
+ #animations = new Map();
9
+ #currentAnim = null;
10
+ #nextAnim = null;
11
+ #index = 0;
12
+ #destroyOnEnd = false;
13
+ /** The read-only **`currentAnim`** property returns the current animation name */
14
+ get currentAnim() {
15
+ return this.#currentAnim;
16
+ }
17
+ /** The read-only **`index`** property returns the current index */
18
+ get index() {
19
+ return Math.floor(this.#index);
20
+ }
21
+ /**
22
+ * Creates a new `AnimationPlayer` node.
23
+ *
24
+ * If `animations` is provided, it is invoked when the node starts.
25
+ * If `currentAnim` is a `SignalGetter`, the player reactively tracks
26
+ * the signal and switches animations automatically.
27
+ *
28
+ * @param options AnimationPlayer configuration options
29
+ */
30
+ constructor(options) {
31
+ super(PrimaryNode.AnimationPlayer, options);
32
+ this.#destroyOnEnd = options.destroyOnEnd ?? false;
33
+ this.started.on(() => {
34
+ if (options.animations) {
35
+ this.define(subReactive(options.animations, (animations) => {
36
+ this.#animations.clear();
37
+ this.define(animations);
38
+ }));
39
+ }
40
+ if (options.currentAnim != null) {
41
+ this.play(subReactive(options.currentAnim, (anim) => this.play(anim), (fn) => this.destroyed.on(fn)));
42
+ }
43
+ });
44
+ }
45
+ // Events
46
+ /**
47
+ * Detects whether `currentAnim` **change**
48
+ */
49
+ animationChanged = new Event('animationChange', (_newAnim, _oldAnim) => { });
50
+ /**
51
+ * Detects whether `stop` is **called**
52
+ */
53
+ animationStopped = new Event('animationStop', (_anim) => { });
54
+ /**
55
+ * Detects whether this `index` **change**
56
+ */
57
+ animationIndexChanged = new Event('animationIndexChange', (_index) => { });
58
+ /**
59
+ * Detects whether the current animation **end**
60
+ */
61
+ animationEnded = new Event('animationEnd', (_anim) => { });
62
+ // utils
63
+ /**
64
+ * The **`add`** method adds an animation with a key.
65
+ * @param animName Animation identifier
66
+ * @param animation Animation object
67
+ * @returns This instance for chaining
68
+ *
69
+ * @example
70
+ * ```tsx
71
+ * const sprite = useNode(PrimaryNode.Sprite)
72
+ * const anim = useNode(PrimaryNode.AnimationPlayer)
73
+ *
74
+ * useMount(() => {
75
+ * anim.node
76
+ * .add('idle', {
77
+ * fps: 4,
78
+ * keyframes: keyframesFromSheet(sprite.node, IDLE_TEXTURE, 4),
79
+ * loop: true,
80
+ * })
81
+ * .add('walk', {
82
+ * fps: 4,
83
+ * keyframes: keyframesFromSheet(sprite.node, WALK_TEXTURE, 4),
84
+ * loop: true,
85
+ * })
86
+ * .play('idle')
87
+ * })
88
+ *
89
+ * return (
90
+ * <sprite ref={sprite} textureId={IDLE_TEXTURE} sourceSize={new Vector2(16, 16)}>
91
+ * <animation-player ref={anim} />
92
+ * </sprite>
93
+ * )
94
+ * ```
95
+ */
96
+ add(animName, animation) {
97
+ this.#animations.set(animName, animation);
98
+ return this;
99
+ }
100
+ /**
101
+ * The **`define`** method adds multiple animations at once.
102
+ * @param animations Record of animation names to animation objects
103
+ * @returns This instance for chaining
104
+ *
105
+ * @example
106
+ * ```tsx
107
+ * const sprite = useNode(PrimaryNode.Sprite)
108
+ * const anim = useNode(PrimaryNode.AnimationPlayer)
109
+ *
110
+ * useMount(() => {
111
+ * anim.node
112
+ * .define({
113
+ * idle: {
114
+ * fps: 4,
115
+ * keyframes: keyframesFromSheet(sprite.node, IDLE_TEXTURE, 4),
116
+ * loop: true,
117
+ * },
118
+ * walk: {
119
+ * fps: 4,
120
+ * keyframes: keyframesFromSheet(sprite.node, WALK_TEXTURE, 4),
121
+ * loop: true,
122
+ * },
123
+ * })
124
+ * .play('idle')
125
+ * })
126
+ *
127
+ * return (
128
+ * <sprite ref={sprite} textureId={IDLE_TEXTURE} sourceSize={new Vector2(16, 16)}>
129
+ * <animation-player ref={anim} />
130
+ * </sprite>
131
+ * )
132
+ * ```
133
+ */
134
+ define(animations) {
135
+ for (const animName in animations) {
136
+ if (!Object.hasOwn(animations, animName))
137
+ continue;
138
+ const animation = animations[animName];
139
+ if (animation == null)
140
+ continue;
141
+ this.add(animName, animation);
142
+ }
143
+ return this;
144
+ }
145
+ /**
146
+ * The **`play`** method plays an animation by name.
147
+ * @param animName Animation identifier
148
+ * @param index Index to start from (default `0`)
149
+ *
150
+ * @example
151
+ * ```tsx
152
+ * const anim = useNode(PrimaryNode.AnimationPlayer)
153
+ *
154
+ * useMount(() => {
155
+ * anim.node.play('idle')
156
+ * })
157
+ *
158
+ * return <animation-player ref={anim} />
159
+ * ```
160
+ */
161
+ play(animName, index) {
162
+ if (this.#currentAnim === animName && (index == null || Math.floor(this.#index) === index))
163
+ return;
164
+ if (this.#currentAnim != null)
165
+ this.stop();
166
+ const oldAnim = this.#currentAnim;
167
+ this.#index = index ?? 0;
168
+ this.#currentAnim = animName;
169
+ this.animationChanged.emit(animName, oldAnim);
170
+ this.animationIndexChanged.emit(index ?? 0);
171
+ }
172
+ /**
173
+ * The **`setNext`** method sets the animation to play after the current one ends.
174
+ * @param animName Animation to play next, or `null` to stop
175
+ *
176
+ * @example
177
+ * ```tsx
178
+ * const anim = useNode(PrimaryNode.AnimationPlayer)
179
+ *
180
+ * useEvent(anim, 'animationEnded', () => {
181
+ * anim.node.setNext('idle')
182
+ * })
183
+ * ```
184
+ */
185
+ setNext(animName) {
186
+ this.#nextAnim = animName;
187
+ }
188
+ /**
189
+ * The **`stop`** method stops the current animation.
190
+ */
191
+ stop() {
192
+ if (this.#currentAnim == null)
193
+ return;
194
+ this.animationStopped.emit(this.#currentAnim);
195
+ this.#index = 0;
196
+ this.#currentAnim = null;
197
+ }
198
+ #updateAnim(delta) {
199
+ if (this.#currentAnim == null)
200
+ return;
201
+ const anim = this.#animations.get(this.#currentAnim);
202
+ if (anim == null)
203
+ return;
204
+ if (this.#index >= anim.keyframes.length) {
205
+ if (!anim.loop) {
206
+ const animName = this.#currentAnim;
207
+ this.stop();
208
+ this.animationEnded.emit(animName);
209
+ if (this.#destroyOnEnd) {
210
+ this.destroy();
211
+ return;
212
+ }
213
+ if (this.#nextAnim == null)
214
+ return;
215
+ }
216
+ if (this.#nextAnim != null) {
217
+ if (this.#currentAnim != null) {
218
+ this.stop();
219
+ }
220
+ this.play(this.#nextAnim);
221
+ this.#nextAnim = null;
222
+ }
223
+ this.#index = 0;
224
+ this.animationIndexChanged.emit(0);
225
+ }
226
+ const i = Math.floor(this.#index);
227
+ const kf = anim.keyframes[i];
228
+ if (kf == null)
229
+ throw new KeyframeNotFoundError(i);
230
+ kf(this.#index % 1);
231
+ this.#index += delta * anim.fps;
232
+ if (this.#index < anim.keyframes.length && i !== Math.floor(this.#index)) {
233
+ this.animationIndexChanged.emit(Math.floor(this.#index));
234
+ }
235
+ }
236
+ update(delta) {
237
+ this.#updateAnim(delta);
238
+ super.update(delta);
239
+ }
240
+ cleanEvents() {
241
+ this.animationChanged.clean();
242
+ this.animationEnded.clean();
243
+ this.animationIndexChanged.clean();
244
+ this.animationStopped.clean();
245
+ super.cleanEvents();
246
+ }
247
+ }
248
+ Nodes['animation-player'] = AnimationPlayer;
249
+ //# sourceMappingURL=animation-player.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-player.js","sourceRoot":"","sources":["../../src/nodes/animation-player.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { Event } from '../events/event.js';
2
+ import { PrimaryNode } from './lib/enum.js';
3
+ import { Node, type NodeOptions } from './_node.js';
4
+ /**
5
+ * Options for the `AudioPlayer` node.
6
+ */
7
+ export interface AudioPlayerOptions extends NodeOptions<PrimaryNode.AudioPlayer> {
8
+ /**
9
+ * The **`soundId`** property defines which sound to play.
10
+ * Obtain a sound ID via `loadSound()`.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <audio-player soundId={shootSound} />
15
+ * ```
16
+ */
17
+ soundId: symbol;
18
+ /**
19
+ * The **`loop`** property determines whether the sound loops.
20
+ * @default false
21
+ */
22
+ loop?: boolean;
23
+ /**
24
+ * The **`volume`** property sets the playback volume (0 to 1).
25
+ * @default 1
26
+ */
27
+ volume?: number;
28
+ /**
29
+ * The **`playbackRate`** property sets the playback speed.
30
+ * @default 1
31
+ */
32
+ playbackRate?: number;
33
+ /**
34
+ * The **`persistUntilEnd`** property keeps the node alive until playback finishes.
35
+ * When `true`, calling `destroy()` while audio is playing will defer destruction
36
+ * until the sound ends. Useful for components that play a sound and are destroyed
37
+ * immediately after.
38
+ *
39
+ * @default false
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * // Pea plays splat sound and destroys itself.
44
+ * // AudioPlayer survives until the sound finishes.
45
+ * <audio-player ref={audio} soundId={SPLAT} persistUntilEnd />
46
+ * ```
47
+ */
48
+ persistUntilEnd?: boolean;
49
+ }
50
+ /**
51
+ * The **`AudioPlayer`** node plays audio buffers. It manages `AudioBufferSourceNode`
52
+ * and `GainNode` for volume control. The `AudioContext` is created lazily on first use.
53
+ *
54
+ * @example
55
+ * ```tsx
56
+ * import { useNode, useEvent } from 'dinix/hooks'
57
+ * import { PrimaryNode } from 'dinix/nodes/enum'
58
+ *
59
+ * function Gun() {
60
+ * const audio = useNode(PrimaryNode.AudioPlayer)
61
+ * const clickable = useNode(PrimaryNode.Clickable)
62
+ *
63
+ * useEvent(clickable, 'click', () => {
64
+ * audio.node.play()
65
+ * })
66
+ *
67
+ * return (
68
+ * <sprite ref={clickable} textureId={GUN}>
69
+ * <audio-player ref={audio} soundId={shootSound} volume={0.8} />
70
+ * </sprite>
71
+ * )
72
+ * }
73
+ * ```
74
+ *
75
+ * For one-shot sounds on components that destroy themselves, use `persistUntilEnd`:
76
+ *
77
+ * @example
78
+ * ```tsx
79
+ * function Pea({ position }: { position: VectorLike }) {
80
+ * const audio = useNode(PrimaryNode.AudioPlayer)
81
+ * const collider = useNode(PrimaryNode.Collider)
82
+ *
83
+ * useEvent(collider, 'colliderEntered', () => {
84
+ * audio.node.play()
85
+ * pea.node.destroy() // audio survives until sound finishes
86
+ * })
87
+ *
88
+ * return (
89
+ * <transform ref={pea} position={position}>
90
+ * <sprite textureId={PEA}>
91
+ * <collider ref={collider} ... />
92
+ * </sprite>
93
+ * <audio-player ref={audio} soundId={SPLAT} persistUntilEnd />
94
+ * </transform>
95
+ * )
96
+ * }
97
+ * ```
98
+ */
99
+ export declare class AudioPlayer extends Node<PrimaryNode.AudioPlayer> {
100
+ #private;
101
+ constructor(options: AudioPlayerOptions);
102
+ /** The `ended` event fires when playback reaches the end (non-looping only). */
103
+ ended: Event<[], "ended">;
104
+ /** The `error` event fires if playback fails. */
105
+ error: Event<[_err: Error], "error">;
106
+ /**
107
+ * Starts or resumes playback.
108
+ * @param offset Time in seconds to start from (default: 0 or pause position)
109
+ */
110
+ play(offset?: number): void;
111
+ /** Pauses playback without resetting position. */
112
+ pause(): void;
113
+ /** Stops playback and resets position to 0. */
114
+ stop(): void;
115
+ /** Whether the sound is currently playing. */
116
+ get isPlaying(): boolean;
117
+ /** Sets the volume (0 to 1). */
118
+ set volume(value: number);
119
+ /** Gets the current volume. */
120
+ get volume(): number;
121
+ /** Sets the playback rate. */
122
+ set playbackRate(value: number);
123
+ /** Gets the current playback rate. */
124
+ get playbackRate(): number;
125
+ /** @internal Cleans up audio resources on destroy. */
126
+ destroy(): void;
127
+ }
128
+ //# sourceMappingURL=audio-player.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-player.d.ts","sourceRoot":"","sources":["../../src/nodes/audio-player.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAKnD;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC;IAC9E;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,qBAAa,WAAY,SAAQ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;;gBAYhD,OAAO,EAAE,kBAAkB;IASvC,gFAAgF;IAChF,KAAK,qBAA+B;IAEpC,iDAAiD;IACjD,KAAK,gCAA0C;IAE/C;;;OAGG;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAsC3B,kDAAkD;IAClD,KAAK,IAAI,IAAI;IAOb,+CAA+C;IAC/C,IAAI,IAAI,IAAI;IAaZ,8CAA8C;IAC9C,IAAI,SAAS,YAEZ;IAED,gCAAgC;IAChC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAKvB;IAED,+BAA+B;IAC/B,IAAI,MAAM,IARQ,MAAM,CAUvB;IAED,8BAA8B;IAC9B,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAK7B;IAED,sCAAsC;IACtC,IAAI,YAAY,IARQ,MAAM,CAU7B;IAED,sDAAsD;IACtD,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,173 @@
1
+ import { Event } from '../events/event.js';
2
+ import { PrimaryNode } from './lib/enum.js';
3
+ import { Node } from './_node.js';
4
+ import { Nodes } from './lib/registry.js';
5
+ import { getAudioContext } from '../audio/audio-context.js';
6
+ import { getSound } from '../assets/load-sound.js';
7
+ /**
8
+ * The **`AudioPlayer`** node plays audio buffers. It manages `AudioBufferSourceNode`
9
+ * and `GainNode` for volume control. The `AudioContext` is created lazily on first use.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * import { useNode, useEvent } from 'dinix/hooks'
14
+ * import { PrimaryNode } from 'dinix/nodes/enum'
15
+ *
16
+ * function Gun() {
17
+ * const audio = useNode(PrimaryNode.AudioPlayer)
18
+ * const clickable = useNode(PrimaryNode.Clickable)
19
+ *
20
+ * useEvent(clickable, 'click', () => {
21
+ * audio.node.play()
22
+ * })
23
+ *
24
+ * return (
25
+ * <sprite ref={clickable} textureId={GUN}>
26
+ * <audio-player ref={audio} soundId={shootSound} volume={0.8} />
27
+ * </sprite>
28
+ * )
29
+ * }
30
+ * ```
31
+ *
32
+ * For one-shot sounds on components that destroy themselves, use `persistUntilEnd`:
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * function Pea({ position }: { position: VectorLike }) {
37
+ * const audio = useNode(PrimaryNode.AudioPlayer)
38
+ * const collider = useNode(PrimaryNode.Collider)
39
+ *
40
+ * useEvent(collider, 'colliderEntered', () => {
41
+ * audio.node.play()
42
+ * pea.node.destroy() // audio survives until sound finishes
43
+ * })
44
+ *
45
+ * return (
46
+ * <transform ref={pea} position={position}>
47
+ * <sprite textureId={PEA}>
48
+ * <collider ref={collider} ... />
49
+ * </sprite>
50
+ * <audio-player ref={audio} soundId={SPLAT} persistUntilEnd />
51
+ * </transform>
52
+ * )
53
+ * }
54
+ * ```
55
+ */
56
+ export class AudioPlayer extends Node {
57
+ #soundId;
58
+ #source = null;
59
+ #gainNode = null;
60
+ #loop;
61
+ #volume;
62
+ #playbackRate;
63
+ #persistUntilEnd;
64
+ #startTime = 0;
65
+ #pauseOffset = 0;
66
+ #isPlaying = false;
67
+ constructor(options) {
68
+ super(PrimaryNode.AudioPlayer, options);
69
+ this.#soundId = options.soundId;
70
+ this.#loop = options.loop ?? false;
71
+ this.#volume = options.volume ?? 1;
72
+ this.#playbackRate = options.playbackRate ?? 1;
73
+ this.#persistUntilEnd = options.persistUntilEnd ?? false;
74
+ }
75
+ /** The `ended` event fires when playback reaches the end (non-looping only). */
76
+ ended = new Event('ended', () => { });
77
+ /** The `error` event fires if playback fails. */
78
+ error = new Event('error', (_err) => { });
79
+ /**
80
+ * Starts or resumes playback.
81
+ * @param offset Time in seconds to start from (default: 0 or pause position)
82
+ */
83
+ play(offset) {
84
+ try {
85
+ const ctx = getAudioContext();
86
+ const buffer = getSound(this.#soundId);
87
+ this.stop();
88
+ this.#source = ctx.createBufferSource();
89
+ this.#gainNode = ctx.createGain();
90
+ this.#source.buffer = buffer;
91
+ this.#source.loop = this.#loop;
92
+ this.#source.playbackRate.value = this.#playbackRate;
93
+ this.#gainNode.gain.value = this.#volume;
94
+ this.#source.connect(this.#gainNode);
95
+ this.#gainNode.connect(ctx.destination);
96
+ this.#pauseOffset = offset ?? this.#pauseOffset;
97
+ this.#source.start(0, this.#pauseOffset);
98
+ this.#startTime = ctx.currentTime - this.#pauseOffset;
99
+ this.#isPlaying = true;
100
+ this.#source.onended = () => {
101
+ if (!this.#isPlaying)
102
+ return;
103
+ this.#isPlaying = false;
104
+ this.#pauseOffset = 0;
105
+ this.ended.emit();
106
+ if (this.#persistUntilEnd && this.isDestroyed) {
107
+ super.destroy();
108
+ }
109
+ };
110
+ }
111
+ catch (err) {
112
+ this.error.emit(err instanceof Error ? err : new Error(String(err)));
113
+ }
114
+ }
115
+ /** Pauses playback without resetting position. */
116
+ pause() {
117
+ if (!this.#isPlaying || this.#source == null)
118
+ return;
119
+ const ctx = getAudioContext();
120
+ this.#pauseOffset = (ctx.currentTime - this.#startTime) * this.#playbackRate;
121
+ this.stop();
122
+ }
123
+ /** Stops playback and resets position to 0. */
124
+ stop() {
125
+ if (this.#source != null) {
126
+ this.#source.onended = null;
127
+ this.#source.disconnect();
128
+ this.#source = null;
129
+ }
130
+ if (this.#gainNode != null) {
131
+ this.#gainNode.disconnect();
132
+ this.#gainNode = null;
133
+ }
134
+ this.#isPlaying = false;
135
+ }
136
+ /** Whether the sound is currently playing. */
137
+ get isPlaying() {
138
+ return this.#isPlaying;
139
+ }
140
+ /** Sets the volume (0 to 1). */
141
+ set volume(value) {
142
+ this.#volume = value;
143
+ if (this.#gainNode != null) {
144
+ this.#gainNode.gain.value = value;
145
+ }
146
+ }
147
+ /** Gets the current volume. */
148
+ get volume() {
149
+ return this.#volume;
150
+ }
151
+ /** Sets the playback rate. */
152
+ set playbackRate(value) {
153
+ this.#playbackRate = value;
154
+ if (this.#source != null) {
155
+ this.#source.playbackRate.value = value;
156
+ }
157
+ }
158
+ /** Gets the current playback rate. */
159
+ get playbackRate() {
160
+ return this.#playbackRate;
161
+ }
162
+ /** @internal Cleans up audio resources on destroy. */
163
+ destroy() {
164
+ if (this.#persistUntilEnd && this.#isPlaying) {
165
+ this.isDestroyed = true;
166
+ return;
167
+ }
168
+ this.stop();
169
+ super.destroy();
170
+ }
171
+ }
172
+ Nodes['audio-player'] = AudioPlayer;
173
+ //# sourceMappingURL=audio-player.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-player.js","sourceRoot":"","sources":["../../src/nodes/audio-player.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { Node, type NodeOptions } from './_node.js';
2
+ import { PrimaryNode } from './lib/enum.js';
3
+ /**
4
+ * Options for the `Group` node.
5
+ */
6
+ export interface GroupOptions extends NodeOptions<PrimaryNode.Group> {
7
+ }
8
+ /**
9
+ * The **`Group`** node is a lightweight container for organizing child nodes
10
+ * without spatial positioning. Unlike `Transform`, it does not manage position,
11
+ * rotation, or scale — it purely serves as a logical grouping mechanism.
12
+ *
13
+ * Use `Group` when you need to:
14
+ * - Batch-destroy a set of nodes by destroying the parent
15
+ * - Organize nodes in the hierarchy without affecting their position
16
+ * - Apply `deltaIncrease` to a subset of nodes
17
+ * - Attach a script to a group of nodes
18
+ *
19
+ * For nodes that need spatial positioning, use `Transform` instead.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * import { useNode } from 'dinix/hooks'
24
+ * import { PrimaryNode } from 'dinix/nodes/enum'
25
+ *
26
+ * function EnemySpawner() {
27
+ * const enemies = useNode(PrimaryNode.Group)
28
+ *
29
+ * useMount(() => {
30
+ * // All enemies are children of the group
31
+ * // Destroying the group destroys all enemies
32
+ * })
33
+ *
34
+ * return (
35
+ * <group ref={enemies}>
36
+ * <Enemy position={[0, 0]} />
37
+ * <Enemy position={[50, 0]} />
38
+ * </group>
39
+ * )
40
+ * }
41
+ * ```
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * // Slowing down a subset of nodes
46
+ * <group deltaIncrease={0.5}>
47
+ * <SlowEnemy />
48
+ * <SlowProjectile />
49
+ * </group>
50
+ * ```
51
+ */
52
+ export declare class Group extends Node<PrimaryNode.Group> {
53
+ constructor(options: GroupOptions);
54
+ }
55
+ //# sourceMappingURL=group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/nodes/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAG3C;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;CAAG;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,KAAM,SAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACpC,OAAO,EAAE,YAAY;CAGlC"}
@@ -0,0 +1,54 @@
1
+ import { Node } from './_node.js';
2
+ import { PrimaryNode } from './lib/enum.js';
3
+ import { Nodes } from './lib/registry.js';
4
+ /**
5
+ * The **`Group`** node is a lightweight container for organizing child nodes
6
+ * without spatial positioning. Unlike `Transform`, it does not manage position,
7
+ * rotation, or scale — it purely serves as a logical grouping mechanism.
8
+ *
9
+ * Use `Group` when you need to:
10
+ * - Batch-destroy a set of nodes by destroying the parent
11
+ * - Organize nodes in the hierarchy without affecting their position
12
+ * - Apply `deltaIncrease` to a subset of nodes
13
+ * - Attach a script to a group of nodes
14
+ *
15
+ * For nodes that need spatial positioning, use `Transform` instead.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * import { useNode } from 'dinix/hooks'
20
+ * import { PrimaryNode } from 'dinix/nodes/enum'
21
+ *
22
+ * function EnemySpawner() {
23
+ * const enemies = useNode(PrimaryNode.Group)
24
+ *
25
+ * useMount(() => {
26
+ * // All enemies are children of the group
27
+ * // Destroying the group destroys all enemies
28
+ * })
29
+ *
30
+ * return (
31
+ * <group ref={enemies}>
32
+ * <Enemy position={[0, 0]} />
33
+ * <Enemy position={[50, 0]} />
34
+ * </group>
35
+ * )
36
+ * }
37
+ * ```
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * // Slowing down a subset of nodes
42
+ * <group deltaIncrease={0.5}>
43
+ * <SlowEnemy />
44
+ * <SlowProjectile />
45
+ * </group>
46
+ * ```
47
+ */
48
+ export class Group extends Node {
49
+ constructor(options) {
50
+ super(PrimaryNode.Group, options);
51
+ }
52
+ }
53
+ Nodes.group = Group;
54
+ //# sourceMappingURL=group.js.map