@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
@@ -1,14 +1,40 @@
1
1
  <Canvas width={engine.width} height={engine.height}>
2
2
  <Viewport worldWidth worldHeight clamp sortableChildren={true}>
3
- @if (sceneData) {
4
- <SceneMap />
3
+ @if (lightingAmbientEnabled()) {
4
+ <NightAmbiant
5
+ spots={nightLights}
6
+ darkness={lightingDarknessProps}
7
+ haze={lightingHaze}
8
+ />
5
9
  }
10
+ @if (shadowEnabled()) {
11
+ <SpriteShadows
12
+ lights={shadowLights}
13
+ ambientLight={shadowAmbientLight}
14
+ minInfluence={shadowMinInfluence}
15
+ falloffPower={shadowFalloffPower}
16
+ mode={shadowMode}
17
+ updateHz={shadowUpdateHz}
18
+ scanHz={shadowScanHz}
19
+ cullToViewport={shadowCullToViewport}
20
+ shadowColor={shadowColor}
21
+ />
22
+ }
23
+ <SceneMap />
6
24
  </Viewport>
7
25
  @for (gui of guiList) {
8
- <Container display="flex">
26
+ <Container
27
+ positionType="absolute"
28
+ top={0}
29
+ left={0}
30
+ right={0}
31
+ bottom={0}
32
+ width={engine.width}
33
+ height={engine.height}
34
+ >
9
35
  @if (gui.display) {
10
- <gui.component data={gui.data} dependencies={gui.dependencies} onFinish={(data) => {
11
- onGuiFinish(gui, data)
36
+ <gui.component data={gui.data} dependencies={gui.dependencies} guiOpenId={gui.openId} onFinish={(data, guiOpenId) => {
37
+ onGuiFinish(gui, data, guiOpenId)
12
38
  }} onInteraction={(name, data) => {
13
39
  onGuiInteraction(gui, name, data)
14
40
  }} />
@@ -18,21 +44,31 @@
18
44
  </Canvas>
19
45
 
20
46
  <script>
21
- import { signal, computed, effect } from "canvasengine";
47
+ import { computed, effect } from "canvasengine";
22
48
  import { inject } from "../../core/inject";
23
49
  import { RpgClientEngine } from "../../RpgClientEngine";
24
- import SceneMap from './draw-map.ce'
25
50
  import { RpgGui } from "../../Gui/Gui";
26
- import { delay } from "@rpgjs/common";
51
+ import { NightAmbiant, SpriteShadows } from '@canvasengine/presets'
52
+ import { shouldRenderLightingShadows } from "@rpgjs/common";
27
53
 
28
54
  const engine = inject(RpgClientEngine);
55
+ const SceneMap = engine.sceneMapComponent;
29
56
  const guiService = inject(RpgGui);
30
57
  const sceneData = engine.sceneMap.data
58
+ const lighting = engine.sceneMap.lighting
31
59
  const guiList = computed(() => {
32
60
  return Object.values(guiService.gui()).filter((gui) => !gui.attachToSprite)
33
61
  })
34
- const worldWidth = computed(() => sceneData()?.width)
35
- const worldHeight = computed(() => sceneData()?.height)
62
+ const worldWidth = computed(() => {
63
+ const data = sceneData?.()
64
+ const scale = Number(data?.params?.scale ?? 1) || 1
65
+ return Number(data?.width ?? data?.params?.width ?? 2048) * scale
66
+ })
67
+ const worldHeight = computed(() => {
68
+ const data = sceneData?.()
69
+ const scale = Number(data?.params?.scale ?? 1) || 1
70
+ return Number(data?.height ?? data?.params?.height ?? 2048) * scale
71
+ })
36
72
 
37
73
  effect(() => {
38
74
  if (sceneData() && !sceneData().component) {
@@ -40,17 +76,185 @@
40
76
  }
41
77
  })
42
78
 
43
- const onGuiFinish = (gui, data) => {
44
- delay(() => {
45
- guiService.guiClose(gui.name, data)
46
- })
79
+ const normalizeOpenId = (value) => {
80
+ const resolved = typeof value === "function" ? value() : value
81
+ return typeof resolved === "string" && resolved.length > 0 ? resolved : undefined
82
+ }
83
+
84
+ const onGuiFinish = (gui, data, guiOpenId) => {
85
+ const completedOpenId = normalizeOpenId(guiOpenId)
86
+ const currentOpenId = normalizeOpenId(gui.openId)
87
+ if (completedOpenId && currentOpenId && completedOpenId !== currentOpenId) return
88
+ guiService.guiClose(gui.name, data, completedOpenId ?? currentOpenId)
47
89
  }
48
90
 
49
91
  const onGuiInteraction = (gui, name, data) => {
50
92
  guiService.guiInteraction(gui.name, name, data)
51
93
  }
52
-
94
+
53
95
  const clamp = {
54
96
  direction: "all"
55
97
  }
98
+ const NIGHT_SPOT_RADIUS_SCALE = 4.25
99
+ const NIGHT_SPOT_MIN_RADIUS = 170
100
+ const NIGHT_SPOT_MIN_INTENSITY = 1
101
+ const SHADOW_SPOT_RADIUS_SCALE = 12
102
+ const SHADOW_SPOT_MIN_RADIUS = 480
103
+
104
+ const toFiniteNumber = (value, fallback = null) => {
105
+ const number = Number(value)
106
+ return Number.isFinite(number) ? number : fallback
107
+ }
108
+ const clampNumber = (value, min, max) => Math.max(min, Math.min(max, value))
109
+ const nightSpotRadius = (radius) => Math.max(radius * NIGHT_SPOT_RADIUS_SCALE, NIGHT_SPOT_MIN_RADIUS)
110
+ const shadowSpotRadius = (radius) => Math.max(radius * SHADOW_SPOT_RADIUS_SCALE, SHADOW_SPOT_MIN_RADIUS)
111
+ const nightSpotIntensity = (intensity, fallback) => Math.max(intensity ?? fallback, NIGHT_SPOT_MIN_INTENSITY)
112
+ const shadowLightIntensity = (intensity, fallback = 1) => {
113
+ const value = Number(intensity ?? fallback)
114
+ return Number.isFinite(value) ? Math.max(0, value) : fallback
115
+ }
116
+ const shadowSpotIntensity = (intensity) => shadowLightIntensity(intensity, 1)
117
+
118
+ const lightingAmbient = computed(() => {
119
+ const state = lighting?.()
120
+ return state?.ambient ?? {}
121
+ })
122
+
123
+ const nightLights = computed(() => {
124
+ const state = lighting?.()
125
+ return (state?.spots ?? []).map((spot, index) => {
126
+ const radius = spot.radius ?? 180
127
+ return {
128
+ x: spot.x,
129
+ y: spot.y,
130
+ radius: nightSpotRadius(radius),
131
+ intensity: nightSpotIntensity(spot.intensity, index === 0 ? 1 : 0.92),
132
+ flicker: spot.flicker,
133
+ flickerSpeed: spot.flickerSpeed ?? 14,
134
+ pulse: spot.pulse,
135
+ pulseSpeed: spot.pulseSpeed,
136
+ phase: spot.phase,
137
+ }
138
+ })
139
+ })
140
+ const lightingDarkness = computed(() => {
141
+ const darkness = lightingAmbient().darkness
142
+ return typeof darkness === "number" ? darkness : 0
143
+ })
144
+
145
+ const lightingAmbientEnabled = computed(() => {
146
+ const state = lighting?.()
147
+ return Boolean(state && lightingDarkness() > 0)
148
+ })
149
+
150
+ const lightingDarknessProps = computed(() => ({
151
+ opacity: lightingDarkness(),
152
+ color: lightingAmbient().darkColor ?? "#080a12",
153
+ }))
154
+ const lightingHaze = computed(() => ({
155
+ color: lightingAmbient().fogColor ?? "#12182a",
156
+ radius: lightingAmbient().fogRadius ?? 0.44,
157
+ softness: lightingAmbient().fogSoftness ?? 0.3,
158
+ opacity: lightingAmbient().fogOpacity ?? 0.35,
159
+ }))
160
+
161
+ const defaultSunLight = () => {
162
+ const data = sceneData?.()
163
+ const width = Number(data?.width ?? data?.params?.width ?? 2048)
164
+ const height = Number(data?.height ?? data?.params?.height ?? 2048)
165
+ const scale = Number(data?.params?.scale ?? 1) || 1
166
+ const mapWidth = width * scale
167
+ const mapHeight = height * scale
168
+ const projectionBase = Math.max(1, mapWidth, mapHeight)
169
+
170
+ return {
171
+ x: -projectionBase * 24,
172
+ y: -projectionBase * 24,
173
+ z: 520,
174
+ radius: projectionBase * 160,
175
+ intensity: 0.85,
176
+ shadowWeight: lightingDarkness() > 0 ? 2.2 : 1,
177
+ enabled: true,
178
+ }
179
+ }
180
+
181
+ const normalizeSunDirection = (sun) => {
182
+ const x = toFiniteNumber(sun?.x, null)
183
+ const y = toFiniteNumber(sun?.y, null)
184
+ if (x !== null && y !== null && Math.hypot(x, y) > 0.001) {
185
+ return { x, y }
186
+ }
187
+ return { x: -0.45, y: -1 }
188
+ }
189
+
190
+ const defaultSunAmbientLight = () => {
191
+ const state = lighting?.()
192
+ if (!state?.sun || state.sun.enabled === false) return null
193
+
194
+ const defaultSun = defaultSunLight()
195
+ const sun = {
196
+ ...defaultSun,
197
+ ...state.sun,
198
+ intensity: shadowLightIntensity(state.sun.intensity, defaultSun.intensity),
199
+ shadowWeight: state.sun.shadowWeight ?? defaultSun.shadowWeight,
200
+ }
201
+ if (sun.intensity <= 0) return null
202
+
203
+ const direction = normalizeSunDirection(sun)
204
+ const shadowWeight = clampNumber(toFiniteNumber(sun.shadowWeight, lightingDarkness() > 0 ? 1.35 : 1) ?? 1, 0, 4)
205
+ const length = clampNumber(30 + sun.intensity * 38 * Math.max(0.75, shadowWeight), 30, 86)
206
+
207
+ return {
208
+ x: direction.x,
209
+ y: direction.y,
210
+ z: toFiniteNumber(sun.z, 520) ?? 520,
211
+ intensity: clampNumber(sun.intensity, 0, 2),
212
+ shadowWeight,
213
+ length,
214
+ }
215
+ }
216
+
217
+ const shadowState = computed(() => {
218
+ const state = lighting?.()
219
+ return state?.shadows ?? null
220
+ })
221
+
222
+ const shadowLights = computed(() => {
223
+ const state = lighting?.()
224
+ const spotLights = (state?.spots ?? []).map((spot) => {
225
+ const radius = spot.radius ?? 180
226
+ return {
227
+ x: spot.x,
228
+ y: spot.y,
229
+ z: 170,
230
+ radius: shadowSpotRadius(radius),
231
+ intensity: shadowSpotIntensity(spot.intensity),
232
+ shadowWeight: 1,
233
+ enabled: true,
234
+ }
235
+ })
236
+
237
+ return spotLights
238
+ })
239
+
240
+ const shadowAmbientLight = computed(() => {
241
+ const shadows = shadowState()
242
+ if (shadows?.ambientLight === null || shadows?.ambientLight?.enabled === false) {
243
+ return null
244
+ }
245
+ return shadows?.ambientLight ?? defaultSunAmbientLight()
246
+ })
247
+
248
+ const shadowEnabled = computed(() => {
249
+ const state = lighting?.()
250
+ return Boolean(shouldRenderLightingShadows(state) && (shadowLights().length > 0 || shadowAmbientLight()))
251
+ })
252
+
253
+ const shadowMode = computed(() => shadowState()?.mode ?? "strongest")
254
+ const shadowUpdateHz = computed(() => shadowState()?.updateHz ?? 60)
255
+ const shadowScanHz = computed(() => shadowState()?.scanHz ?? 8)
256
+ const shadowCullToViewport = computed(() => shadowState()?.cullToViewport ?? true)
257
+ const shadowMinInfluence = computed(() => shadowState()?.minInfluence ?? 0.24)
258
+ const shadowFalloffPower = computed(() => shadowState()?.falloffPower ?? 0.85)
259
+ const shadowColor = computed(() => shadowState()?.shadowColor ?? "#05070d")
56
260
  </script>
@@ -1,8 +1,20 @@
1
- <Container sound={backgroundMusic} shake={shakeConfig} freeze={engine.gamePause}>
2
- <Container sound={backgroundAmbientSound} />
1
+ <Container shake={shakeConfig} freeze={engine.gamePause}>
2
+ @if (backgroundMusic()) {
3
+ <Container sound={backgroundMusic()} />
4
+ }
5
+
6
+ @if (backgroundAmbientSound()) {
7
+ <Container sound={backgroundAmbientSound()} />
8
+ }
3
9
 
4
- @if (map() && sceneComponent()) {
5
- <sceneComponent() data={map().data} params={map().params} />
10
+ <Container>
11
+ @if (map() && sceneComponent()) {
12
+ <sceneComponent() data={map().data} params={map().params} />
13
+ }
14
+ </Container>
15
+
16
+ @for (child of children) {
17
+ <child />
6
18
  }
7
19
 
8
20
  @for (componentAnimation of componentAnimations) {
@@ -13,38 +25,38 @@
13
25
  </Container>
14
26
  }
15
27
 
16
- @if (weatherProps) {
28
+ <Container sortableChildren={true}>
29
+ @for (projectile of projectiles() ; track projectile.props.id) {
30
+ <projectile.component ...projectile.props />
31
+ }
32
+ </Container>
33
+
34
+ @if (weatherProps()) {
17
35
  <Weather ...weatherProps() />
18
36
  }
19
37
  </Container>
20
38
 
21
39
  <script>
22
- import { NoiseFilter } from 'pixi-filters';
23
- import { effect, signal, computed, mount, on, tick } from 'canvasengine'
40
+ import { computed, effect } from 'canvasengine'
24
41
  import { inject } from "../../core/inject";
25
42
  import { RpgClientEngine } from "../../RpgClientEngine";
26
43
  import { Weather } from '@canvasengine/presets'
27
44
 
45
+ const { children } = defineProps()
28
46
  const engine = inject(RpgClientEngine);
29
47
  const componentAnimations = engine.componentAnimations
48
+ const projectiles = engine.projectiles.current
30
49
  const map = engine.sceneMap?.data
31
50
  const sceneComponent = computed(() => map()?.component)
32
- const sceneParams = map()?.params
33
- const mapParams = map()?.params
34
- const animations = engine.sceneMap.animations
35
51
  const weather = engine.sceneMap.weather
36
- const backgroundMusic = { src: mapParams?.backgroundMusic, autoplay: true, loop: true }
37
- const backgroundAmbientSound = { src: mapParams?.backgroundAmbientSound, autoplay: true, loop: true }
38
-
39
- const data = signal(map()?.data)
40
-
41
- const scale = mapParams?.scale || 1
42
- const worldWidth = (mapParams?.width || 2048) * scale
43
- const worldHeight = (mapParams?.height || 2048) * scale
44
-
45
- const clamp = {
46
- direction: "all"
47
- }
52
+ const backgroundMusic = computed(() => {
53
+ const src = map()?.params?.backgroundMusic
54
+ return src ? { src, autoplay: true, loop: true } : undefined
55
+ })
56
+ const backgroundAmbientSound = computed(() => {
57
+ const src = map()?.params?.backgroundAmbientSound
58
+ return src ? { src, autoplay: true, loop: true } : undefined
59
+ })
48
60
 
49
61
  const shakeConfig = {
50
62
  trigger: engine.mapShakeTrigger,
@@ -1,4 +1,4 @@
1
- <Container sortableChildren={true}>
1
+ <Container sortableChildren={true} onBeforeDestroy={detachPixiChildren}>
2
2
  @for ((event,id) of events) {
3
3
  <Character id={id} object={event} />
4
4
  }
@@ -13,15 +13,66 @@
13
13
  </Container>
14
14
 
15
15
  <script>
16
- import { effect, signal } from 'canvasengine'
16
+ import { effect, mount } from "canvasengine";
17
17
  import { inject } from "../../core/inject";
18
18
  import { RpgClientEngine } from "../../RpgClientEngine";
19
19
  import Character from "../character.ce";
20
20
  import LightHalo from "../prebuilt/light-halo.ce";
21
21
 
22
22
  const engine = inject(RpgClientEngine);
23
- const { children } = defineProps()
23
+ const { children, pixiChildren } = defineProps({
24
+ pixiChildren: {
25
+ default: []
26
+ }
27
+ })
28
+ const readValue = (value) => typeof value === "function" ? value() : value
29
+ let rootContainer = null
30
+ let mountedPixiChildren = []
24
31
 
25
32
  const players = engine.sceneMap.players
26
33
  const events = engine.sceneMap.events
27
- </script>
34
+
35
+ const getPixiChildren = () => {
36
+ const value = readValue(pixiChildren)
37
+ return Array.isArray(value) ? value.filter(Boolean) : []
38
+ }
39
+
40
+ const syncPixiChildren = () => {
41
+ if (!rootContainer) return
42
+ const nextPixiChildren = getPixiChildren()
43
+ mountedPixiChildren.forEach((child) => {
44
+ if (!nextPixiChildren.includes(child) && child.parent === rootContainer) {
45
+ rootContainer.removeChild(child)
46
+ }
47
+ })
48
+ nextPixiChildren.forEach((child) => {
49
+ if (child.parent === rootContainer) return
50
+ if (child.parent) {
51
+ child.parent.removeChild(child)
52
+ }
53
+ rootContainer.addChild(child)
54
+ })
55
+ mountedPixiChildren = nextPixiChildren
56
+ }
57
+
58
+ const detachPixiChildren = () => {
59
+ if (!rootContainer) return
60
+ mountedPixiChildren.forEach((child) => {
61
+ if (child.parent === rootContainer) {
62
+ rootContainer.removeChild(child)
63
+ }
64
+ })
65
+ mountedPixiChildren = []
66
+ }
67
+
68
+ effect(() => {
69
+ readValue(pixiChildren)
70
+ syncPixiChildren()
71
+ })
72
+
73
+ mount((element) => {
74
+ rootContainer = element.componentInstance
75
+ syncPixiChildren()
76
+ return detachPixiChildren
77
+ })
78
+ </script>
package/src/core/setup.ts CHANGED
@@ -14,7 +14,7 @@ export async function startGame(options: SetupOptions) {
14
14
 
15
15
  await injector(context, options.providers);
16
16
 
17
- const engine = inject(context, RpgClientEngine);
17
+ const engine = inject<RpgClientEngine>(context, RpgClientEngine);
18
18
  await engine.start();
19
19
  return context;
20
- }
20
+ }
@@ -0,0 +1,8 @@
1
+ export function Spritesheet(options: Record<string, any> = {}) {
2
+ return (target: any) => {
3
+ Object.assign(target, options);
4
+ if (target.prototype) {
5
+ Object.assign(target.prototype, options);
6
+ }
7
+ };
8
+ }
@@ -0,0 +1,39 @@
1
+ // @vitest-environment jsdom
2
+
3
+ import { describe, expect, test } from "vitest";
4
+ import { Context, injector } from "@signe/di";
5
+ import { getOrCreateI18nService } from "@rpgjs/common";
6
+ import { provideClientModules } from "./module";
7
+ import { provideI18n } from "./i18n";
8
+
9
+ describe("client i18n", () => {
10
+ test("merges client module translations with game overrides", async () => {
11
+ const context = new Context();
12
+
13
+ await injector(context, [
14
+ provideClientModules([
15
+ {
16
+ i18n: {
17
+ fr: {
18
+ "menu.title": "Titre du module",
19
+ "menu.module-only": "Module",
20
+ },
21
+ },
22
+ },
23
+ ]),
24
+ provideI18n({
25
+ defaultLocale: "fr",
26
+ messages: {
27
+ fr: {
28
+ "menu.title": "Titre du jeu",
29
+ },
30
+ },
31
+ }),
32
+ ]);
33
+
34
+ const service = getOrCreateI18nService(context);
35
+
36
+ expect(service.t("menu.title", undefined, "fr")).toBe("Titre du jeu");
37
+ expect(service.t("menu.module-only", undefined, "fr")).toBe("Module");
38
+ });
39
+ });
package/src/i18n.ts ADDED
@@ -0,0 +1,59 @@
1
+ import { createI18nProvider, type I18nConfig } from "@rpgjs/common";
2
+
3
+ export const RpgClientBuiltinI18n = {
4
+ en: {
5
+ "rpg.menu.title": "Menu",
6
+ "rpg.menu.status": "Status",
7
+ "rpg.menu.level": "Level",
8
+ "rpg.menu.gold": "Gold",
9
+ "rpg.menu.parameters": "Parameters",
10
+ "rpg.menu.items": "Items",
11
+ "rpg.menu.skills": "Skills",
12
+ "rpg.menu.equip": "Equip",
13
+ "rpg.menu.options": "Options",
14
+ "rpg.menu.save": "Save",
15
+ "rpg.menu.exit": "Exit",
16
+ "rpg.menu.weapons": "Weapons",
17
+ "rpg.menu.armor": "Armor",
18
+ "rpg.menu.use": "Use",
19
+ "rpg.menu.cancel": "Cancel",
20
+ "rpg.menu.unequip": "Unequip",
21
+ "rpg.menu.remove-equipment": "Remove the current equipment",
22
+ "rpg.menu.empty": "Empty",
23
+ "rpg.menu.leave-game": "Leave the game?",
24
+ "rpg.menu.exit-help": "Press Action to confirm or Escape to go back.",
25
+ "rpg.menu.options-help": "Configure your preferences here.",
26
+ "rpg.save.title": "Save Game",
27
+ "rpg.save.subtitle": "Choose a slot to overwrite or create.",
28
+ "rpg.load.title": "Load Game",
29
+ "rpg.load.subtitle": "Select a slot to load your progress.",
30
+ "rpg.save.auto": "Auto Save",
31
+ "rpg.save.slot": "Slot {index}",
32
+ "rpg.save.empty-slot": "Empty Slot",
33
+ "rpg.save.level": "Level",
34
+ "rpg.save.exp": "Exp",
35
+ "rpg.save.map": "Map",
36
+ "rpg.save.date": "Date",
37
+ "rpg.title.default": "RPG",
38
+ "rpg.title.start": "Start",
39
+ "rpg.title.load": "Load",
40
+ "rpg.gameover.title": "Game Over",
41
+ "rpg.gameover.title-screen": "Title Screen",
42
+ "rpg.gameover.load-game": "Load Game",
43
+ "rpg.shop.default-message": "Welcome to my shop!",
44
+ "rpg.shop.choose-action": "Choose an action",
45
+ "rpg.shop.buy": "Buy",
46
+ "rpg.shop.sell": "Sell",
47
+ "rpg.shop.back": "Back",
48
+ "rpg.shop.equipped": "Equipped",
49
+ "rpg.shop.already-equipped": "Already equipped",
50
+ "rpg.shop.qty": "Qty",
51
+ "rpg.shop.available": "Available",
52
+ "rpg.shop.quantity": "Quantity",
53
+ "rpg.shop.total": "Total",
54
+ },
55
+ };
56
+
57
+ export function provideI18n(config: I18nConfig = {}) {
58
+ return createI18nProvider(config);
59
+ }
package/src/index.ts CHANGED
@@ -6,6 +6,9 @@ export * from "./services/save";
6
6
  export * from "./core/setup";
7
7
  export * from "./core/inject";
8
8
  export * from "./services/loadMap";
9
+ export * from "./services/actionInput";
10
+ export * from "./services/pointerContext";
11
+ export * from "./services/interactions";
9
12
  export * from "./module";
10
13
  export * from "./Gui/Gui";
11
14
  export * from "./components/gui";
@@ -16,6 +19,7 @@ export * from "./components";
16
19
  export * from "./components/gui";
17
20
  export * from "./Sound";
18
21
  export * from "./Resource";
22
+ export * from "./decorators/spritesheet";
19
23
  export * from "./utils/getEntityProp";
20
24
  export { Context } from "@signe/di";
21
25
  export { KeyboardControls, Input } from "canvasengine";
@@ -23,5 +27,20 @@ export { Control } from "./services/keyboardControls";
23
27
  export { RpgClientObject } from "./Game/Object";
24
28
  export { RpgClientPlayer } from "./Game/Player";
25
29
  export { RpgClientEvent } from "./Game/Event";
30
+ export * from "./Game/ProjectileManager";
31
+ export * from "./Game/ClientVisuals";
26
32
  export { withMobile } from "./components/gui/mobile";
33
+ export type {
34
+ MobileButtonComponentProps,
35
+ MobileGuiButtonOptions,
36
+ MobileGuiComponentsOptions,
37
+ MobileGuiEnabled,
38
+ MobileGuiJoystickOptions,
39
+ MobileGuiJoystickSide,
40
+ MobileGuiLayoutOptions,
41
+ MobileGuiMargin,
42
+ MobileGuiOptions,
43
+ MobileJoystickComponentProps,
44
+ } from "./components/gui/mobile";
27
45
  export * from "./services/AbstractSocket";
46
+ export * from "./i18n";