@zylem/game-lib 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/README.md +23 -41
  2. package/dist/actions.d.ts +25 -0
  3. package/dist/actions.js +287 -8
  4. package/dist/actions.js.map +1 -0
  5. package/dist/behaviors.d.ts +106 -0
  6. package/dist/behaviors.js +396 -6
  7. package/dist/behaviors.js.map +1 -0
  8. package/dist/blueprints-BOCc3Wve.d.ts +26 -0
  9. package/dist/{src/lib/camera/zylem-camera.d.ts → camera-CpbDr4-V.d.ts} +48 -27
  10. package/dist/camera.d.ts +5 -0
  11. package/dist/camera.js +608 -4
  12. package/dist/camera.js.map +1 -0
  13. package/dist/core-CZhozNRH.d.ts +466 -0
  14. package/dist/core.d.ts +10 -0
  15. package/dist/core.js +5761 -9
  16. package/dist/core.js.map +1 -0
  17. package/dist/entities-BAxfJOkk.d.ts +307 -0
  18. package/dist/entities.d.ts +6 -0
  19. package/dist/entities.js +2284 -17
  20. package/dist/entities.js.map +1 -0
  21. package/dist/{src/lib/interfaces/entity.d.ts → entity-Bq_eNEDI.d.ts} +8 -6
  22. package/dist/entity-COvRtFNG.d.ts +395 -0
  23. package/dist/main.d.ts +211 -0
  24. package/dist/main.js +7600 -56
  25. package/dist/main.js.map +1 -0
  26. package/dist/moveable-B_vyA6cw.d.ts +67 -0
  27. package/dist/stage-types-CD21XoIU.d.ts +338 -0
  28. package/dist/stage.d.ts +46 -0
  29. package/dist/stage.js +2765 -4
  30. package/dist/stage.js.map +1 -0
  31. package/dist/transformable-CUhvyuYO.d.ts +67 -0
  32. package/package.json +11 -47
  33. package/dist/.vite/manifest.json +0 -716
  34. package/dist/assets/zylem-logo.png +0 -0
  35. package/dist/examples/00-readme-example.d.ts +0 -2
  36. package/dist/examples/00-readme-example.d.ts.map +0 -1
  37. package/dist/examples/01-basic.d.ts +0 -2
  38. package/dist/examples/01-basic.d.ts.map +0 -1
  39. package/dist/examples/01.1-basic-ball.d.ts +0 -9
  40. package/dist/examples/01.1-basic-ball.d.ts.map +0 -1
  41. package/dist/examples/01.2-ricochet-test.d.ts +0 -2
  42. package/dist/examples/01.2-ricochet-test.d.ts.map +0 -1
  43. package/dist/examples/01.3-rect.d.ts +0 -2
  44. package/dist/examples/01.3-rect.d.ts.map +0 -1
  45. package/dist/examples/02-input.d.ts +0 -2
  46. package/dist/examples/02-input.d.ts.map +0 -1
  47. package/dist/examples/03-stage-test/03-stage-test.d.ts +0 -2
  48. package/dist/examples/03-stage-test/03-stage-test.d.ts.map +0 -1
  49. package/dist/examples/03-stage-test/stage0.d.ts +0 -2
  50. package/dist/examples/03-stage-test/stage0.d.ts.map +0 -1
  51. package/dist/examples/03-stage-test/stage1.d.ts +0 -2
  52. package/dist/examples/03-stage-test/stage1.d.ts.map +0 -1
  53. package/dist/examples/03-stage-test/stage2.d.ts +0 -2
  54. package/dist/examples/03-stage-test/stage2.d.ts.map +0 -1
  55. package/dist/examples/03-stage-test/stage3.d.ts +0 -2
  56. package/dist/examples/03-stage-test/stage3.d.ts.map +0 -1
  57. package/dist/examples/03.1-stage-variable.d.ts +0 -2
  58. package/dist/examples/03.1-stage-variable.d.ts.map +0 -1
  59. package/dist/examples/04-vessel-test.d.ts +0 -18
  60. package/dist/examples/04-vessel-test.d.ts.map +0 -1
  61. package/dist/examples/05-camera-test.d.ts +0 -2
  62. package/dist/examples/05-camera-test.d.ts.map +0 -1
  63. package/dist/examples/06-entity-test.d.ts +0 -2
  64. package/dist/examples/06-entity-test.d.ts.map +0 -1
  65. package/dist/examples/07-behaviors.d.ts +0 -2
  66. package/dist/examples/07-behaviors.d.ts.map +0 -1
  67. package/dist/examples/07.01-behavior-context.d.ts +0 -2
  68. package/dist/examples/07.01-behavior-context.d.ts.map +0 -1
  69. package/dist/examples/08-pong.d.ts +0 -2
  70. package/dist/examples/08-pong.d.ts.map +0 -1
  71. package/dist/examples/08.01-breakout.d.ts +0 -2
  72. package/dist/examples/08.01-breakout.d.ts.map +0 -1
  73. package/dist/examples/09-space-invaders.d.ts +0 -2
  74. package/dist/examples/09-space-invaders.d.ts.map +0 -1
  75. package/dist/examples/10-asteroids.d.ts +0 -2
  76. package/dist/examples/10-asteroids.d.ts.map +0 -1
  77. package/dist/examples/11-2d-platformer.d.ts +0 -2
  78. package/dist/examples/11-2d-platformer.d.ts.map +0 -1
  79. package/dist/examples/12-3d-platformer.d.ts +0 -2
  80. package/dist/examples/12-3d-platformer.d.ts.map +0 -1
  81. package/dist/examples/13-fps.d.ts +0 -2
  82. package/dist/examples/13-fps.d.ts.map +0 -1
  83. package/dist/examples/14-strategy.d.ts +0 -2
  84. package/dist/examples/14-strategy.d.ts.map +0 -1
  85. package/dist/examples/15-zylem-planet-demo.d.ts +0 -2
  86. package/dist/examples/15-zylem-planet-demo.d.ts.map +0 -1
  87. package/dist/examples/16-timbotron.d.ts +0 -2
  88. package/dist/examples/16-timbotron.d.ts.map +0 -1
  89. package/dist/examples/17-stress-test.d.ts +0 -2
  90. package/dist/examples/17-stress-test.d.ts.map +0 -1
  91. package/dist/examples/architecture-test.d.ts +0 -2
  92. package/dist/examples/architecture-test.d.ts.map +0 -1
  93. package/dist/examples/utils.d.ts +0 -10
  94. package/dist/examples/utils.d.ts.map +0 -1
  95. package/dist/lib/actions/behaviors/actions.js +0 -35
  96. package/dist/lib/actions/behaviors/boundaries/boundary.js +0 -40
  97. package/dist/lib/actions/behaviors/ricochet/ricochet-2d-collision.js +0 -100
  98. package/dist/lib/actions/behaviors/ricochet/ricochet-2d-in-bounds.js +0 -37
  99. package/dist/lib/actions/behaviors/ricochet/ricochet.js +0 -6
  100. package/dist/lib/actions/capabilities/moveable.js +0 -108
  101. package/dist/lib/actions/capabilities/rotatable.js +0 -82
  102. package/dist/lib/actions/capabilities/transformable.js +0 -9
  103. package/dist/lib/actions/global-change.js +0 -40
  104. package/dist/lib/camera/camera.js +0 -19
  105. package/dist/lib/camera/fixed-2d.js +0 -30
  106. package/dist/lib/camera/perspective.js +0 -10
  107. package/dist/lib/camera/third-person.js +0 -42
  108. package/dist/lib/camera/zylem-camera.js +0 -208
  109. package/dist/lib/collision/collision-builder.js +0 -46
  110. package/dist/lib/collision/collision-delegate.js +0 -6
  111. package/dist/lib/collision/utils.js +0 -24
  112. package/dist/lib/collision/world.js +0 -77
  113. package/dist/lib/core/base-node.js +0 -61
  114. package/dist/lib/core/entity-asset-loader.js +0 -54
  115. package/dist/lib/core/lifecycle-base.js +0 -20
  116. package/dist/lib/core/preset-shader.js +0 -26
  117. package/dist/lib/core/three-addons/Timer.js +0 -103
  118. package/dist/lib/core/utility/nodes.js +0 -31
  119. package/dist/lib/core/utility/strings.js +0 -14
  120. package/dist/lib/core/utility/vector.js +0 -8
  121. package/dist/lib/core/vessel.js +0 -26
  122. package/dist/lib/debug/console/console-state.js +0 -11
  123. package/dist/lib/debug/debug-state.js +0 -40
  124. package/dist/lib/device/aspect-ratio.js +0 -44
  125. package/dist/lib/entities/actor.js +0 -122
  126. package/dist/lib/entities/box.js +0 -68
  127. package/dist/lib/entities/builder.js +0 -79
  128. package/dist/lib/entities/create.js +0 -31
  129. package/dist/lib/entities/delegates/animation.js +0 -58
  130. package/dist/lib/entities/delegates/debug.js +0 -71
  131. package/dist/lib/entities/delegates/loader.js +0 -19
  132. package/dist/lib/entities/destroy.js +0 -15
  133. package/dist/lib/entities/entity-factory.js +0 -24
  134. package/dist/lib/entities/entity.js +0 -121
  135. package/dist/lib/entities/plane.js +0 -81
  136. package/dist/lib/entities/rect.js +0 -160
  137. package/dist/lib/entities/sphere.js +0 -68
  138. package/dist/lib/entities/sprite.js +0 -125
  139. package/dist/lib/entities/text.js +0 -140
  140. package/dist/lib/entities/zone.js +0 -103
  141. package/dist/lib/game/game-canvas.js +0 -57
  142. package/dist/lib/game/game-config.js +0 -78
  143. package/dist/lib/game/game-default.js +0 -23
  144. package/dist/lib/game/game-retro-resolutions.js +0 -80
  145. package/dist/lib/game/game-state.js +0 -17
  146. package/dist/lib/game/game.js +0 -131
  147. package/dist/lib/game/zylem-game.js +0 -140
  148. package/dist/lib/graphics/geometries/XZPlaneGeometry.js +0 -34
  149. package/dist/lib/graphics/material.js +0 -64
  150. package/dist/lib/graphics/mesh.js +0 -14
  151. package/dist/lib/graphics/render-pass.js +0 -56
  152. package/dist/lib/graphics/shaders/fragment/debug.glsl.js +0 -23
  153. package/dist/lib/graphics/shaders/fragment/fire.glsl.js +0 -52
  154. package/dist/lib/graphics/shaders/fragment/standard.glsl.js +0 -11
  155. package/dist/lib/graphics/shaders/fragment/stars.glsl.js +0 -44
  156. package/dist/lib/graphics/shaders/vertex/debug.glsl.js +0 -15
  157. package/dist/lib/graphics/shaders/vertex/object-shader.glsl.js +0 -11
  158. package/dist/lib/graphics/shaders/vertex/standard.glsl.js +0 -9
  159. package/dist/lib/graphics/zylem-scene.js +0 -75
  160. package/dist/lib/input/gamepad-provider.js +0 -58
  161. package/dist/lib/input/input-manager.js +0 -70
  162. package/dist/lib/input/keyboard-provider.js +0 -120
  163. package/dist/lib/stage/debug-entity-cursor.js +0 -53
  164. package/dist/lib/stage/entity-spawner.js +0 -27
  165. package/dist/lib/stage/stage-debug-delegate.js +0 -100
  166. package/dist/lib/stage/stage-default.js +0 -32
  167. package/dist/lib/stage/stage-factory.js +0 -22
  168. package/dist/lib/stage/stage-manager.js +0 -49
  169. package/dist/lib/stage/stage-state.js +0 -36
  170. package/dist/lib/stage/stage.js +0 -67
  171. package/dist/lib/stage/zylem-stage.js +0 -268
  172. package/dist/lib/systems/transformable.system.js +0 -43
  173. package/dist/node_modules/.pnpm/idb-keyval@6.2.2/node_modules/idb-keyval/dist/index.js +0 -34
  174. package/dist/node_modules/.pnpm/msgpackr@1.11.5/node_modules/msgpackr/pack.js +0 -520
  175. package/dist/node_modules/.pnpm/msgpackr@1.11.5/node_modules/msgpackr/unpack.js +0 -672
  176. package/dist/src/api/actions.d.ts +0 -5
  177. package/dist/src/api/actions.d.ts.map +0 -1
  178. package/dist/src/api/behaviors.d.ts +0 -4
  179. package/dist/src/api/behaviors.d.ts.map +0 -1
  180. package/dist/src/api/camera.d.ts +0 -4
  181. package/dist/src/api/camera.d.ts.map +0 -1
  182. package/dist/src/api/core.d.ts +0 -6
  183. package/dist/src/api/core.d.ts.map +0 -1
  184. package/dist/src/api/entities.d.ts +0 -9
  185. package/dist/src/api/entities.d.ts.map +0 -1
  186. package/dist/src/api/main.d.ts +0 -32
  187. package/dist/src/api/main.d.ts.map +0 -1
  188. package/dist/src/api/stage.d.ts +0 -5
  189. package/dist/src/api/stage.d.ts.map +0 -1
  190. package/dist/src/lib/actions/behaviors/actions.d.ts +0 -11
  191. package/dist/src/lib/actions/behaviors/actions.d.ts.map +0 -1
  192. package/dist/src/lib/actions/behaviors/behavior.d.ts +0 -6
  193. package/dist/src/lib/actions/behaviors/behavior.d.ts.map +0 -1
  194. package/dist/src/lib/actions/behaviors/boundaries/boundary.d.ts +0 -37
  195. package/dist/src/lib/actions/behaviors/boundaries/boundary.d.ts.map +0 -1
  196. package/dist/src/lib/actions/behaviors/character-controller.d.ts +0 -6
  197. package/dist/src/lib/actions/behaviors/character-controller.d.ts.map +0 -1
  198. package/dist/src/lib/actions/behaviors/debug/debug-collision.d.ts +0 -6
  199. package/dist/src/lib/actions/behaviors/debug/debug-collision.d.ts.map +0 -1
  200. package/dist/src/lib/actions/behaviors/debug/debug-update.d.ts +0 -5
  201. package/dist/src/lib/actions/behaviors/debug/debug-update.d.ts.map +0 -1
  202. package/dist/src/lib/actions/behaviors/debug/debug.d.ts +0 -10
  203. package/dist/src/lib/actions/behaviors/debug/debug.d.ts.map +0 -1
  204. package/dist/src/lib/actions/behaviors/movement/movement-sequence-2d.d.ts +0 -24
  205. package/dist/src/lib/actions/behaviors/movement/movement-sequence-2d.d.ts.map +0 -1
  206. package/dist/src/lib/actions/behaviors/ricochet/ricochet-2d-collision.d.ts +0 -11
  207. package/dist/src/lib/actions/behaviors/ricochet/ricochet-2d-collision.d.ts.map +0 -1
  208. package/dist/src/lib/actions/behaviors/ricochet/ricochet-2d-in-bounds.d.ts +0 -12
  209. package/dist/src/lib/actions/behaviors/ricochet/ricochet-2d-in-bounds.d.ts.map +0 -1
  210. package/dist/src/lib/actions/behaviors/ricochet/ricochet.d.ts +0 -44
  211. package/dist/src/lib/actions/behaviors/ricochet/ricochet.d.ts.map +0 -1
  212. package/dist/src/lib/actions/behaviors/zylem-behavior.d.ts +0 -2
  213. package/dist/src/lib/actions/behaviors/zylem-behavior.d.ts.map +0 -1
  214. package/dist/src/lib/actions/capabilities/moveable.d.ts +0 -125
  215. package/dist/src/lib/actions/capabilities/moveable.d.ts.map +0 -1
  216. package/dist/src/lib/actions/capabilities/rotatable.d.ts +0 -111
  217. package/dist/src/lib/actions/capabilities/rotatable.d.ts.map +0 -1
  218. package/dist/src/lib/actions/capabilities/transformable.d.ts +0 -7
  219. package/dist/src/lib/actions/capabilities/transformable.d.ts.map +0 -1
  220. package/dist/src/lib/actions/global-change.d.ts +0 -23
  221. package/dist/src/lib/actions/global-change.d.ts.map +0 -1
  222. package/dist/src/lib/camera/camera.d.ts +0 -16
  223. package/dist/src/lib/camera/camera.d.ts.map +0 -1
  224. package/dist/src/lib/camera/fixed-2d.d.ts +0 -32
  225. package/dist/src/lib/camera/fixed-2d.d.ts.map +0 -1
  226. package/dist/src/lib/camera/perspective.d.ts +0 -9
  227. package/dist/src/lib/camera/perspective.d.ts.map +0 -1
  228. package/dist/src/lib/camera/third-person.d.ts +0 -32
  229. package/dist/src/lib/camera/third-person.d.ts.map +0 -1
  230. package/dist/src/lib/camera/zylem-camera.d.ts.map +0 -1
  231. package/dist/src/lib/collision/collision-builder.d.ts +0 -17
  232. package/dist/src/lib/collision/collision-builder.d.ts.map +0 -1
  233. package/dist/src/lib/collision/collision-delegate.d.ts +0 -6
  234. package/dist/src/lib/collision/collision-delegate.d.ts.map +0 -1
  235. package/dist/src/lib/collision/collision-group.d.ts +0 -11
  236. package/dist/src/lib/collision/collision-group.d.ts.map +0 -1
  237. package/dist/src/lib/collision/collision-mask.d.ts +0 -18
  238. package/dist/src/lib/collision/collision-mask.d.ts.map +0 -1
  239. package/dist/src/lib/collision/collision.d.ts +0 -19
  240. package/dist/src/lib/collision/collision.d.ts.map +0 -1
  241. package/dist/src/lib/collision/utils.d.ts +0 -15
  242. package/dist/src/lib/collision/utils.d.ts.map +0 -1
  243. package/dist/src/lib/collision/world.d.ts +0 -23
  244. package/dist/src/lib/collision/world.d.ts.map +0 -1
  245. package/dist/src/lib/core/asset-manager.d.ts +0 -2
  246. package/dist/src/lib/core/asset-manager.d.ts.map +0 -1
  247. package/dist/src/lib/core/base-node-life-cycle.d.ts +0 -54
  248. package/dist/src/lib/core/base-node-life-cycle.d.ts.map +0 -1
  249. package/dist/src/lib/core/base-node.d.ts +0 -36
  250. package/dist/src/lib/core/base-node.d.ts.map +0 -1
  251. package/dist/src/lib/core/blueprints.d.ts +0 -22
  252. package/dist/src/lib/core/blueprints.d.ts.map +0 -1
  253. package/dist/src/lib/core/entity-asset-loader.d.ts +0 -16
  254. package/dist/src/lib/core/entity-asset-loader.d.ts.map +0 -1
  255. package/dist/src/lib/core/errors.d.ts +0 -5
  256. package/dist/src/lib/core/errors.d.ts.map +0 -1
  257. package/dist/src/lib/core/flags.d.ts +0 -3
  258. package/dist/src/lib/core/flags.d.ts.map +0 -1
  259. package/dist/src/lib/core/index.d.ts +0 -5
  260. package/dist/src/lib/core/index.d.ts.map +0 -1
  261. package/dist/src/lib/core/interfaces.d.ts +0 -25
  262. package/dist/src/lib/core/interfaces.d.ts.map +0 -1
  263. package/dist/src/lib/core/lazy-loader.d.ts +0 -80
  264. package/dist/src/lib/core/lazy-loader.d.ts.map +0 -1
  265. package/dist/src/lib/core/lifecycle-base.d.ts +0 -17
  266. package/dist/src/lib/core/lifecycle-base.d.ts.map +0 -1
  267. package/dist/src/lib/core/node-interface.d.ts +0 -12
  268. package/dist/src/lib/core/node-interface.d.ts.map +0 -1
  269. package/dist/src/lib/core/preset-shader.d.ts +0 -8
  270. package/dist/src/lib/core/preset-shader.d.ts.map +0 -1
  271. package/dist/src/lib/core/three-addons/Timer.d.ts +0 -92
  272. package/dist/src/lib/core/three-addons/Timer.d.ts.map +0 -1
  273. package/dist/src/lib/core/utility/nodes.d.ts +0 -13
  274. package/dist/src/lib/core/utility/nodes.d.ts.map +0 -1
  275. package/dist/src/lib/core/utility/strings.d.ts +0 -3
  276. package/dist/src/lib/core/utility/strings.d.ts.map +0 -1
  277. package/dist/src/lib/core/utility/vector.d.ts +0 -8
  278. package/dist/src/lib/core/utility/vector.d.ts.map +0 -1
  279. package/dist/src/lib/core/vector.d.ts +0 -4
  280. package/dist/src/lib/core/vector.d.ts.map +0 -1
  281. package/dist/src/lib/core/vessel.d.ts +0 -13
  282. package/dist/src/lib/core/vessel.d.ts.map +0 -1
  283. package/dist/src/lib/debug/console/console-state.d.ts +0 -20
  284. package/dist/src/lib/debug/console/console-state.d.ts.map +0 -1
  285. package/dist/src/lib/debug/console/console-store.d.ts +0 -6
  286. package/dist/src/lib/debug/console/console-store.d.ts.map +0 -1
  287. package/dist/src/lib/debug/debug-state.d.ts +0 -38
  288. package/dist/src/lib/debug/debug-state.d.ts.map +0 -1
  289. package/dist/src/lib/debug/debug-store.d.ts +0 -15
  290. package/dist/src/lib/debug/debug-store.d.ts.map +0 -1
  291. package/dist/src/lib/debug/state-based-debug-loader.d.ts +0 -8
  292. package/dist/src/lib/debug/state-based-debug-loader.d.ts.map +0 -1
  293. package/dist/src/lib/device/aspect-ratio.d.ts +0 -38
  294. package/dist/src/lib/device/aspect-ratio.d.ts.map +0 -1
  295. package/dist/src/lib/device/desktop.d.ts +0 -2
  296. package/dist/src/lib/device/desktop.d.ts.map +0 -1
  297. package/dist/src/lib/device/mobile.d.ts +0 -2
  298. package/dist/src/lib/device/mobile.d.ts.map +0 -1
  299. package/dist/src/lib/device/tablet.d.ts +0 -2
  300. package/dist/src/lib/device/tablet.d.ts.map +0 -1
  301. package/dist/src/lib/entities/actor.d.ts +0 -44
  302. package/dist/src/lib/entities/actor.d.ts.map +0 -1
  303. package/dist/src/lib/entities/box.d.ts +0 -27
  304. package/dist/src/lib/entities/box.d.ts.map +0 -1
  305. package/dist/src/lib/entities/builder.d.ts +0 -28
  306. package/dist/src/lib/entities/builder.d.ts.map +0 -1
  307. package/dist/src/lib/entities/create.d.ts +0 -15
  308. package/dist/src/lib/entities/create.d.ts.map +0 -1
  309. package/dist/src/lib/entities/delegates/animation.d.ts +0 -33
  310. package/dist/src/lib/entities/delegates/animation.d.ts.map +0 -1
  311. package/dist/src/lib/entities/delegates/debug.d.ts +0 -29
  312. package/dist/src/lib/entities/delegates/debug.d.ts.map +0 -1
  313. package/dist/src/lib/entities/delegates/loader.d.ts +0 -12
  314. package/dist/src/lib/entities/delegates/loader.d.ts.map +0 -1
  315. package/dist/src/lib/entities/destroy.d.ts +0 -4
  316. package/dist/src/lib/entities/destroy.d.ts.map +0 -1
  317. package/dist/src/lib/entities/entity-factory.d.ts +0 -10
  318. package/dist/src/lib/entities/entity-factory.d.ts.map +0 -1
  319. package/dist/src/lib/entities/entity.d.ts +0 -98
  320. package/dist/src/lib/entities/entity.d.ts.map +0 -1
  321. package/dist/src/lib/entities/index.d.ts +0 -12
  322. package/dist/src/lib/entities/index.d.ts.map +0 -1
  323. package/dist/src/lib/entities/plane.d.ts +0 -36
  324. package/dist/src/lib/entities/plane.d.ts.map +0 -1
  325. package/dist/src/lib/entities/rect.d.ts +0 -63
  326. package/dist/src/lib/entities/rect.d.ts.map +0 -1
  327. package/dist/src/lib/entities/sphere.d.ts +0 -29
  328. package/dist/src/lib/entities/sphere.d.ts.map +0 -1
  329. package/dist/src/lib/entities/sprite.d.ts +0 -54
  330. package/dist/src/lib/entities/sprite.d.ts.map +0 -1
  331. package/dist/src/lib/entities/text.d.ts +0 -49
  332. package/dist/src/lib/entities/text.d.ts.map +0 -1
  333. package/dist/src/lib/entities/zone.d.ts +0 -54
  334. package/dist/src/lib/entities/zone.d.ts.map +0 -1
  335. package/dist/src/lib/game/game-blueprint.d.ts +0 -38
  336. package/dist/src/lib/game/game-blueprint.d.ts.map +0 -1
  337. package/dist/src/lib/game/game-canvas.d.ts +0 -35
  338. package/dist/src/lib/game/game-canvas.d.ts.map +0 -1
  339. package/dist/src/lib/game/game-config.d.ts +0 -59
  340. package/dist/src/lib/game/game-config.d.ts.map +0 -1
  341. package/dist/src/lib/game/game-default.d.ts +0 -14
  342. package/dist/src/lib/game/game-default.d.ts.map +0 -1
  343. package/dist/src/lib/game/game-interfaces.d.ts +0 -29
  344. package/dist/src/lib/game/game-interfaces.d.ts.map +0 -1
  345. package/dist/src/lib/game/game-retro-resolutions.d.ts +0 -25
  346. package/dist/src/lib/game/game-retro-resolutions.d.ts.map +0 -1
  347. package/dist/src/lib/game/game-state.d.ts +0 -11
  348. package/dist/src/lib/game/game-state.d.ts.map +0 -1
  349. package/dist/src/lib/game/game.d.ts +0 -39
  350. package/dist/src/lib/game/game.d.ts.map +0 -1
  351. package/dist/src/lib/game/zylem-game.d.ts +0 -58
  352. package/dist/src/lib/game/zylem-game.d.ts.map +0 -1
  353. package/dist/src/lib/graphics/geometries/XZPlaneGeometry.d.ts +0 -8
  354. package/dist/src/lib/graphics/geometries/XZPlaneGeometry.d.ts.map +0 -1
  355. package/dist/src/lib/graphics/material.d.ts +0 -29
  356. package/dist/src/lib/graphics/material.d.ts.map +0 -1
  357. package/dist/src/lib/graphics/mesh.d.ts +0 -19
  358. package/dist/src/lib/graphics/mesh.d.ts.map +0 -1
  359. package/dist/src/lib/graphics/render-pass.d.ts +0 -17
  360. package/dist/src/lib/graphics/render-pass.d.ts.map +0 -1
  361. package/dist/src/lib/graphics/zylem-scene.d.ts +0 -50
  362. package/dist/src/lib/graphics/zylem-scene.d.ts.map +0 -1
  363. package/dist/src/lib/input/gamepad-provider.d.ts +0 -14
  364. package/dist/src/lib/input/gamepad-provider.d.ts.map +0 -1
  365. package/dist/src/lib/input/input-manager.d.ts +0 -15
  366. package/dist/src/lib/input/input-manager.d.ts.map +0 -1
  367. package/dist/src/lib/input/input-provider.d.ts +0 -7
  368. package/dist/src/lib/input/input-provider.d.ts.map +0 -1
  369. package/dist/src/lib/input/input.d.ts +0 -48
  370. package/dist/src/lib/input/input.d.ts.map +0 -1
  371. package/dist/src/lib/input/keyboard-provider.d.ts +0 -21
  372. package/dist/src/lib/input/keyboard-provider.d.ts.map +0 -1
  373. package/dist/src/lib/interfaces/entity.d.ts.map +0 -1
  374. package/dist/src/lib/sounds/index.d.ts +0 -3
  375. package/dist/src/lib/sounds/index.d.ts.map +0 -1
  376. package/dist/src/lib/sounds/ping-pong-sound.d.ts +0 -5
  377. package/dist/src/lib/sounds/ping-pong-sound.d.ts.map +0 -1
  378. package/dist/src/lib/sounds/ricochet-sound.d.ts +0 -5
  379. package/dist/src/lib/sounds/ricochet-sound.d.ts.map +0 -1
  380. package/dist/src/lib/stage/debug-entity-cursor.d.ts +0 -24
  381. package/dist/src/lib/stage/debug-entity-cursor.d.ts.map +0 -1
  382. package/dist/src/lib/stage/entity-spawner.d.ts +0 -9
  383. package/dist/src/lib/stage/entity-spawner.d.ts.map +0 -1
  384. package/dist/src/lib/stage/stage-camera-debug-delegate.d.ts +0 -14
  385. package/dist/src/lib/stage/stage-camera-debug-delegate.d.ts.map +0 -1
  386. package/dist/src/lib/stage/stage-debug-delegate.d.ts +0 -26
  387. package/dist/src/lib/stage/stage-debug-delegate.d.ts.map +0 -1
  388. package/dist/src/lib/stage/stage-default.d.ts +0 -3
  389. package/dist/src/lib/stage/stage-default.d.ts.map +0 -1
  390. package/dist/src/lib/stage/stage-factory.d.ts +0 -6
  391. package/dist/src/lib/stage/stage-factory.d.ts.map +0 -1
  392. package/dist/src/lib/stage/stage-manager.d.ts +0 -30
  393. package/dist/src/lib/stage/stage-manager.d.ts.map +0 -1
  394. package/dist/src/lib/stage/stage-state.d.ts +0 -14
  395. package/dist/src/lib/stage/stage-state.d.ts.map +0 -1
  396. package/dist/src/lib/stage/stage.d.ts +0 -35
  397. package/dist/src/lib/stage/stage.d.ts.map +0 -1
  398. package/dist/src/lib/stage/zylem-stage.d.ts +0 -128
  399. package/dist/src/lib/stage/zylem-stage.d.ts.map +0 -1
  400. package/dist/src/lib/systems/test-system.d.ts +0 -2
  401. package/dist/src/lib/systems/test-system.d.ts.map +0 -1
  402. package/dist/src/lib/systems/transformable.system.d.ts +0 -25
  403. package/dist/src/lib/systems/transformable.system.d.ts.map +0 -1
  404. package/dist/src/lib/types/entity-types.d.ts +0 -24
  405. package/dist/src/lib/types/entity-types.d.ts.map +0 -1
  406. package/dist/src/lib/types/index.d.ts +0 -3
  407. package/dist/src/lib/types/index.d.ts.map +0 -1
  408. package/dist/src/lib/types/stage-types.d.ts +0 -26
  409. package/dist/src/lib/types/stage-types.d.ts.map +0 -1
  410. package/dist/src/lib/ui/Debug.d.ts +0 -6
  411. package/dist/src/lib/ui/Debug.d.ts.map +0 -1
  412. package/dist/src/lib/ui/console/Console.d.ts +0 -7
  413. package/dist/src/lib/ui/console/Console.d.ts.map +0 -1
  414. package/dist/src/lib/ui/debug-panel/AccordionMenu.d.ts +0 -7
  415. package/dist/src/lib/ui/debug-panel/AccordionMenu.d.ts.map +0 -1
  416. package/dist/src/lib/ui/debug-panel/Menu.d.ts +0 -6
  417. package/dist/src/lib/ui/debug-panel/Menu.d.ts.map +0 -1
  418. package/dist/src/lib/ui/debug-panel/sections/EntitiesSection.d.ts +0 -4
  419. package/dist/src/lib/ui/debug-panel/sections/EntitiesSection.d.ts.map +0 -1
  420. package/dist/src/lib/ui/debug-panel/sections/GameSection.d.ts +0 -3
  421. package/dist/src/lib/ui/debug-panel/sections/GameSection.d.ts.map +0 -1
  422. package/dist/src/lib/ui/debug-panel/sections/StagesSection.d.ts +0 -3
  423. package/dist/src/lib/ui/debug-panel/sections/StagesSection.d.ts.map +0 -1
  424. package/dist/src/lib/ui/debug-panel/sections/all.d.ts +0 -4
  425. package/dist/src/lib/ui/debug-panel/sections/all.d.ts.map +0 -1
  426. package/dist/src/lib/ui/toolbar/Toolbar.d.ts +0 -6
  427. package/dist/src/lib/ui/toolbar/Toolbar.d.ts.map +0 -1
  428. package/dist/tests/e2e/basic-game.spec.d.ts +0 -2
  429. package/dist/tests/e2e/basic-game.spec.d.ts.map +0 -1
  430. package/dist/tests/integration/debug.sim.spec.d.ts +0 -2
  431. package/dist/tests/integration/debug.sim.spec.d.ts.map +0 -1
  432. package/dist/tests/unit/collision/collision.spec.d.ts +0 -2
  433. package/dist/tests/unit/collision/collision.spec.d.ts.map +0 -1
  434. package/dist/tests/unit/core/base-node.spec.d.ts +0 -2
  435. package/dist/tests/unit/core/base-node.spec.d.ts.map +0 -1
  436. package/dist/tests/unit/core/game.spec.d.ts +0 -2
  437. package/dist/tests/unit/core/game.spec.d.ts.map +0 -1
  438. package/dist/tests/unit/core/stage.spec.d.ts +0 -2
  439. package/dist/tests/unit/core/stage.spec.d.ts.map +0 -1
  440. package/dist/tests/unit/core/vessel.spec.d.ts +0 -2
  441. package/dist/tests/unit/core/vessel.spec.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Zylem
1
+ # Zylem Game Library
2
2
 
3
3
  A powerful and easy-to-use framework for creating simple 3D digital interactive applications using TypeScript.
4
4
 
@@ -19,45 +19,26 @@ The goal is to give you tools to build simple 3D games. It's basically comprised
19
19
  - Game state management with Valtio [Valtio](https://valtio.dev/)
20
20
  - Simplified input handling (gamepad, keyboard, mouse)
21
21
 
22
- >Note: This project is still in alpha. There are unfinished features and some APIs that may change.
22
+ > Note: This project is still in alpha. There are unfinished features and some APIs that may change.
23
23
 
24
24
  ## Installation
25
25
 
26
26
  ```bash
27
- pnpm install
28
- ```
29
-
30
- ```bash
31
- npm run dev
27
+ npm install @zylem/game-lib
32
28
  ```
33
29
 
34
30
  ## Getting started with a basic game
35
31
 
36
32
  [Basic example](https://github.com/zylem-game-lib/zylem-basic)
37
33
 
38
- ```html
39
- <!DOCTYPE html>
40
- <html lang="en">
41
- <head>
42
- <meta charset="UTF-8" />
43
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
44
- <title>Zylem - Basic Usage</title>
45
- <link rel="stylesheet" href="./index.css" />
46
- </head>
47
- <body>
48
- <script src="./src/index.ts" type="module"></script>
49
- </body>
50
- </html>
51
- ```
52
-
53
34
  ```typescript
54
35
  /**
55
36
  * @author: Tim Cool
56
- *
37
+ *
57
38
  * @description: basic ball movement
58
39
  * the ball can be controlled with the arrow keys or gamepad
59
40
  * the ball cannot go outside the boundaries
60
- */
41
+ */
61
42
  import { boundary2d, createGame, makeMoveable, sphere } from '@zylem/game-lib';
62
43
 
63
44
  // Creates a moveable sphere
@@ -65,29 +46,30 @@ const ball = makeMoveable(await sphere());
65
46
 
66
47
  // when the ball is updated, move it based on the inputs
67
48
  ball.onUpdate(({ me, inputs, delta }) => {
68
- // get the horizontal and vertical inputs from player one's controller
69
- const { Horizontal, Vertical } = inputs.p1.axes;
70
- // set the speed of the ball based on the delta time for smoother movement
71
- const speed = 600 * delta;
72
- // move the ball based on the inputs and the speed
73
- me.moveXY(
74
- Horizontal.value * speed,
75
- -Vertical.value * speed
76
- );
49
+ // get the horizontal and vertical inputs from player one's controller
50
+ const { Horizontal, Vertical } = inputs.p1.axes;
51
+ // set the speed of the ball based on the delta time for smoother movement
52
+ const speed = 600 * delta;
53
+ // move the ball based on the inputs and the speed
54
+ me.moveXY(Horizontal.value * speed, -Vertical.value * speed);
77
55
  });
78
56
 
79
57
  // add a boundary behavior to the ball
80
58
  ball.addBehavior(
81
- boundary2d({
82
- boundaries: {
83
- top: 3,
84
- bottom: -3,
85
- left: -6,
86
- right: 6,
87
- },
88
- })
59
+ boundary2d({
60
+ boundaries: {
61
+ top: 3,
62
+ bottom: -3,
63
+ left: -6,
64
+ right: 6,
65
+ },
66
+ }),
89
67
  );
90
68
 
91
69
  // start the game with the ball
92
70
  createGame(ball).start();
93
71
  ```
72
+
73
+ ## Development
74
+
75
+ This package is part of the Zylem monorepo. See the main repository README for development setup.
@@ -0,0 +1,25 @@
1
+ export { m as makeMoveable } from './moveable-B_vyA6cw.js';
2
+ export { m as makeRotatable, a as makeTransformable } from './transformable-CUhvyuYO.js';
3
+ import 'three';
4
+ import '@dimforge/rapier3d-compat';
5
+
6
+ declare function wait(delay: number, callback: Function): void;
7
+ declare const actionOnPress: (isPressed: boolean, callback: Function) => void;
8
+ declare const actionOnRelease: (isPressed: boolean, callback: Function) => void;
9
+ type CooldownOptions = {
10
+ timer: number;
11
+ immediate?: boolean;
12
+ };
13
+ declare const actionWithCooldown: ({ timer, immediate }: CooldownOptions, callback: Function, update: Function) => void;
14
+ declare const actionWithThrottle: (timer: number, callback: Function) => void;
15
+
16
+ declare const actions_actionOnPress: typeof actionOnPress;
17
+ declare const actions_actionOnRelease: typeof actionOnRelease;
18
+ declare const actions_actionWithCooldown: typeof actionWithCooldown;
19
+ declare const actions_actionWithThrottle: typeof actionWithThrottle;
20
+ declare const actions_wait: typeof wait;
21
+ declare namespace actions {
22
+ export { actions_actionOnPress as actionOnPress, actions_actionOnRelease as actionOnRelease, actions_actionWithCooldown as actionWithCooldown, actions_actionWithThrottle as actionWithThrottle, actions_wait as wait };
23
+ }
24
+
25
+ export { actions };
package/dist/actions.js CHANGED
@@ -1,10 +1,289 @@
1
- import * as o from "./lib/actions/behaviors/actions.js";
2
- import { makeMoveable as a } from "./lib/actions/capabilities/moveable.js";
3
- import { makeRotatable as t } from "./lib/actions/capabilities/rotatable.js";
4
- import { makeTransformable as p } from "./lib/actions/capabilities/transformable.js";
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ // src/lib/actions/behaviors/actions.ts
8
+ var actions_exports = {};
9
+ __export(actions_exports, {
10
+ actionOnPress: () => actionOnPress,
11
+ actionOnRelease: () => actionOnRelease,
12
+ actionWithCooldown: () => actionWithCooldown,
13
+ actionWithThrottle: () => actionWithThrottle,
14
+ wait: () => wait
15
+ });
16
+ function wait(delay, callback) {
17
+ setTimeout(callback, delay);
18
+ }
19
+ var actionOnPress = /* @__PURE__ */ (() => {
20
+ let buttonPressed = false;
21
+ return (isPressed, callback) => {
22
+ if (isPressed && !buttonPressed) {
23
+ buttonPressed = true;
24
+ callback();
25
+ } else if (!isPressed) {
26
+ buttonPressed = false;
27
+ }
28
+ };
29
+ })();
30
+ var actionOnRelease = /* @__PURE__ */ (() => {
31
+ let buttonPressed = false;
32
+ return (isPressed, callback) => {
33
+ if (!isPressed && buttonPressed) {
34
+ buttonPressed = false;
35
+ callback();
36
+ } else if (isPressed) {
37
+ buttonPressed = true;
38
+ }
39
+ };
40
+ })();
41
+ var actionWithCooldown = /* @__PURE__ */ (() => {
42
+ let lastExecutionTime = -Infinity;
43
+ let flagImmediate = false;
44
+ return ({ timer, immediate = true }, callback, update) => {
45
+ let currentTime = Date.now();
46
+ if (!flagImmediate && !immediate) {
47
+ flagImmediate = true;
48
+ lastExecutionTime = currentTime;
49
+ }
50
+ const delta = currentTime - lastExecutionTime;
51
+ if (delta >= timer) {
52
+ lastExecutionTime = currentTime;
53
+ callback();
54
+ }
55
+ update({ delta });
56
+ };
57
+ })();
58
+ var actionWithThrottle = /* @__PURE__ */ (() => {
59
+ let lastExecutionTime = 0;
60
+ return (timer, callback) => {
61
+ const currentTime = Date.now();
62
+ const delta = currentTime - lastExecutionTime;
63
+ if (delta >= timer) {
64
+ lastExecutionTime = currentTime;
65
+ callback();
66
+ }
67
+ };
68
+ })();
69
+
70
+ // src/lib/actions/capabilities/moveable.ts
71
+ import { Vector3 } from "three";
72
+ function moveX(entity, delta) {
73
+ if (!entity.body) return;
74
+ const currentVelocity = entity.body.linvel();
75
+ const newVelocity = new Vector3(delta, currentVelocity.y, currentVelocity.z);
76
+ entity.body.setLinvel(newVelocity, true);
77
+ }
78
+ function moveY(entity, delta) {
79
+ if (!entity.body) return;
80
+ const currentVelocity = entity.body.linvel();
81
+ const newVelocity = new Vector3(currentVelocity.x, delta, currentVelocity.z);
82
+ entity.body.setLinvel(newVelocity, true);
83
+ }
84
+ function moveZ(entity, delta) {
85
+ if (!entity.body) return;
86
+ const currentVelocity = entity.body.linvel();
87
+ const newVelocity = new Vector3(currentVelocity.x, currentVelocity.y, delta);
88
+ entity.body.setLinvel(newVelocity, true);
89
+ }
90
+ function moveXY(entity, deltaX, deltaY) {
91
+ if (!entity.body) return;
92
+ const currentVelocity = entity.body.linvel();
93
+ const newVelocity = new Vector3(deltaX, deltaY, currentVelocity.z);
94
+ entity.body.setLinvel(newVelocity, true);
95
+ }
96
+ function moveXZ(entity, deltaX, deltaZ) {
97
+ if (!entity.body) return;
98
+ const currentVelocity = entity.body.linvel();
99
+ const newVelocity = new Vector3(deltaX, currentVelocity.y, deltaZ);
100
+ entity.body.setLinvel(newVelocity, true);
101
+ }
102
+ function move(entity, vector) {
103
+ if (!entity.body) return;
104
+ const currentVelocity = entity.body.linvel();
105
+ const newVelocity = new Vector3(
106
+ currentVelocity.x + vector.x,
107
+ currentVelocity.y + vector.y,
108
+ currentVelocity.z + vector.z
109
+ );
110
+ entity.body.setLinvel(newVelocity, true);
111
+ }
112
+ function resetVelocity(entity) {
113
+ if (!entity.body) return;
114
+ entity.body.setLinvel(new Vector3(0, 0, 0), true);
115
+ entity.body.setLinearDamping(5);
116
+ }
117
+ function moveForwardXY(entity, delta, rotation2DAngle) {
118
+ const deltaX = Math.sin(-rotation2DAngle) * delta;
119
+ const deltaY = Math.cos(-rotation2DAngle) * delta;
120
+ moveXY(entity, deltaX, deltaY);
121
+ }
122
+ function getPosition(entity) {
123
+ if (!entity.body) return null;
124
+ return entity.body.translation();
125
+ }
126
+ function getVelocity(entity) {
127
+ if (!entity.body) return null;
128
+ return entity.body.linvel();
129
+ }
130
+ function setPosition(entity, x, y, z) {
131
+ if (!entity.body) return;
132
+ entity.body.setTranslation({ x, y, z }, true);
133
+ }
134
+ function setPositionX(entity, x) {
135
+ if (!entity.body) return;
136
+ const { y, z } = entity.body.translation();
137
+ entity.body.setTranslation({ x, y, z }, true);
138
+ }
139
+ function setPositionY(entity, y) {
140
+ if (!entity.body) return;
141
+ const { x, z } = entity.body.translation();
142
+ entity.body.setTranslation({ x, y, z }, true);
143
+ }
144
+ function setPositionZ(entity, z) {
145
+ if (!entity.body) return;
146
+ const { x, y } = entity.body.translation();
147
+ entity.body.setTranslation({ x, y, z }, true);
148
+ }
149
+ function wrapAroundXY(entity, boundsX, boundsY) {
150
+ const position = getPosition(entity);
151
+ if (!position) return;
152
+ const { x, y } = position;
153
+ const newX = x > boundsX ? -boundsX : x < -boundsX ? boundsX : x;
154
+ const newY = y > boundsY ? -boundsY : y < -boundsY ? boundsY : y;
155
+ if (newX !== x || newY !== y) {
156
+ setPosition(entity, newX, newY, 0);
157
+ }
158
+ }
159
+ function wrapAround3D(entity, boundsX, boundsY, boundsZ) {
160
+ const position = getPosition(entity);
161
+ if (!position) return;
162
+ const { x, y, z } = position;
163
+ const newX = x > boundsX ? -boundsX : x < -boundsX ? boundsX : x;
164
+ const newY = y > boundsY ? -boundsY : y < -boundsY ? boundsY : y;
165
+ const newZ = z > boundsZ ? -boundsZ : z < -boundsZ ? boundsZ : z;
166
+ if (newX !== x || newY !== y || newZ !== z) {
167
+ setPosition(entity, newX, newY, newZ);
168
+ }
169
+ }
170
+ function makeMoveable(entity) {
171
+ const moveable = entity;
172
+ moveable.moveX = (delta) => moveX(entity, delta);
173
+ moveable.moveY = (delta) => moveY(entity, delta);
174
+ moveable.moveZ = (delta) => moveZ(entity, delta);
175
+ moveable.moveXY = (deltaX, deltaY) => moveXY(entity, deltaX, deltaY);
176
+ moveable.moveXZ = (deltaX, deltaZ) => moveXZ(entity, deltaX, deltaZ);
177
+ moveable.move = (vector) => move(entity, vector);
178
+ moveable.resetVelocity = () => resetVelocity(entity);
179
+ moveable.moveForwardXY = (delta, rotation2DAngle) => moveForwardXY(entity, delta, rotation2DAngle);
180
+ moveable.getPosition = () => getPosition(entity);
181
+ moveable.getVelocity = () => getVelocity(entity);
182
+ moveable.setPosition = (x, y, z) => setPosition(entity, x, y, z);
183
+ moveable.setPositionX = (x) => setPositionX(entity, x);
184
+ moveable.setPositionY = (y) => setPositionY(entity, y);
185
+ moveable.setPositionZ = (z) => setPositionZ(entity, z);
186
+ moveable.wrapAroundXY = (boundsX, boundsY) => wrapAroundXY(entity, boundsX, boundsY);
187
+ moveable.wrapAround3D = (boundsX, boundsY, boundsZ) => wrapAround3D(entity, boundsX, boundsY, boundsZ);
188
+ return moveable;
189
+ }
190
+
191
+ // src/lib/actions/capabilities/rotatable.ts
192
+ import { Euler, Vector3 as Vector32, MathUtils, Quaternion } from "three";
193
+ function rotateInDirection(entity, moveVector) {
194
+ if (!entity.body) return;
195
+ const rotate = Math.atan2(-moveVector.x, moveVector.z);
196
+ rotateYEuler(entity, rotate);
197
+ }
198
+ function rotateYEuler(entity, amount) {
199
+ rotateEuler(entity, new Vector32(0, -amount, 0));
200
+ }
201
+ function rotateEuler(entity, rotation) {
202
+ if (!entity.group) return;
203
+ const euler = new Euler(rotation.x, rotation.y, rotation.z);
204
+ entity.group.setRotationFromEuler(euler);
205
+ }
206
+ function rotateY(entity, delta) {
207
+ setRotationY(entity, delta);
208
+ }
209
+ function rotateZ(entity, delta) {
210
+ setRotationZ(entity, delta);
211
+ }
212
+ function setRotationY(entity, y) {
213
+ if (!entity.body) return;
214
+ const halfAngle = y / 2;
215
+ const w = Math.cos(halfAngle);
216
+ const yComponent = Math.sin(halfAngle);
217
+ entity.body.setRotation({ w, x: 0, y: yComponent, z: 0 }, true);
218
+ }
219
+ function setRotationDegreesY(entity, y) {
220
+ if (!entity.body) return;
221
+ setRotationY(entity, MathUtils.degToRad(y));
222
+ }
223
+ function setRotationX(entity, x) {
224
+ if (!entity.body) return;
225
+ const halfAngle = x / 2;
226
+ const w = Math.cos(halfAngle);
227
+ const xComponent = Math.sin(halfAngle);
228
+ entity.body.setRotation({ w, x: xComponent, y: 0, z: 0 }, true);
229
+ }
230
+ function setRotationDegreesX(entity, x) {
231
+ if (!entity.body) return;
232
+ setRotationX(entity, MathUtils.degToRad(x));
233
+ }
234
+ function setRotationZ(entity, z) {
235
+ if (!entity.body) return;
236
+ const halfAngle = z / 2;
237
+ const w = Math.cos(halfAngle);
238
+ const zComponent = Math.sin(halfAngle);
239
+ entity.body.setRotation({ w, x: 0, y: 0, z: zComponent }, true);
240
+ }
241
+ function setRotationDegreesZ(entity, z) {
242
+ if (!entity.body) return;
243
+ setRotationZ(entity, MathUtils.degToRad(z));
244
+ }
245
+ function setRotation(entity, x, y, z) {
246
+ if (!entity.body) return;
247
+ const quat = new Quaternion().setFromEuler(new Euler(x, y, z));
248
+ entity.body.setRotation({ w: quat.w, x: quat.x, y: quat.y, z: quat.z }, true);
249
+ }
250
+ function setRotationDegrees(entity, x, y, z) {
251
+ if (!entity.body) return;
252
+ setRotation(entity, MathUtils.degToRad(x), MathUtils.degToRad(y), MathUtils.degToRad(z));
253
+ }
254
+ function getRotation(entity) {
255
+ if (!entity.body) return null;
256
+ return entity.body.rotation();
257
+ }
258
+ function makeRotatable(entity) {
259
+ const rotatableEntity = entity;
260
+ rotatableEntity.rotateInDirection = (moveVector) => rotateInDirection(entity, moveVector);
261
+ rotatableEntity.rotateYEuler = (amount) => rotateYEuler(entity, amount);
262
+ rotatableEntity.rotateEuler = (rotation) => rotateEuler(entity, rotation);
263
+ rotatableEntity.rotateY = (delta) => rotateY(entity, delta);
264
+ rotatableEntity.rotateZ = (delta) => rotateZ(entity, delta);
265
+ rotatableEntity.setRotationY = (y) => setRotationY(entity, y);
266
+ rotatableEntity.setRotationX = (x) => setRotationX(entity, x);
267
+ rotatableEntity.setRotationZ = (z) => setRotationZ(entity, z);
268
+ rotatableEntity.setRotationDegreesY = (y) => setRotationDegreesY(entity, y);
269
+ rotatableEntity.setRotationDegreesX = (x) => setRotationDegreesX(entity, x);
270
+ rotatableEntity.setRotationDegreesZ = (z) => setRotationDegreesZ(entity, z);
271
+ rotatableEntity.setRotationDegrees = (x, y, z) => setRotationDegrees(entity, x, y, z);
272
+ rotatableEntity.setRotation = (x, y, z) => setRotation(entity, x, y, z);
273
+ rotatableEntity.getRotation = () => getRotation(entity);
274
+ return rotatableEntity;
275
+ }
276
+
277
+ // src/lib/actions/capabilities/transformable.ts
278
+ function makeTransformable(entity) {
279
+ const withMovement = makeMoveable(entity);
280
+ const withRotation = makeRotatable(withMovement);
281
+ return withRotation;
282
+ }
5
283
  export {
6
- o as actions,
7
- a as makeMoveable,
8
- t as makeRotatable,
9
- p as makeTransformable
284
+ actions_exports as actions,
285
+ makeMoveable,
286
+ makeRotatable,
287
+ makeTransformable
10
288
  };
289
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/actions/behaviors/actions.ts","../src/lib/actions/capabilities/moveable.ts","../src/lib/actions/capabilities/rotatable.ts","../src/lib/actions/capabilities/transformable.ts"],"sourcesContent":["// TODO: rewrite these functions to work well within game loop\n\nexport function wait(delay: number, callback: Function) {\n\t// TODO: needs ticks from loop\n\tsetTimeout(callback, delay);\n}\n\nexport const actionOnPress = (() => {\n\tlet buttonPressed = false;\n\n\treturn (isPressed: boolean, callback: Function) => {\n\t\tif (isPressed && !buttonPressed) {\n\t\t\tbuttonPressed = true;\n\t\t\tcallback();\n\t\t} else if (!isPressed) {\n\t\t\tbuttonPressed = false;\n\t\t}\n\t};\n})();\n\nexport const actionOnRelease = (() => {\n\tlet buttonPressed = false;\n\n\treturn (isPressed: boolean, callback: Function) => {\n\t\tif (!isPressed && buttonPressed) {\n\t\t\tbuttonPressed = false;\n\t\t\tcallback();\n\t\t} else if (isPressed) {\n\t\t\tbuttonPressed = true;\n\t\t}\n\t};\n})();\n\ntype CooldownOptions = { timer: number; immediate?: boolean };\n\nexport const actionWithCooldown = (() => {\n\tlet lastExecutionTime = -Infinity;\n\tlet flagImmediate = false;\n\n\treturn ({ timer, immediate = true }: CooldownOptions, callback: Function, update: Function) => {\n\t\tlet currentTime = Date.now();\n\n\t\tif (!flagImmediate && !immediate) {\n\t\t\tflagImmediate = true;\n\t\t\tlastExecutionTime = currentTime;\n\t\t}\n\n\t\tconst delta = currentTime - lastExecutionTime;\n\n\t\tif (delta >= timer) {\n\t\t\tlastExecutionTime = currentTime;\n\t\t\tcallback();\n\t\t}\n\t\tupdate({ delta });\n\t};\n})();\n\nexport const actionWithThrottle = (() => {\n\tlet lastExecutionTime = 0;\n\n\treturn (timer: number, callback: Function) => {\n\t\tconst currentTime = Date.now();\n\t\tconst delta = currentTime - lastExecutionTime;\n\n\t\tif (delta >= timer) {\n\t\t\tlastExecutionTime = currentTime;\n\t\t\tcallback();\n\t\t}\n\t};\n})();\n","import { Vector3 } from 'three';\nimport { RigidBody, Vector } from '@dimforge/rapier3d-compat';\n\nexport interface EntityWithBody {\n\tbody: RigidBody | null;\n}\n\n/**\n * Move an entity along the X axis, preserving other velocities\n */\nexport function moveX(entity: EntityWithBody, delta: number): void {\n\tif (!entity.body) return;\n\tconst currentVelocity = entity.body.linvel();\n\tconst newVelocity = new Vector3(delta, currentVelocity.y, currentVelocity.z);\n\tentity.body.setLinvel(newVelocity, true);\n}\n\n/**\n * Move an entity along the Y axis, preserving other velocities\n */\nexport function moveY(entity: EntityWithBody, delta: number): void {\n\tif (!entity.body) return;\n\tconst currentVelocity = entity.body.linvel();\n\tconst newVelocity = new Vector3(currentVelocity.x, delta, currentVelocity.z);\n\tentity.body.setLinvel(newVelocity, true);\n}\n\n/**\n * Move an entity along the Z axis, preserving other velocities\n */\nexport function moveZ(entity: EntityWithBody, delta: number): void {\n\tif (!entity.body) return;\n\tconst currentVelocity = entity.body.linvel();\n\tconst newVelocity = new Vector3(currentVelocity.x, currentVelocity.y, delta);\n\tentity.body.setLinvel(newVelocity, true);\n}\n\n/**\n * Move an entity along the X and Y axis, preserving Z velocity\n */\nexport function moveXY(entity: EntityWithBody, deltaX: number, deltaY: number): void {\n\tif (!entity.body) return;\n\tconst currentVelocity = entity.body.linvel();\n\tconst newVelocity = new Vector3(deltaX, deltaY, currentVelocity.z);\n\tentity.body.setLinvel(newVelocity, true);\n}\n\n/**\n * Move an entity along the X and Z axis, preserving Y velocity\n */\nexport function moveXZ(entity: EntityWithBody, deltaX: number, deltaZ: number): void {\n\tif (!entity.body) return;\n\tconst currentVelocity = entity.body.linvel();\n\tconst newVelocity = new Vector3(deltaX, currentVelocity.y, deltaZ);\n\tentity.body.setLinvel(newVelocity, true);\n}\n\n/**\n * Move entity based on a vector, adding to existing velocities\n */\nexport function move(entity: EntityWithBody, vector: Vector3): void {\n\tif (!entity.body) return;\n\tconst currentVelocity = entity.body.linvel();\n\tconst newVelocity = new Vector3(\n\t\tcurrentVelocity.x + vector.x,\n\t\tcurrentVelocity.y + vector.y,\n\t\tcurrentVelocity.z + vector.z\n\t);\n\tentity.body.setLinvel(newVelocity, true);\n}\n\n/**\n * Reset entity velocity\n */\nexport function resetVelocity(entity: EntityWithBody): void {\n\tif (!entity.body) return;\n\tentity.body.setLinvel(new Vector3(0, 0, 0), true);\n\tentity.body.setLinearDamping(5);\n}\n\n/**\n * Move entity forward in 2D space, preserving Z velocity\n */\nexport function moveForwardXY(entity: EntityWithBody, delta: number, rotation2DAngle: number): void {\n\tconst deltaX = Math.sin(-rotation2DAngle) * delta;\n\tconst deltaY = Math.cos(-rotation2DAngle) * delta;\n\tmoveXY(entity, deltaX, deltaY);\n}\n\n/**\n * Get entity position\n */\nexport function getPosition(entity: EntityWithBody): Vector | null {\n\tif (!entity.body) return null;\n\treturn entity.body.translation();\n}\n\n/**\n * Get entity velocity\n */\nexport function getVelocity(entity: EntityWithBody): Vector | null {\n\tif (!entity.body) return null;\n\treturn entity.body.linvel();\n}\n\n/**\n * Set entity position\n */\nexport function setPosition(entity: EntityWithBody, x: number, y: number, z: number): void {\n\tif (!entity.body) return;\n\tentity.body.setTranslation({ x, y, z }, true);\n}\n\n/**\n * Set entity X position\n */\nexport function setPositionX(entity: EntityWithBody, x: number): void {\n\tif (!entity.body) return;\n\tconst { y, z } = entity.body.translation();\n\tentity.body.setTranslation({ x, y, z }, true);\n}\n\n/**\n * Set entity Y position\n */\nexport function setPositionY(entity: EntityWithBody, y: number): void {\n\tif (!entity.body) return;\n\tconst { x, z } = entity.body.translation();\n\tentity.body.setTranslation({ x, y, z }, true);\n}\n\n/**\n * Set entity Z position\n */\nexport function setPositionZ(entity: EntityWithBody, z: number): void {\n\tif (!entity.body) return;\n\tconst { x, y } = entity.body.translation();\n\tentity.body.setTranslation({ x, y, z }, true);\n}\n\n/**\n * Wrap entity around 2D bounds\n */\nexport function wrapAroundXY(entity: EntityWithBody, boundsX: number, boundsY: number): void {\n\tconst position = getPosition(entity);\n\tif (!position) return;\n\n\tconst { x, y } = position;\n\tconst newX = x > boundsX ? -boundsX : (x < -boundsX ? boundsX : x);\n\tconst newY = y > boundsY ? -boundsY : (y < -boundsY ? boundsY : y);\n\n\tif (newX !== x || newY !== y) {\n\t\tsetPosition(entity, newX, newY, 0);\n\t}\n}\n\n/**\n * Wrap entity around 3D bounds\n */\nexport function wrapAround3D(entity: EntityWithBody, boundsX: number, boundsY: number, boundsZ: number): void {\n\tconst position = getPosition(entity);\n\tif (!position) return;\n\n\tconst { x, y, z } = position;\n\tconst newX = x > boundsX ? -boundsX : (x < -boundsX ? boundsX : x);\n\tconst newY = y > boundsY ? -boundsY : (y < -boundsY ? boundsY : y);\n\tconst newZ = z > boundsZ ? -boundsZ : (z < -boundsZ ? boundsZ : z);\n\n\tif (newX !== x || newY !== y || newZ !== z) {\n\t\tsetPosition(entity, newX, newY, newZ);\n\t}\n}\n\n/**\n * Enhanced moveable entity with bound methods\n */\nexport interface MoveableEntity extends EntityWithBody {\n\tmoveX(delta: number): void;\n\tmoveY(delta: number): void;\n\tmoveZ(delta: number): void;\n\tmoveXY(deltaX: number, deltaY: number): void;\n\tmoveXZ(deltaX: number, deltaZ: number): void;\n\tmove(vector: Vector3): void;\n\tresetVelocity(): void;\n\tmoveForwardXY(delta: number, rotation2DAngle: number): void;\n\tgetPosition(): Vector | null;\n\tgetVelocity(): Vector | null;\n\tsetPosition(x: number, y: number, z: number): void;\n\tsetPositionX(x: number): void;\n\tsetPositionY(y: number): void;\n\tsetPositionZ(z: number): void;\n\twrapAroundXY(boundsX: number, boundsY: number): void;\n\twrapAround3D(boundsX: number, boundsY: number, boundsZ: number): void;\n}\n\n/**\n * Class decorator to enhance an entity with additive movement methods\n */\nexport function moveable<T extends { new(...args: any[]): EntityWithBody }>(constructor: T) {\n\treturn class extends constructor implements MoveableEntity {\n\t\tmoveX(delta: number): void {\n\t\t\tmoveX(this, delta);\n\t\t}\n\t\tmoveY(delta: number): void {\n\t\t\tmoveY(this, delta);\n\t\t}\n\t\tmoveZ(delta: number): void {\n\t\t\tmoveZ(this, delta);\n\t\t}\n\t\tmoveXY(deltaX: number, deltaY: number): void {\n\t\t\tmoveXY(this, deltaX, deltaY);\n\t\t}\n\t\tmoveXZ(deltaX: number, deltaZ: number): void {\n\t\t\tmoveXZ(this, deltaX, deltaZ);\n\t\t}\n\t\tmove(vector: Vector3): void {\n\t\t\tmove(this, vector);\n\t\t}\n\t\tresetVelocity(): void {\n\t\t\tresetVelocity(this);\n\t\t}\n\t\tmoveForwardXY(delta: number, rotation2DAngle: number): void {\n\t\t\tmoveForwardXY(this, delta, rotation2DAngle);\n\t\t}\n\t\tgetPosition(): Vector | null {\n\t\t\treturn getPosition(this);\n\t\t}\n\t\tgetVelocity(): Vector | null {\n\t\t\treturn getVelocity(this);\n\t\t}\n\t\tsetPosition(x: number, y: number, z: number): void {\n\t\t\tsetPosition(this, x, y, z);\n\t\t}\n\t\tsetPositionX(x: number): void {\n\t\t\tsetPositionX(this, x);\n\t\t}\n\t\tsetPositionY(y: number): void {\n\t\t\tsetPositionY(this, y);\n\t\t}\n\t\tsetPositionZ(z: number): void {\n\t\t\tsetPositionZ(this, z);\n\t\t}\n\t\twrapAroundXY(boundsX: number, boundsY: number): void {\n\t\t\twrapAroundXY(this, boundsX, boundsY);\n\t\t}\n\t\twrapAround3D(boundsX: number, boundsY: number, boundsZ: number): void {\n\t\t\twrapAround3D(this, boundsX, boundsY, boundsZ);\n\t\t}\n\t};\n}\n\n/**\n * Enhance an entity with additive movement methods (retained for compatibility)\n */\nexport function makeMoveable<T extends EntityWithBody>(entity: T): T & MoveableEntity {\n\tconst moveable = entity as T & MoveableEntity;\n\n\tmoveable.moveX = (delta: number) => moveX(entity, delta);\n\tmoveable.moveY = (delta: number) => moveY(entity, delta);\n\tmoveable.moveZ = (delta: number) => moveZ(entity, delta);\n\tmoveable.moveXY = (deltaX: number, deltaY: number) => moveXY(entity, deltaX, deltaY);\n\tmoveable.moveXZ = (deltaX: number, deltaZ: number) => moveXZ(entity, deltaX, deltaZ);\n\tmoveable.move = (vector: Vector3) => move(entity, vector);\n\tmoveable.resetVelocity = () => resetVelocity(entity);\n\tmoveable.moveForwardXY = (delta: number, rotation2DAngle: number) => moveForwardXY(entity, delta, rotation2DAngle);\n\tmoveable.getPosition = () => getPosition(entity);\n\tmoveable.getVelocity = () => getVelocity(entity);\n\tmoveable.setPosition = (x: number, y: number, z: number) => setPosition(entity, x, y, z);\n\tmoveable.setPositionX = (x: number) => setPositionX(entity, x);\n\tmoveable.setPositionY = (y: number) => setPositionY(entity, y);\n\tmoveable.setPositionZ = (z: number) => setPositionZ(entity, z);\n\tmoveable.wrapAroundXY = (boundsX: number, boundsY: number) => wrapAroundXY(entity, boundsX, boundsY);\n\tmoveable.wrapAround3D = (boundsX: number, boundsY: number, boundsZ: number) => wrapAround3D(entity, boundsX, boundsY, boundsZ);\n\n\treturn moveable;\n}\n\n/**\n * Wrap a standalone function with movement capabilities\n */\nexport function withMovement<T extends (...args: any[]) => any>(\n\tfn: T,\n\tentity: EntityWithBody\n): (...args: Parameters<T>) => ReturnType<T> & MoveableEntity {\n\tconst wrapped = (...args: Parameters<T>) => {\n\t\tconst result = fn(...args);\n\t\tconst moveableEntity = makeMoveable(entity);\n\t\treturn Object.assign(result, moveableEntity);\n\t};\n\treturn wrapped as (...args: Parameters<T>) => ReturnType<T> & MoveableEntity;\n}","import { Euler, Vector3, MathUtils, Quaternion } from 'three';\nimport { RigidBody } from '@dimforge/rapier3d-compat';\n\nexport interface RotatableEntity {\n\tbody: RigidBody | null;\n\tgroup: any;\n}\n\n/**\n * Rotate an entity in the direction of a movement vector\n */\nexport function rotateInDirection(entity: RotatableEntity, moveVector: Vector3): void {\n\tif (!entity.body) return;\n\tconst rotate = Math.atan2(-moveVector.x, moveVector.z);\n\trotateYEuler(entity, rotate);\n}\n\n/**\n * Rotate an entity around the Y axis using Euler angles\n */\nexport function rotateYEuler(entity: RotatableEntity, amount: number): void {\n\trotateEuler(entity, new Vector3(0, -amount, 0));\n}\n\n/**\n * Rotate an entity using Euler angles\n */\nexport function rotateEuler(entity: RotatableEntity, rotation: Vector3): void {\n\tif (!entity.group) return;\n\tconst euler = new Euler(rotation.x, rotation.y, rotation.z);\n\tentity.group.setRotationFromEuler(euler);\n}\n\n/**\n * Rotate an entity around the Y axis\n */\nexport function rotateY(entity: RotatableEntity, delta: number): void {\n\tsetRotationY(entity, delta);\n}\n\n/**\n * Rotate an entity around the Z axis\n */\nexport function rotateZ(entity: RotatableEntity, delta: number): void {\n\tsetRotationZ(entity, delta);\n}\n\n/**\n * Set rotation around Y axis\n */\nexport function setRotationY(entity: RotatableEntity, y: number): void {\n\tif (!entity.body) return;\n\tconst halfAngle = y / 2;\n\tconst w = Math.cos(halfAngle);\n\tconst yComponent = Math.sin(halfAngle);\n\tentity.body.setRotation({ w: w, x: 0, y: yComponent, z: 0 }, true);\n}\n\n/**\n * Set rotation around Y axis\n */\nexport function setRotationDegreesY(entity: RotatableEntity, y: number): void {\n\tif (!entity.body) return;\n\tsetRotationY(entity, MathUtils.degToRad(y));\n}\n\n/**\n * Set rotation around X axis\n */\nexport function setRotationX(entity: RotatableEntity, x: number): void {\n\tif (!entity.body) return;\n\tconst halfAngle = x / 2;\n\tconst w = Math.cos(halfAngle);\n\tconst xComponent = Math.sin(halfAngle);\n\tentity.body.setRotation({ w: w, x: xComponent, y: 0, z: 0 }, true);\n}\n\n/**\n * Set rotation around X axis\n */\nexport function setRotationDegreesX(entity: RotatableEntity, x: number): void {\n\tif (!entity.body) return;\n\tsetRotationX(entity, MathUtils.degToRad(x));\n}\n\n/**\n * Set rotation around Z axis\n */\nexport function setRotationZ(entity: RotatableEntity, z: number): void {\n\tif (!entity.body) return;\n\tconst halfAngle = z / 2;\n\tconst w = Math.cos(halfAngle);\n\tconst zComponent = Math.sin(halfAngle);\n\tentity.body.setRotation({ w: w, x: 0, y: 0, z: zComponent }, true);\n}\n\n/**\n * Set rotation around Z axis\n */\nexport function setRotationDegreesZ(entity: RotatableEntity, z: number): void {\n\tif (!entity.body) return;\n\tsetRotationZ(entity, MathUtils.degToRad(z));\n}\n\n/**\n * Set rotation for all axes\n */\nexport function setRotation(entity: RotatableEntity, x: number, y: number, z: number): void {\n\tif (!entity.body) return;\n\tconst quat = new Quaternion().setFromEuler(new Euler(x, y, z));\n\tentity.body.setRotation({ w: quat.w, x: quat.x, y: quat.y, z: quat.z }, true);\n}\n\n/**\n * Set rotation for all axes\n */\nexport function setRotationDegrees(entity: RotatableEntity, x: number, y: number, z: number): void {\n\tif (!entity.body) return;\n\tsetRotation(entity, MathUtils.degToRad(x), MathUtils.degToRad(y), MathUtils.degToRad(z));\n}\n\n/**\n * Get current rotation\n */\nexport function getRotation(entity: RotatableEntity): any {\n\tif (!entity.body) return null;\n\treturn entity.body.rotation();\n}\n\n/**\n * Rotatable entity API with bound methods\n */\nexport interface RotatableEntityAPI extends RotatableEntity {\n\trotateInDirection(moveVector: Vector3): void;\n\trotateYEuler(amount: number): void;\n\trotateEuler(rotation: Vector3): void;\n\trotateY(delta: number): void;\n\trotateZ(delta: number): void;\n\tsetRotationY(y: number): void;\n\tsetRotationX(x: number): void;\n\tsetRotationZ(z: number): void;\n\tsetRotationDegrees(x: number, y: number, z: number): void;\n\tsetRotationDegreesY(y: number): void;\n\tsetRotationDegreesX(x: number): void;\n\tsetRotationDegreesZ(z: number): void;\n\tsetRotation(x: number, y: number, z: number): void;\n\tgetRotation(): any;\n}\n\n/**\n * Class decorator to enhance an entity with rotatable methods\n */\nexport function rotatable<T extends { new(...args: any[]): RotatableEntity }>(constructor: T) {\n\treturn class extends constructor implements RotatableEntityAPI {\n\t\trotateInDirection(moveVector: Vector3): void {\n\t\t\trotateInDirection(this, moveVector);\n\t\t}\n\t\trotateYEuler(amount: number): void {\n\t\t\trotateYEuler(this, amount);\n\t\t}\n\t\trotateEuler(rotation: Vector3): void {\n\t\t\trotateEuler(this, rotation);\n\t\t}\n\t\trotateY(delta: number): void {\n\t\t\trotateY(this, delta);\n\t\t}\n\t\trotateZ(delta: number): void {\n\t\t\trotateZ(this, delta);\n\t\t}\n\t\tsetRotationY(y: number): void {\n\t\t\tsetRotationY(this, y);\n\t\t}\n\t\tsetRotationX(x: number): void {\n\t\t\tsetRotationX(this, x);\n\t\t}\n\t\tsetRotationZ(z: number): void {\n\t\t\tsetRotationZ(this, z);\n\t\t}\n\t\tsetRotationDegrees(x: number, y: number, z: number): void {\n\t\t\tsetRotationDegrees(this, x, y, z);\n\t\t}\n\t\tsetRotationDegreesY(y: number): void {\n\t\t\tsetRotationDegreesY(this, y);\n\t\t}\n\t\tsetRotationDegreesX(x: number): void {\n\t\t\tsetRotationDegreesX(this, x);\n\t\t}\n\t\tsetRotationDegreesZ(z: number): void {\n\t\t\tsetRotationDegreesZ(this, z);\n\t\t}\n\t\tsetRotation(x: number, y: number, z: number): void {\n\t\t\tsetRotation(this, x, y, z);\n\t\t}\n\t\tgetRotation(): any {\n\t\t\treturn getRotation(this);\n\t\t}\n\t};\n}\n\n/**\n * Enhance an entity instance with rotatable methods\n */\nexport function makeRotatable<T extends RotatableEntity>(entity: T): T & RotatableEntityAPI {\n\tconst rotatableEntity = entity as T & RotatableEntityAPI;\n\n\trotatableEntity.rotateInDirection = (moveVector: Vector3) => rotateInDirection(entity, moveVector);\n\trotatableEntity.rotateYEuler = (amount: number) => rotateYEuler(entity, amount);\n\trotatableEntity.rotateEuler = (rotation: Vector3) => rotateEuler(entity, rotation);\n\trotatableEntity.rotateY = (delta: number) => rotateY(entity, delta);\n\trotatableEntity.rotateZ = (delta: number) => rotateZ(entity, delta);\n\trotatableEntity.setRotationY = (y: number) => setRotationY(entity, y);\n\trotatableEntity.setRotationX = (x: number) => setRotationX(entity, x);\n\trotatableEntity.setRotationZ = (z: number) => setRotationZ(entity, z);\n\trotatableEntity.setRotationDegreesY = (y: number) => setRotationDegreesY(entity, y);\n\trotatableEntity.setRotationDegreesX = (x: number) => setRotationDegreesX(entity, x);\n\trotatableEntity.setRotationDegreesZ = (z: number) => setRotationDegreesZ(entity, z);\n\trotatableEntity.setRotationDegrees = (x: number, y: number, z: number) => setRotationDegrees(entity, x, y, z);\n\trotatableEntity.setRotation = (x: number, y: number, z: number) => setRotation(entity, x, y, z);\n\trotatableEntity.getRotation = () => getRotation(entity);\n\n\treturn rotatableEntity;\n}","import { makeMoveable, EntityWithBody, MoveableEntity } from './moveable';\nimport { makeRotatable, RotatableEntity, RotatableEntityAPI } from './rotatable';\n\n/**\n * Enhance an entity with both movement and rotation capabilities.\n */\nexport function makeTransformable<\n\tT extends RotatableEntity & EntityWithBody\n>(entity: T): T & MoveableEntity & RotatableEntityAPI {\n\tconst withMovement = makeMoveable(entity);\n\tconst withRotation = makeRotatable(withMovement);\n\treturn withRotation;\n}\n\n\n"],"mappings":"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","names":["Vector3"]}
@@ -0,0 +1,106 @@
1
+ import { G as GameEntity, m as CollisionContext, U as UpdateContext, B as BehaviorCallbackType } from './entity-COvRtFNG.js';
2
+ import { M as MoveableEntity } from './moveable-B_vyA6cw.js';
3
+ import { Vector } from '@dimforge/rapier3d-compat';
4
+ import 'three';
5
+ import 'bitecs';
6
+
7
+ /**
8
+ * A branded bitmask representing a set of collision types.
9
+ */
10
+ type CollisionMask = number & {
11
+ readonly __brand: "CollisionMask";
12
+ };
13
+ type NameSelector = string | string[] | RegExp;
14
+ type CollisionSelector = {
15
+ name: NameSelector;
16
+ } | {
17
+ mask: CollisionMask | RegExp;
18
+ } | {
19
+ test: (other: GameEntity<any>) => boolean;
20
+ };
21
+
22
+ /**
23
+ * Behavior for ricocheting an entity off other objects in 2D
24
+ */
25
+ declare function ricochet2DCollision(options?: Partial<Ricochet2DCollisionOptions>, callback?: Ricochet2DCollisionCallback): {
26
+ type: 'collision';
27
+ handler: (ctx: CollisionContext<MoveableEntity, GameEntity<any>>) => void;
28
+ };
29
+
30
+ interface RicochetEvent extends Partial<UpdateContext<MoveableEntity>> {
31
+ boundary?: 'top' | 'bottom' | 'left' | 'right';
32
+ position: Vector;
33
+ velocityBefore: Vector;
34
+ velocityAfter: Vector;
35
+ }
36
+ interface RicochetCollisionEvent extends CollisionContext<MoveableEntity, GameEntity<any>> {
37
+ position: Vector;
38
+ }
39
+ interface Ricochet2DInBoundsOptions {
40
+ restitution?: number;
41
+ minSpeed?: number;
42
+ maxSpeed?: number;
43
+ boundaries: {
44
+ top: number;
45
+ bottom: number;
46
+ left: number;
47
+ right: number;
48
+ };
49
+ separation?: number;
50
+ }
51
+ interface Ricochet2DCollisionOptions {
52
+ restitution?: number;
53
+ minSpeed?: number;
54
+ maxSpeed?: number;
55
+ separation?: number;
56
+ collisionWith?: CollisionSelector;
57
+ /**
58
+ * Choose between simple axis inversion or angled (paddle-style) reflection.
59
+ * Defaults to 'angled'.
60
+ */
61
+ reflectionMode?: 'simple' | 'angled';
62
+ }
63
+ type Ricochet2DCallback = (event: RicochetEvent) => void;
64
+ type Ricochet2DCollisionCallback = (event: RicochetCollisionEvent) => void;
65
+
66
+ /**
67
+ * Behavior for ricocheting an entity within fixed 2D boundaries
68
+ */
69
+ declare function ricochet2DInBounds(options?: Partial<Ricochet2DInBoundsOptions>, callback?: Ricochet2DCallback): {
70
+ type: BehaviorCallbackType;
71
+ handler: (ctx: UpdateContext<MoveableEntity>) => void;
72
+ };
73
+
74
+ interface BoundaryEvent {
75
+ me: MoveableEntity;
76
+ boundary: BoundaryHits;
77
+ position: Vector;
78
+ updateContext: UpdateContext<MoveableEntity>;
79
+ }
80
+ interface BoundaryOptions {
81
+ boundaries: {
82
+ top: number;
83
+ bottom: number;
84
+ left: number;
85
+ right: number;
86
+ };
87
+ onBoundary?: (event: BoundaryEvent) => void;
88
+ stopMovement?: boolean;
89
+ }
90
+ /**
91
+ * Checks if the entity has hit a boundary and stops its movement if it has
92
+ *
93
+ * @param options Configuration options for the boundary behavior
94
+ * @param options.boundaries The boundaries of the stage
95
+ * @param options.onBoundary A callback function that is called when the entity hits a boundary
96
+ * @param options.stopMovement Whether to stop the entity's movement when it hits a boundary
97
+ * @returns A behavior callback with type 'update' and a handler function
98
+ */
99
+ declare function boundary2d(options?: Partial<BoundaryOptions>): {
100
+ type: BehaviorCallbackType;
101
+ handler: (ctx: UpdateContext<MoveableEntity>) => void;
102
+ };
103
+ type BoundaryHit = 'top' | 'bottom' | 'left' | 'right';
104
+ type BoundaryHits = Record<BoundaryHit, boolean>;
105
+
106
+ export { boundary2d, ricochet2DCollision, ricochet2DInBounds };