@rpgjs/client 5.0.0-beta.2 → 5.0.0-beta.22

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 (325) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/dist/Game/AnimationManager.d.ts +2 -1
  3. package/dist/Game/AnimationManager.js +21 -9
  4. package/dist/Game/AnimationManager.js.map +1 -1
  5. package/dist/Game/AnimationManager.spec.d.ts +1 -0
  6. package/dist/Game/ClientVisuals.d.ts +61 -0
  7. package/dist/Game/ClientVisuals.js +96 -0
  8. package/dist/Game/ClientVisuals.js.map +1 -0
  9. package/dist/Game/ClientVisuals.spec.d.ts +1 -0
  10. package/dist/Game/Event.js.map +1 -1
  11. package/dist/Game/EventComponentResolver.d.ts +16 -0
  12. package/dist/Game/EventComponentResolver.js +52 -0
  13. package/dist/Game/EventComponentResolver.js.map +1 -0
  14. package/dist/Game/EventComponentResolver.spec.d.ts +1 -0
  15. package/dist/Game/Map.d.ts +9 -1
  16. package/dist/Game/Map.js +83 -5
  17. package/dist/Game/Map.js.map +1 -1
  18. package/dist/Game/Object.d.ts +49 -15
  19. package/dist/Game/Object.js +101 -42
  20. package/dist/Game/Object.js.map +1 -1
  21. package/dist/Game/Object.spec.d.ts +1 -0
  22. package/dist/Game/Player.js.map +1 -1
  23. package/dist/Game/ProjectileManager.d.ts +98 -0
  24. package/dist/Game/ProjectileManager.js +196 -0
  25. package/dist/Game/ProjectileManager.js.map +1 -0
  26. package/dist/Game/ProjectileManager.spec.d.ts +1 -0
  27. package/dist/Gui/Gui.d.ts +20 -6
  28. package/dist/Gui/Gui.js +132 -57
  29. package/dist/Gui/Gui.js.map +1 -1
  30. package/dist/Gui/Gui.spec.d.ts +1 -0
  31. package/dist/Gui/NotificationManager.js.map +1 -1
  32. package/dist/Resource.js +1 -1
  33. package/dist/Resource.js.map +1 -1
  34. package/dist/RpgClient.d.ts +194 -15
  35. package/dist/RpgClientEngine.d.ts +191 -19
  36. package/dist/RpgClientEngine.js +693 -74
  37. package/dist/RpgClientEngine.js.map +1 -1
  38. package/dist/Sound.js.map +1 -1
  39. package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorate.js +1 -1
  40. package/dist/_virtual/{_@oxc-project_runtime@0.122.0/helpers → _@oxc-project_runtime@0.133.0/helpers/esm}/decorateMetadata.js +1 -1
  41. package/dist/_virtual/_rolldown/runtime.js +13 -0
  42. package/dist/components/animations/animation.ce.js +6 -5
  43. package/dist/components/animations/animation.ce.js.map +1 -1
  44. package/dist/components/animations/fx.ce.js +60 -0
  45. package/dist/components/animations/fx.ce.js.map +1 -0
  46. package/dist/components/animations/hit.ce.js +24 -28
  47. package/dist/components/animations/hit.ce.js.map +1 -1
  48. package/dist/components/animations/index.d.ts +1 -0
  49. package/dist/components/animations/index.js +6 -4
  50. package/dist/components/animations/index.js.map +1 -1
  51. package/dist/components/character.ce.js +748 -249
  52. package/dist/components/character.ce.js.map +1 -1
  53. package/dist/components/dynamics/bar.ce.js +99 -0
  54. package/dist/components/dynamics/bar.ce.js.map +1 -0
  55. package/dist/components/dynamics/image.ce.js +26 -0
  56. package/dist/components/dynamics/image.ce.js.map +1 -0
  57. package/dist/components/dynamics/parse-value.d.ts +3 -0
  58. package/dist/components/dynamics/parse-value.js +54 -35
  59. package/dist/components/dynamics/parse-value.js.map +1 -1
  60. package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
  61. package/dist/components/dynamics/shape-utils.d.ts +16 -0
  62. package/dist/components/dynamics/shape-utils.js +73 -0
  63. package/dist/components/dynamics/shape-utils.js.map +1 -0
  64. package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
  65. package/dist/components/dynamics/shape.ce.js +86 -0
  66. package/dist/components/dynamics/shape.ce.js.map +1 -0
  67. package/dist/components/dynamics/text.ce.js +36 -56
  68. package/dist/components/dynamics/text.ce.js.map +1 -1
  69. package/dist/components/gui/box.ce.js +9 -9
  70. package/dist/components/gui/box.ce.js.map +1 -1
  71. package/dist/components/gui/dialogbox/index.ce.js +75 -65
  72. package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
  73. package/dist/components/gui/gameover.ce.js +47 -68
  74. package/dist/components/gui/gameover.ce.js.map +1 -1
  75. package/dist/components/gui/hud/hud.ce.js +23 -31
  76. package/dist/components/gui/hud/hud.ce.js.map +1 -1
  77. package/dist/components/gui/menu/equip-menu.ce.js +121 -172
  78. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
  79. package/dist/components/gui/menu/exit-menu.ce.js +15 -10
  80. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
  81. package/dist/components/gui/menu/items-menu.ce.js +62 -77
  82. package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
  83. package/dist/components/gui/menu/main-menu.ce.js +89 -104
  84. package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
  85. package/dist/components/gui/menu/options-menu.ce.js +12 -8
  86. package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
  87. package/dist/components/gui/menu/skills-menu.ce.js +17 -19
  88. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
  89. package/dist/components/gui/mobile/index.d.ts +51 -2
  90. package/dist/components/gui/mobile/index.js +14 -6
  91. package/dist/components/gui/mobile/index.js.map +1 -1
  92. package/dist/components/gui/mobile/index.spec.d.ts +1 -0
  93. package/dist/components/gui/mobile/mobile.ce.js +309 -59
  94. package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
  95. package/dist/components/gui/notification/notification.ce.js +28 -26
  96. package/dist/components/gui/notification/notification.ce.js.map +1 -1
  97. package/dist/components/gui/save-load.ce.js +81 -256
  98. package/dist/components/gui/save-load.ce.js.map +1 -1
  99. package/dist/components/gui/shop/shop.ce.js +107 -142
  100. package/dist/components/gui/shop/shop.ce.js.map +1 -1
  101. package/dist/components/gui/title-screen.ce.js +50 -73
  102. package/dist/components/gui/title-screen.ce.js.map +1 -1
  103. package/dist/components/index.d.ts +2 -1
  104. package/dist/components/index.js +1 -0
  105. package/dist/components/interaction-components.ce.js +22 -0
  106. package/dist/components/interaction-components.ce.js.map +1 -0
  107. package/dist/components/player-components-utils.d.ts +67 -0
  108. package/dist/components/player-components-utils.js +162 -0
  109. package/dist/components/player-components-utils.js.map +1 -0
  110. package/dist/components/player-components-utils.spec.d.ts +1 -0
  111. package/dist/components/player-components.ce.js +191 -0
  112. package/dist/components/player-components.ce.js.map +1 -0
  113. package/dist/components/prebuilt/hp-bar.ce.js +45 -45
  114. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
  115. package/dist/components/prebuilt/light-halo.ce.js +39 -60
  116. package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
  117. package/dist/components/scenes/canvas.ce.js +205 -27
  118. package/dist/components/scenes/canvas.ce.js.map +1 -1
  119. package/dist/components/scenes/draw-map.ce.js +39 -39
  120. package/dist/components/scenes/draw-map.ce.js.map +1 -1
  121. package/dist/components/scenes/event-layer.ce.js +51 -10
  122. package/dist/components/scenes/event-layer.ce.js.map +1 -1
  123. package/dist/core/inject.js +1 -1
  124. package/dist/core/inject.js.map +1 -1
  125. package/dist/core/setup.js +1 -1
  126. package/dist/core/setup.js.map +1 -1
  127. package/dist/decorators/spritesheet.d.ts +1 -0
  128. package/dist/decorators/spritesheet.js +11 -0
  129. package/dist/decorators/spritesheet.js.map +1 -0
  130. package/dist/i18n.d.ts +55 -0
  131. package/dist/i18n.js +60 -0
  132. package/dist/i18n.js.map +1 -0
  133. package/dist/i18n.spec.d.ts +1 -0
  134. package/dist/index.d.ts +8 -0
  135. package/dist/index.js +29 -21
  136. package/dist/module.js +45 -4
  137. package/dist/module.js.map +1 -1
  138. package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.1.0}/node_modules/@signe/di/dist/index.js +7 -117
  139. package/dist/node_modules/.pnpm/@signe_di@3.1.0/node_modules/@signe/di/dist/index.js.map +1 -0
  140. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js +239 -0
  141. package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
  142. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
  143. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/chunk-EUXUH3YW.js.map +1 -0
  144. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js +698 -0
  145. package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js.map +1 -0
  146. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js +43 -0
  147. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js.map +1 -0
  148. package/dist/node_modules/.pnpm/{@signe_sync@2.9.0 → @signe_sync@3.1.0_react@19.2.7}/node_modules/@signe/sync/dist/index.js +57 -141
  149. package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js.map +1 -0
  150. package/dist/node_modules/.pnpm/{partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js → partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js} +30 -17
  151. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js.map +1 -0
  152. package/dist/node_modules/.pnpm/{partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js → partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js} +65 -34
  153. package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js.map +1 -0
  154. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +13 -0
  155. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js.map +1 -0
  156. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js +106 -0
  157. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -0
  158. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +13 -0
  159. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js.map +1 -0
  160. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +121 -0
  161. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js.map +1 -0
  162. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js +10 -0
  163. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -0
  164. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js +110 -0
  165. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -0
  166. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js +99 -0
  167. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -0
  168. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js +82 -0
  169. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/locales/en.js.map +1 -0
  170. package/dist/node_modules/.pnpm/{zod@3.24.2/node_modules/zod/lib/index.js → zod@3.25.76/node_modules/zod/v3/types.js} +74 -611
  171. package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -0
  172. package/dist/presets/animation.js.map +1 -1
  173. package/dist/presets/faceset.js.map +1 -1
  174. package/dist/presets/icon.js.map +1 -1
  175. package/dist/presets/index.js.map +1 -1
  176. package/dist/presets/lpc.js.map +1 -1
  177. package/dist/presets/rmspritesheet.js.map +1 -1
  178. package/dist/services/AbstractSocket.d.ts +2 -0
  179. package/dist/services/AbstractSocket.js.map +1 -1
  180. package/dist/services/actionInput.d.ts +14 -0
  181. package/dist/services/actionInput.js +59 -0
  182. package/dist/services/actionInput.js.map +1 -0
  183. package/dist/services/actionInput.spec.d.ts +1 -0
  184. package/dist/services/cameraFollow.d.ts +51 -0
  185. package/dist/services/cameraFollow.js +134 -0
  186. package/dist/services/cameraFollow.js.map +1 -0
  187. package/dist/services/cameraFollow.spec.d.ts +1 -0
  188. package/dist/services/interactions.d.ts +159 -0
  189. package/dist/services/interactions.js +460 -0
  190. package/dist/services/interactions.js.map +1 -0
  191. package/dist/services/interactions.spec.d.ts +1 -0
  192. package/dist/services/keyboardControls.d.ts +1 -0
  193. package/dist/services/keyboardControls.js +1 -0
  194. package/dist/services/keyboardControls.js.map +1 -1
  195. package/dist/services/loadMap.d.ts +9 -0
  196. package/dist/services/loadMap.js +1 -1
  197. package/dist/services/loadMap.js.map +1 -1
  198. package/dist/services/mmorpg-connection.d.ts +5 -0
  199. package/dist/services/mmorpg-connection.js +50 -0
  200. package/dist/services/mmorpg-connection.js.map +1 -0
  201. package/dist/services/mmorpg-connection.spec.d.ts +1 -0
  202. package/dist/services/mmorpg.d.ts +11 -4
  203. package/dist/services/mmorpg.js +57 -33
  204. package/dist/services/mmorpg.js.map +1 -1
  205. package/dist/services/pointerContext.d.ts +11 -0
  206. package/dist/services/pointerContext.js +48 -0
  207. package/dist/services/pointerContext.js.map +1 -0
  208. package/dist/services/pointerContext.spec.d.ts +1 -0
  209. package/dist/services/save.js.map +1 -1
  210. package/dist/services/save.spec.d.ts +1 -0
  211. package/dist/services/standalone-message.d.ts +1 -0
  212. package/dist/services/standalone-message.js +9 -0
  213. package/dist/services/standalone-message.js.map +1 -0
  214. package/dist/services/standalone.d.ts +4 -1
  215. package/dist/services/standalone.js +36 -16
  216. package/dist/services/standalone.js.map +1 -1
  217. package/dist/services/standalone.spec.d.ts +1 -0
  218. package/dist/utils/getEntityProp.js +4 -3
  219. package/dist/utils/getEntityProp.js.map +1 -1
  220. package/dist/utils/getEntityProp.spec.d.ts +1 -0
  221. package/dist/utils/mapId.d.ts +1 -0
  222. package/dist/utils/mapId.js +6 -0
  223. package/dist/utils/mapId.js.map +1 -0
  224. package/dist/utils/readPropValue.d.ts +2 -0
  225. package/dist/utils/readPropValue.js +13 -0
  226. package/dist/utils/readPropValue.js.map +1 -0
  227. package/package.json +13 -13
  228. package/src/Game/AnimationManager.spec.ts +30 -0
  229. package/src/Game/AnimationManager.ts +26 -10
  230. package/src/Game/ClientVisuals.spec.ts +56 -0
  231. package/src/Game/ClientVisuals.ts +184 -0
  232. package/src/Game/EventComponentResolver.spec.ts +84 -0
  233. package/src/Game/EventComponentResolver.ts +74 -0
  234. package/src/Game/Map.ts +134 -2
  235. package/src/Game/Object.spec.ts +59 -0
  236. package/src/Game/Object.ts +181 -77
  237. package/src/Game/ProjectileManager.spec.ts +449 -0
  238. package/src/Game/ProjectileManager.ts +346 -0
  239. package/src/Gui/Gui.spec.ts +359 -0
  240. package/src/Gui/Gui.ts +178 -67
  241. package/src/Resource.ts +1 -2
  242. package/src/RpgClient.ts +220 -17
  243. package/src/RpgClientEngine.ts +995 -133
  244. package/src/components/animations/fx.ce +101 -0
  245. package/src/components/animations/index.ts +4 -2
  246. package/src/components/character.ce +839 -45
  247. package/src/components/dynamics/bar.ce +88 -0
  248. package/src/components/dynamics/image.ce +21 -0
  249. package/src/components/dynamics/parse-value.spec.ts +83 -0
  250. package/src/components/dynamics/parse-value.ts +111 -37
  251. package/src/components/dynamics/shape-utils.spec.ts +46 -0
  252. package/src/components/dynamics/shape-utils.ts +61 -0
  253. package/src/components/dynamics/shape.ce +90 -0
  254. package/src/components/dynamics/text.ce +35 -149
  255. package/src/components/gui/dialogbox/index.ce +52 -21
  256. package/src/components/gui/gameover.ce +6 -4
  257. package/src/components/gui/menu/equip-menu.ce +11 -9
  258. package/src/components/gui/menu/exit-menu.ce +6 -4
  259. package/src/components/gui/menu/items-menu.ce +11 -9
  260. package/src/components/gui/menu/main-menu.ce +14 -12
  261. package/src/components/gui/menu/options-menu.ce +4 -3
  262. package/src/components/gui/menu/skills-menu.ce +2 -1
  263. package/src/components/gui/mobile/index.spec.ts +94 -0
  264. package/src/components/gui/mobile/index.ts +74 -6
  265. package/src/components/gui/mobile/mobile.ce +347 -65
  266. package/src/components/gui/notification/notification.ce +7 -1
  267. package/src/components/gui/save-load.ce +13 -11
  268. package/src/components/gui/shop/shop.ce +20 -18
  269. package/src/components/gui/title-screen.ce +6 -4
  270. package/src/components/index.ts +2 -1
  271. package/src/components/interaction-components.ce +23 -0
  272. package/src/components/player-components-utils.spec.ts +109 -0
  273. package/src/components/player-components-utils.ts +205 -0
  274. package/src/components/player-components.ce +222 -0
  275. package/src/components/prebuilt/hp-bar.ce +4 -3
  276. package/src/components/prebuilt/light-halo.ce +2 -2
  277. package/src/components/scenes/canvas.ce +219 -15
  278. package/src/components/scenes/draw-map.ce +34 -22
  279. package/src/components/scenes/event-layer.ce +55 -4
  280. package/src/core/setup.ts +2 -2
  281. package/src/decorators/spritesheet.ts +8 -0
  282. package/src/i18n.spec.ts +39 -0
  283. package/src/i18n.ts +59 -0
  284. package/src/index.ts +19 -0
  285. package/src/module.ts +61 -11
  286. package/src/services/AbstractSocket.ts +3 -0
  287. package/src/services/actionInput.spec.ts +155 -0
  288. package/src/services/actionInput.ts +120 -0
  289. package/src/services/cameraFollow.spec.ts +220 -0
  290. package/src/services/cameraFollow.ts +222 -0
  291. package/src/services/interactions.spec.ts +175 -0
  292. package/src/services/interactions.ts +722 -0
  293. package/src/services/keyboardControls.ts +2 -1
  294. package/src/services/loadMap.ts +5 -1
  295. package/src/services/mmorpg-connection.spec.ts +99 -0
  296. package/src/services/mmorpg-connection.ts +69 -0
  297. package/src/services/mmorpg.ts +70 -36
  298. package/src/services/pointerContext.spec.ts +36 -0
  299. package/src/services/pointerContext.ts +84 -0
  300. package/src/services/save.spec.ts +127 -0
  301. package/src/services/standalone-message.ts +7 -0
  302. package/src/services/standalone.spec.ts +54 -0
  303. package/src/services/standalone.ts +44 -12
  304. package/src/utils/getEntityProp.spec.ts +96 -0
  305. package/src/utils/getEntityProp.ts +4 -3
  306. package/src/utils/mapId.ts +2 -0
  307. package/src/utils/readPropValue.ts +16 -0
  308. package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
  309. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
  310. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
  311. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
  312. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
  313. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
  314. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
  315. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
  316. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
  317. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
  318. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
  319. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
  320. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
  321. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
  322. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +0 -1
  323. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +0 -1
  324. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +0 -2
  325. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +0 -1
@@ -0,0 +1,449 @@
1
+ import { afterEach, describe, expect, test, vi } from "vitest";
2
+ import { Hooks } from "@rpgjs/common";
3
+ import { ProjectileManager } from "./ProjectileManager";
4
+
5
+ describe("ProjectileManager", () => {
6
+ afterEach(() => {
7
+ vi.useRealTimers();
8
+ });
9
+
10
+ test("renders registered projectile components from compact spawn data", () => {
11
+ const onSpawn = vi.fn();
12
+ const hooks = new Hooks([{ projectiles: { onSpawn } }], "client");
13
+ const manager = new ProjectileManager(hooks);
14
+ const component = () => null;
15
+
16
+ manager.register("fireball", component);
17
+ manager.spawnBatch([
18
+ {
19
+ id: "p1",
20
+ type: "fireball",
21
+ origin: { x: 10, y: 20 },
22
+ direction: { x: 1, y: 0 },
23
+ speed: 100,
24
+ range: 500,
25
+ ttl: 5,
26
+ spawnTick: 1,
27
+ },
28
+ ]);
29
+
30
+ const current = manager.current();
31
+ expect(current).toHaveLength(1);
32
+ expect(current[0].component).toBe(component);
33
+ expect(current[0].props.x).toBeGreaterThanOrEqual(10);
34
+ expect(current[0].props.angle).toBe(0);
35
+ expect(onSpawn).toHaveBeenCalledWith(expect.objectContaining({ id: "p1", type: "fireball" }));
36
+ });
37
+
38
+ test("ignores projectile packets from another map", () => {
39
+ const hooks = new Hooks([], "client");
40
+ const manager = new ProjectileManager(hooks);
41
+ const component = () => null;
42
+
43
+ manager.register("fireball", component);
44
+ manager.setMapId("map-town");
45
+ manager.spawnBatch([
46
+ {
47
+ id: "old-map-projectile",
48
+ type: "fireball",
49
+ origin: { x: 10, y: 20 },
50
+ direction: { x: 1, y: 0 },
51
+ speed: 100,
52
+ range: 500,
53
+ ttl: 5,
54
+ spawnTick: 1,
55
+ },
56
+ ], { mapId: "map-dungeon" });
57
+
58
+ expect(manager.current()).toHaveLength(0);
59
+
60
+ manager.spawnBatch([
61
+ {
62
+ id: "current-map-projectile",
63
+ type: "fireball",
64
+ origin: { x: 10, y: 20 },
65
+ direction: { x: 1, y: 0 },
66
+ speed: 100,
67
+ range: 500,
68
+ ttl: 5,
69
+ spawnTick: 1,
70
+ },
71
+ ], { mapId: "map-town" });
72
+
73
+ expect(manager.current()).toHaveLength(1);
74
+ });
75
+
76
+ test("accepts server map ids without the client room prefix", () => {
77
+ const hooks = new Hooks([], "client");
78
+ const manager = new ProjectileManager(hooks);
79
+ const component = () => null;
80
+
81
+ manager.register("fireball", component);
82
+ manager.setMapId("map-town");
83
+ manager.spawnBatch([
84
+ {
85
+ id: "server-map-projectile",
86
+ type: "fireball",
87
+ origin: { x: 10, y: 20 },
88
+ direction: { x: 1, y: 0 },
89
+ speed: 100,
90
+ range: 500,
91
+ ttl: 5,
92
+ spawnTick: 1,
93
+ },
94
+ ], { mapId: "town" });
95
+
96
+ expect(manager.getMapId()).toBe("town");
97
+ expect(manager.current()).toHaveLength(1);
98
+ });
99
+
100
+ test("accepts prefixed map ids when the manager stores the logical map id", () => {
101
+ const hooks = new Hooks([], "client");
102
+ const manager = new ProjectileManager(hooks);
103
+ const component = () => null;
104
+
105
+ manager.register("fireball", component);
106
+ manager.setMapId("town");
107
+ manager.spawnBatch([
108
+ {
109
+ id: "prefixed-map-projectile",
110
+ type: "fireball",
111
+ origin: { x: 10, y: 20 },
112
+ direction: { x: 1, y: 0 },
113
+ speed: 100,
114
+ range: 500,
115
+ ttl: 5,
116
+ spawnTick: 1,
117
+ },
118
+ ], { mapId: "map-town" });
119
+
120
+ expect(manager.current()).toHaveLength(1);
121
+ });
122
+
123
+ test("clears projectiles when switching map ids", () => {
124
+ const hooks = new Hooks([], "client");
125
+ const manager = new ProjectileManager(hooks);
126
+
127
+ manager.register("fireball", () => null);
128
+ manager.setMapId("map-town");
129
+ manager.spawnBatch([
130
+ {
131
+ id: "p1",
132
+ type: "fireball",
133
+ origin: { x: 10, y: 20 },
134
+ direction: { x: 1, y: 0 },
135
+ speed: 100,
136
+ range: 500,
137
+ ttl: 5,
138
+ spawnTick: 1,
139
+ },
140
+ ], { mapId: "map-town" });
141
+
142
+ expect(manager.current()).toHaveLength(1);
143
+
144
+ manager.setMapId("map-dungeon");
145
+
146
+ expect(manager.current()).toHaveLength(0);
147
+ });
148
+
149
+ test("starts visuals at the spawn origin even when a server tick estimate exists", () => {
150
+ vi.useFakeTimers();
151
+ vi.setSystemTime(2000);
152
+
153
+ const hooks = new Hooks([], "client");
154
+ const manager = new ProjectileManager(hooks);
155
+ manager.register("arrow", () => null);
156
+ manager.spawnBatch([
157
+ {
158
+ id: "p-latency",
159
+ type: "arrow",
160
+ origin: { x: 0, y: 0 },
161
+ direction: { x: 1, y: 0 },
162
+ speed: 120,
163
+ range: 500,
164
+ ttl: 5,
165
+ spawnTick: 10,
166
+ },
167
+ ], {
168
+ currentServerTick: 16,
169
+ tickDurationMs: 1000 / 60,
170
+ });
171
+
172
+ const current = manager.current();
173
+ expect(current).toHaveLength(1);
174
+ expect(current[0].props.elapsed).toBeCloseTo(0, 3);
175
+ expect(current[0].props.x).toBeCloseTo(0, 3);
176
+ });
177
+
178
+ test("keeps delayed projectiles until their visual delay has elapsed", () => {
179
+ vi.useFakeTimers();
180
+ vi.setSystemTime(1000);
181
+
182
+ const hooks = new Hooks([], "client");
183
+ const manager = new ProjectileManager(hooks);
184
+ manager.register("spark", () => null);
185
+ manager.spawnBatch([
186
+ {
187
+ id: "p-delayed",
188
+ type: "spark",
189
+ origin: { x: 0, y: 0 },
190
+ direction: { x: 1, y: 0 },
191
+ speed: 100,
192
+ range: 500,
193
+ ttl: 5,
194
+ spawnTick: 1,
195
+ delay: 0.1,
196
+ },
197
+ ]);
198
+
199
+ vi.setSystemTime(1050);
200
+ manager.step();
201
+ expect(manager.current()).toHaveLength(0);
202
+
203
+ vi.setSystemTime(1110);
204
+ manager.step();
205
+ const current = manager.current();
206
+ expect(current).toHaveLength(1);
207
+ expect(current[0].props.elapsed).toBeCloseTo(0.01, 3);
208
+ });
209
+
210
+ test("keeps impacted projectiles briefly so components can react", () => {
211
+ const hooks = new Hooks([], "client");
212
+ const manager = new ProjectileManager(hooks);
213
+ manager.register("arrow", () => null);
214
+ manager.spawnBatch([
215
+ {
216
+ id: "p2",
217
+ type: "arrow",
218
+ origin: { x: 0, y: 0 },
219
+ direction: { x: 1, y: 0 },
220
+ speed: 100,
221
+ range: 500,
222
+ ttl: 5,
223
+ spawnTick: 1,
224
+ },
225
+ ]);
226
+
227
+ manager.impactBatch([{ id: "p2", x: 42, y: 0, distance: 42 }]);
228
+
229
+ const current = manager.current();
230
+ expect(current).toHaveLength(1);
231
+ expect(current[0].props.impact?.x).toBe(42);
232
+ expect(current[0].props.destroyed).toBe(true);
233
+ });
234
+
235
+ test("keeps hit destroys briefly even if the destroy packet arrives before impact", () => {
236
+ const hooks = new Hooks([], "client");
237
+ const manager = new ProjectileManager(hooks);
238
+ manager.register("arrow", () => null);
239
+ manager.spawnBatch([
240
+ {
241
+ id: "p3",
242
+ type: "arrow",
243
+ origin: { x: 0, y: 0 },
244
+ direction: { x: 1, y: 0 },
245
+ speed: 100,
246
+ range: 500,
247
+ ttl: 5,
248
+ spawnTick: 1,
249
+ },
250
+ ]);
251
+
252
+ manager.destroyBatch([{ id: "p3", reason: "hit", x: 48, y: 0, distance: 48 }]);
253
+
254
+ const current = manager.current();
255
+ expect(current).toHaveLength(1);
256
+ expect(current[0].props.impact?.x).toBe(48);
257
+ expect(current[0].props.destroyed).toBe(true);
258
+ });
259
+
260
+ test("freezes hit destroys at the authoritative impact position until the impact completes", () => {
261
+ vi.useFakeTimers();
262
+ vi.setSystemTime(1000);
263
+
264
+ const hooks = new Hooks([], "client");
265
+ const manager = new ProjectileManager(hooks);
266
+ manager.register("arrow", () => null);
267
+ manager.spawnBatch([
268
+ {
269
+ id: "p4",
270
+ type: "arrow",
271
+ origin: { x: 0, y: 0 },
272
+ direction: { x: 1, y: 0 },
273
+ speed: 100,
274
+ range: 500,
275
+ ttl: 5,
276
+ spawnTick: 1,
277
+ },
278
+ ]);
279
+
280
+ vi.setSystemTime(1200);
281
+ manager.destroyBatch([{ id: "p4", reason: "hit", x: 48, y: 0, distance: 48 }]);
282
+
283
+ vi.setSystemTime(1300);
284
+ manager.step();
285
+ let current = manager.current();
286
+ expect(current).toHaveLength(1);
287
+ expect(current[0].props.x).toBe(48);
288
+ expect(current[0].props.distance).toBe(48);
289
+ expect(current[0].props.impactProgress).toBeCloseTo(100 / 350, 3);
290
+
291
+ vi.setSystemTime(1600);
292
+ manager.step();
293
+ current = manager.current();
294
+ expect(current).toHaveLength(0);
295
+ });
296
+
297
+ test("clamps visual movement at the predicted impact without starting the impact animation", () => {
298
+ vi.useFakeTimers();
299
+ vi.setSystemTime(1000);
300
+
301
+ const hooks = new Hooks([], "client");
302
+ const manager = new ProjectileManager(hooks, () => ({
303
+ id: "p5",
304
+ targetId: "target",
305
+ x: 30,
306
+ y: 0,
307
+ distance: 30,
308
+ }));
309
+ manager.register("arrow", () => null);
310
+ manager.spawnBatch([
311
+ {
312
+ id: "p5",
313
+ type: "arrow",
314
+ origin: { x: 0, y: 0 },
315
+ direction: { x: 1, y: 0 },
316
+ speed: 100,
317
+ range: 500,
318
+ ttl: 5,
319
+ spawnTick: 1,
320
+ },
321
+ ]);
322
+
323
+ vi.setSystemTime(1200);
324
+ manager.step();
325
+ let current = manager.current();
326
+ expect(current).toHaveLength(1);
327
+ expect(current[0].props.x).toBe(20);
328
+ expect(current[0].props.impact).toBeUndefined();
329
+ expect(current[0].props.destroyed).toBe(false);
330
+
331
+ vi.setSystemTime(1400);
332
+ manager.step();
333
+ current = manager.current();
334
+ expect(current).toHaveLength(1);
335
+ expect(current[0].props.x).toBe(30);
336
+ expect(current[0].props.distance).toBe(30);
337
+ expect(current[0].props.impact).toBeUndefined();
338
+ expect(current[0].props.destroyed).toBe(false);
339
+
340
+ manager.impactBatch([{ id: "p5", targetId: "target", x: 32, y: 0, distance: 32 }]);
341
+ current = manager.current();
342
+ expect(current[0].props.x).toBe(30);
343
+ expect(current[0].props.distance).toBe(30);
344
+ expect(current[0].props.impact?.x).toBe(32);
345
+ expect(current[0].props.destroyed).toBe(true);
346
+ });
347
+
348
+ test("uses the authoritative impact position when the predicted target differs", () => {
349
+ vi.useFakeTimers();
350
+ vi.setSystemTime(1000);
351
+
352
+ const hooks = new Hooks([], "client");
353
+ const manager = new ProjectileManager(hooks, () => ({
354
+ id: "p7",
355
+ targetId: "wall",
356
+ x: 30,
357
+ y: 0,
358
+ distance: 30,
359
+ }));
360
+ manager.register("arrow", () => null);
361
+ manager.spawnBatch([
362
+ {
363
+ id: "p7",
364
+ type: "arrow",
365
+ origin: { x: 0, y: 0 },
366
+ direction: { x: 1, y: 0 },
367
+ speed: 100,
368
+ range: 500,
369
+ ttl: 5,
370
+ spawnTick: 1,
371
+ },
372
+ ]);
373
+
374
+ vi.setSystemTime(1400);
375
+ manager.step();
376
+ manager.impactBatch([{ id: "p7", targetId: "target", x: 45, y: 0, distance: 45 }]);
377
+
378
+ const current = manager.current();
379
+ expect(current[0].props.x).toBe(45);
380
+ expect(current[0].props.distance).toBe(45);
381
+ expect(current[0].props.impact?.x).toBe(45);
382
+ });
383
+
384
+ test("keeps an unconfirmed predicted impact clamped until the server resolves it", () => {
385
+ vi.useFakeTimers();
386
+ vi.setSystemTime(1000);
387
+
388
+ const hooks = new Hooks([], "client");
389
+ const manager = new ProjectileManager(hooks, () => ({
390
+ id: "p6",
391
+ targetId: "ignored",
392
+ x: 30,
393
+ y: 0,
394
+ distance: 30,
395
+ }));
396
+ manager.register("arrow", () => null);
397
+ manager.spawnBatch([
398
+ {
399
+ id: "p6",
400
+ type: "arrow",
401
+ origin: { x: 0, y: 0 },
402
+ direction: { x: 1, y: 0 },
403
+ speed: 100,
404
+ range: 500,
405
+ ttl: 5,
406
+ spawnTick: 1,
407
+ },
408
+ ]);
409
+
410
+ vi.setSystemTime(1400);
411
+ manager.step();
412
+ expect(manager.current()[0].props.x).toBe(30);
413
+
414
+ vi.setSystemTime(1900);
415
+ manager.step();
416
+ const current = manager.current();
417
+ expect(current).toHaveLength(1);
418
+ expect(current[0].props.x).toBe(30);
419
+ expect(current[0].props.impact).toBeUndefined();
420
+ expect(current[0].props.destroyed).toBe(false);
421
+
422
+ manager.destroyBatch([{ id: "p6", reason: "range" }]);
423
+ expect(manager.current()[0].props.x).toBe(30);
424
+ expect(manager.current()[0].props.destroyed).toBe(true);
425
+ });
426
+
427
+ test("skips local impact prediction when the server marks the projectile as non-predictable", () => {
428
+ const hooks = new Hooks([], "client");
429
+ const predictionResolver = vi.fn();
430
+ const manager = new ProjectileManager(hooks, predictionResolver);
431
+ manager.register("arrow", () => null);
432
+
433
+ manager.spawnBatch([
434
+ {
435
+ id: "p-no-predict",
436
+ type: "arrow",
437
+ origin: { x: 0, y: 0 },
438
+ direction: { x: 1, y: 0 },
439
+ speed: 100,
440
+ range: 500,
441
+ ttl: 5,
442
+ spawnTick: 1,
443
+ predictImpact: false,
444
+ },
445
+ ]);
446
+
447
+ expect(predictionResolver).not.toHaveBeenCalled();
448
+ });
449
+ });