@rpgjs/client 5.0.0-alpha.9 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/dist/Game/AnimationManager.d.ts +8 -0
  2. package/dist/Game/AnimationManager.js +26 -0
  3. package/dist/Game/AnimationManager.js.map +1 -0
  4. package/dist/Game/Event.d.ts +1 -1
  5. package/dist/Game/Event.js +12 -0
  6. package/dist/Game/Event.js.map +1 -0
  7. package/dist/Game/Map.d.ts +23 -2
  8. package/dist/Game/Map.js +80 -0
  9. package/dist/Game/Map.js.map +1 -0
  10. package/dist/Game/Object.d.ts +157 -0
  11. package/dist/Game/Object.js +211 -0
  12. package/dist/Game/Object.js.map +1 -0
  13. package/dist/Game/Player.d.ts +1 -1
  14. package/dist/Game/Player.js +12 -0
  15. package/dist/Game/Player.js.map +1 -0
  16. package/dist/Gui/Gui.d.ts +177 -5
  17. package/dist/Gui/Gui.js +445 -0
  18. package/dist/Gui/Gui.js.map +1 -0
  19. package/dist/Gui/NotificationManager.d.ts +23 -0
  20. package/dist/Gui/NotificationManager.js +49 -0
  21. package/dist/Gui/NotificationManager.js.map +1 -0
  22. package/dist/Resource.d.ts +97 -0
  23. package/dist/Resource.js +133 -0
  24. package/dist/Resource.js.map +1 -0
  25. package/dist/RpgClient.d.ts +238 -11
  26. package/dist/RpgClientEngine.d.ts +615 -14
  27. package/dist/RpgClientEngine.js +1334 -0
  28. package/dist/RpgClientEngine.js.map +1 -0
  29. package/dist/Sound.d.ts +199 -0
  30. package/dist/Sound.js +167 -0
  31. package/dist/Sound.js.map +1 -0
  32. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorate.js +9 -0
  33. package/dist/_virtual/_@oxc-project_runtime@0.122.0/helpers/decorateMetadata.js +6 -0
  34. package/dist/components/animations/animation.ce.js +24 -0
  35. package/dist/components/animations/animation.ce.js.map +1 -0
  36. package/dist/components/animations/hit.ce.js +70 -0
  37. package/dist/components/animations/hit.ce.js.map +1 -0
  38. package/dist/components/animations/index.d.ts +4 -0
  39. package/dist/components/animations/index.js +11 -0
  40. package/dist/components/animations/index.js.map +1 -0
  41. package/dist/components/character.ce.js +392 -0
  42. package/dist/components/character.ce.js.map +1 -0
  43. package/dist/components/dynamics/parse-value.d.ts +1 -0
  44. package/dist/components/dynamics/parse-value.js +44 -0
  45. package/dist/components/dynamics/parse-value.js.map +1 -0
  46. package/dist/components/dynamics/text.ce.js +73 -0
  47. package/dist/components/dynamics/text.ce.js.map +1 -0
  48. package/dist/components/gui/box.ce.js +28 -0
  49. package/dist/components/gui/box.ce.js.map +1 -0
  50. package/dist/components/gui/dialogbox/index.ce.js +205 -0
  51. package/dist/components/gui/dialogbox/index.ce.js.map +1 -0
  52. package/dist/components/gui/gameover.ce.js +193 -0
  53. package/dist/components/gui/gameover.ce.js.map +1 -0
  54. package/dist/components/gui/hud/hud.ce.js +92 -0
  55. package/dist/components/gui/hud/hud.ce.js.map +1 -0
  56. package/dist/components/gui/index.d.ts +15 -3
  57. package/dist/components/gui/index.js +14 -0
  58. package/dist/components/gui/menu/equip-menu.ce.js +481 -0
  59. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -0
  60. package/dist/components/gui/menu/exit-menu.ce.js +54 -0
  61. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -0
  62. package/dist/components/gui/menu/items-menu.ce.js +344 -0
  63. package/dist/components/gui/menu/items-menu.ce.js.map +1 -0
  64. package/dist/components/gui/menu/main-menu.ce.js +417 -0
  65. package/dist/components/gui/menu/main-menu.ce.js.map +1 -0
  66. package/dist/components/gui/menu/options-menu.ce.js +48 -0
  67. package/dist/components/gui/menu/options-menu.ce.js.map +1 -0
  68. package/dist/components/gui/menu/skills-menu.ce.js +107 -0
  69. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -0
  70. package/dist/components/gui/mobile/index.d.ts +8 -0
  71. package/dist/components/gui/mobile/index.js +21 -0
  72. package/dist/components/gui/mobile/index.js.map +1 -0
  73. package/dist/components/gui/mobile/mobile.ce.js +78 -0
  74. package/dist/components/gui/mobile/mobile.ce.js.map +1 -0
  75. package/dist/components/gui/notification/notification.ce.js +64 -0
  76. package/dist/components/gui/notification/notification.ce.js.map +1 -0
  77. package/dist/components/gui/save-load.ce.js +389 -0
  78. package/dist/components/gui/save-load.ce.js.map +1 -0
  79. package/dist/components/gui/shop/shop.ce.js +652 -0
  80. package/dist/components/gui/shop/shop.ce.js.map +1 -0
  81. package/dist/components/gui/title-screen.ce.js +190 -0
  82. package/dist/components/gui/title-screen.ce.js.map +1 -0
  83. package/dist/components/index.d.ts +1 -0
  84. package/dist/components/index.js +4 -0
  85. package/dist/components/prebuilt/hp-bar.ce.js +116 -0
  86. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -0
  87. package/dist/components/prebuilt/index.d.ts +19 -0
  88. package/dist/components/prebuilt/index.js +2 -0
  89. package/dist/components/prebuilt/light-halo.ce.js +94 -0
  90. package/dist/components/prebuilt/light-halo.ce.js.map +1 -0
  91. package/dist/components/scenes/canvas.ce.js +60 -0
  92. package/dist/components/scenes/canvas.ce.js.map +1 -0
  93. package/dist/components/scenes/draw-map.ce.js +89 -0
  94. package/dist/components/scenes/draw-map.ce.js.map +1 -0
  95. package/dist/components/scenes/event-layer.ce.js +28 -0
  96. package/dist/components/scenes/event-layer.ce.js.map +1 -0
  97. package/dist/core/inject.js +18 -0
  98. package/dist/core/inject.js.map +1 -0
  99. package/dist/core/setup.js +16 -0
  100. package/dist/core/setup.js.map +1 -0
  101. package/dist/index.d.ts +15 -1
  102. package/dist/index.js +44 -14
  103. package/dist/module.d.ts +43 -4
  104. package/dist/module.js +176 -0
  105. package/dist/module.js.map +1 -0
  106. package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js +277 -0
  107. package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +1 -0
  108. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +457 -0
  109. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +1 -0
  110. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +463 -0
  111. package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
  112. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +2191 -0
  113. package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +1 -0
  114. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +10 -0
  115. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +1 -0
  116. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +91 -0
  117. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +1 -0
  118. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js +325 -0
  119. package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +1 -0
  120. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +14 -0
  121. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +1 -0
  122. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js +115 -0
  123. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +1 -0
  124. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js +401 -0
  125. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +1 -0
  126. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +2 -0
  127. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js +3756 -0
  128. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +1 -0
  129. package/dist/presets/animation.d.ts +31 -0
  130. package/dist/presets/animation.js +39 -0
  131. package/dist/presets/animation.js.map +1 -0
  132. package/dist/presets/faceset.d.ts +30 -0
  133. package/dist/presets/faceset.js +51 -0
  134. package/dist/presets/faceset.js.map +1 -0
  135. package/dist/presets/icon.d.ts +20 -0
  136. package/dist/presets/icon.js +15 -0
  137. package/dist/presets/icon.js.map +1 -0
  138. package/dist/presets/index.d.ts +123 -0
  139. package/dist/presets/index.js +17 -0
  140. package/dist/presets/index.js.map +1 -0
  141. package/dist/presets/lpc.d.ts +89 -0
  142. package/dist/presets/lpc.js +98 -0
  143. package/dist/presets/lpc.js.map +1 -0
  144. package/dist/presets/rmspritesheet.js +42 -0
  145. package/dist/presets/rmspritesheet.js.map +1 -0
  146. package/dist/services/AbstractSocket.d.ts +9 -5
  147. package/dist/services/AbstractSocket.js +11 -0
  148. package/dist/services/AbstractSocket.js.map +1 -0
  149. package/dist/services/keyboardControls.d.ts +15 -0
  150. package/dist/services/keyboardControls.js +23 -0
  151. package/dist/services/keyboardControls.js.map +1 -0
  152. package/dist/services/loadMap.js +123 -0
  153. package/dist/services/loadMap.js.map +1 -0
  154. package/dist/services/mmorpg.d.ts +21 -9
  155. package/dist/services/mmorpg.js +131 -0
  156. package/dist/services/mmorpg.js.map +1 -0
  157. package/dist/services/save.d.ts +19 -0
  158. package/dist/services/save.js +77 -0
  159. package/dist/services/save.js.map +1 -0
  160. package/dist/services/standalone.d.ts +67 -7
  161. package/dist/services/standalone.js +168 -0
  162. package/dist/services/standalone.js.map +1 -0
  163. package/dist/utils/getEntityProp.d.ts +39 -0
  164. package/dist/utils/getEntityProp.js +52 -0
  165. package/dist/utils/getEntityProp.js.map +1 -0
  166. package/package.json +13 -9
  167. package/src/Game/{EffectManager.ts → AnimationManager.ts} +3 -2
  168. package/src/Game/Event.ts +1 -1
  169. package/src/Game/Map.ts +95 -3
  170. package/src/Game/Object.ts +330 -14
  171. package/src/Game/Player.ts +1 -1
  172. package/src/Gui/Gui.ts +506 -18
  173. package/src/Gui/NotificationManager.ts +69 -0
  174. package/src/Resource.ts +150 -0
  175. package/src/RpgClient.ts +246 -12
  176. package/src/RpgClientEngine.ts +1641 -62
  177. package/src/Sound.ts +253 -0
  178. package/src/components/{effects → animations}/animation.ce +3 -6
  179. package/src/components/{effects → animations}/index.ts +1 -1
  180. package/src/components/character.ce +387 -52
  181. package/src/components/dynamics/parse-value.ts +80 -0
  182. package/src/components/dynamics/text.ce +183 -0
  183. package/src/components/gui/box.ce +17 -0
  184. package/src/components/gui/dialogbox/index.ce +204 -187
  185. package/src/components/gui/gameover.ce +158 -0
  186. package/src/components/gui/hud/hud.ce +61 -0
  187. package/src/components/gui/index.ts +30 -4
  188. package/src/components/gui/menu/equip-menu.ce +410 -0
  189. package/src/components/gui/menu/exit-menu.ce +41 -0
  190. package/src/components/gui/menu/items-menu.ce +317 -0
  191. package/src/components/gui/menu/main-menu.ce +294 -0
  192. package/src/components/gui/menu/options-menu.ce +35 -0
  193. package/src/components/gui/menu/skills-menu.ce +83 -0
  194. package/src/components/gui/mobile/index.ts +24 -0
  195. package/src/components/gui/mobile/mobile.ce +80 -0
  196. package/src/components/gui/notification/notification.ce +51 -0
  197. package/src/components/gui/save-load.ce +208 -0
  198. package/src/components/gui/shop/shop.ce +493 -0
  199. package/src/components/gui/title-screen.ce +163 -0
  200. package/src/components/index.ts +3 -0
  201. package/src/components/prebuilt/hp-bar.ce +255 -0
  202. package/src/components/prebuilt/index.ts +24 -0
  203. package/src/components/prebuilt/light-halo.ce +148 -0
  204. package/src/components/scenes/canvas.ce +20 -15
  205. package/src/components/scenes/draw-map.ce +60 -13
  206. package/src/components/scenes/event-layer.ce +7 -0
  207. package/src/components/scenes/transition.ce +60 -0
  208. package/src/index.ts +16 -2
  209. package/src/module.ts +127 -9
  210. package/src/presets/animation.ts +46 -0
  211. package/src/presets/faceset.ts +60 -0
  212. package/src/presets/icon.ts +17 -0
  213. package/src/presets/index.ts +9 -1
  214. package/src/presets/lpc.ts +108 -0
  215. package/src/services/AbstractSocket.ts +10 -2
  216. package/src/services/keyboardControls.ts +20 -0
  217. package/src/services/loadMap.ts +1 -1
  218. package/src/services/mmorpg.ts +100 -12
  219. package/src/services/save.ts +103 -0
  220. package/src/services/standalone.ts +110 -18
  221. package/src/utils/getEntityProp.ts +87 -0
  222. package/vite.config.ts +4 -2
  223. package/dist/Game/EffectManager.d.ts +0 -5
  224. package/dist/components/effects/index.d.ts +0 -4
  225. package/dist/index.js.map +0 -1
  226. package/dist/index10.js +0 -8
  227. package/dist/index10.js.map +0 -1
  228. package/dist/index11.js +0 -10
  229. package/dist/index11.js.map +0 -1
  230. package/dist/index12.js +0 -8
  231. package/dist/index12.js.map +0 -1
  232. package/dist/index13.js +0 -17
  233. package/dist/index13.js.map +0 -1
  234. package/dist/index14.js +0 -107
  235. package/dist/index14.js.map +0 -1
  236. package/dist/index15.js +0 -50
  237. package/dist/index15.js.map +0 -1
  238. package/dist/index16.js +0 -191
  239. package/dist/index16.js.map +0 -1
  240. package/dist/index17.js +0 -9
  241. package/dist/index17.js.map +0 -1
  242. package/dist/index18.js +0 -387
  243. package/dist/index18.js.map +0 -1
  244. package/dist/index19.js +0 -31
  245. package/dist/index19.js.map +0 -1
  246. package/dist/index2.js +0 -181
  247. package/dist/index2.js.map +0 -1
  248. package/dist/index20.js +0 -24
  249. package/dist/index20.js.map +0 -1
  250. package/dist/index21.js +0 -2421
  251. package/dist/index21.js.map +0 -1
  252. package/dist/index22.js +0 -114
  253. package/dist/index22.js.map +0 -1
  254. package/dist/index23.js +0 -109
  255. package/dist/index23.js.map +0 -1
  256. package/dist/index24.js +0 -71
  257. package/dist/index24.js.map +0 -1
  258. package/dist/index25.js +0 -21
  259. package/dist/index25.js.map +0 -1
  260. package/dist/index26.js +0 -41
  261. package/dist/index26.js.map +0 -1
  262. package/dist/index27.js +0 -5
  263. package/dist/index27.js.map +0 -1
  264. package/dist/index28.js +0 -322
  265. package/dist/index28.js.map +0 -1
  266. package/dist/index29.js +0 -27
  267. package/dist/index29.js.map +0 -1
  268. package/dist/index3.js +0 -87
  269. package/dist/index3.js.map +0 -1
  270. package/dist/index30.js +0 -11
  271. package/dist/index30.js.map +0 -1
  272. package/dist/index31.js +0 -11
  273. package/dist/index31.js.map +0 -1
  274. package/dist/index32.js +0 -174
  275. package/dist/index32.js.map +0 -1
  276. package/dist/index33.js +0 -501
  277. package/dist/index33.js.map +0 -1
  278. package/dist/index34.js +0 -12
  279. package/dist/index34.js.map +0 -1
  280. package/dist/index35.js +0 -4403
  281. package/dist/index35.js.map +0 -1
  282. package/dist/index36.js +0 -316
  283. package/dist/index36.js.map +0 -1
  284. package/dist/index37.js +0 -61
  285. package/dist/index37.js.map +0 -1
  286. package/dist/index38.js +0 -20
  287. package/dist/index38.js.map +0 -1
  288. package/dist/index39.js +0 -20
  289. package/dist/index39.js.map +0 -1
  290. package/dist/index4.js +0 -67
  291. package/dist/index4.js.map +0 -1
  292. package/dist/index5.js +0 -16
  293. package/dist/index5.js.map +0 -1
  294. package/dist/index6.js +0 -17
  295. package/dist/index6.js.map +0 -1
  296. package/dist/index7.js +0 -39
  297. package/dist/index7.js.map +0 -1
  298. package/dist/index8.js +0 -108
  299. package/dist/index8.js.map +0 -1
  300. package/dist/index9.js +0 -76
  301. package/dist/index9.js.map +0 -1
  302. package/src/components/gui/dialogbox/itemMenu.ce +0 -23
  303. package/src/components/gui/dialogbox/selection.ce +0 -67
  304. /package/src/components/{effects → animations}/hit.ce +0 -0
@@ -1,7 +1,9 @@
1
- import { ComponentFunction } from 'canvasengine';
1
+ import { ComponentFunction, Signal } from 'canvasengine';
2
2
  import { RpgClientEngine } from './RpgClientEngine';
3
3
  import { Loader, Container } from 'pixi.js';
4
- type RpgComponent = Container;
4
+ import { RpgClientObject } from './Game/Object';
5
+ import { MapPhysicsEntityContext, MapPhysicsInitContext } from '@rpgjs/common';
6
+ type RpgComponent = RpgClientObject;
5
7
  type SceneMap = Container;
6
8
  export interface RpgClientEngineHooks {
7
9
  /**
@@ -179,6 +181,37 @@ export interface RpgSceneMapHooks extends RpgSceneHooks<SceneMap> {
179
181
  * @memberof RpgSceneHooks
180
182
  */
181
183
  onMapLoading?: (scene: SceneMap, loader: Loader) => any;
184
+ /**
185
+ * Called when client physics has been initialized for the current map.
186
+ *
187
+ * Use this hook to initialize shared physics extensions based on map data
188
+ * (for example, tile-based collision rules used by client prediction).
189
+ *
190
+ * @prop { (scene: SceneMap, context: MapPhysicsInitContext) => any } [onPhysicsInit]
191
+ * @memberof RpgSceneMapHooks
192
+ */
193
+ onPhysicsInit?: (scene: SceneMap, context: MapPhysicsInitContext) => any;
194
+ /**
195
+ * Called when a character physics body is added to the map.
196
+ *
197
+ * @prop { (scene: SceneMap, context: MapPhysicsEntityContext) => any } [onPhysicsEntityAdd]
198
+ * @memberof RpgSceneMapHooks
199
+ */
200
+ onPhysicsEntityAdd?: (scene: SceneMap, context: MapPhysicsEntityContext) => any;
201
+ /**
202
+ * Called when a character physics body is removed from the map.
203
+ *
204
+ * @prop { (scene: SceneMap, context: MapPhysicsEntityContext) => any } [onPhysicsEntityRemove]
205
+ * @memberof RpgSceneMapHooks
206
+ */
207
+ onPhysicsEntityRemove?: (scene: SceneMap, context: MapPhysicsEntityContext) => any;
208
+ /**
209
+ * Called when the physics world is reset (e.g. before a map physics reload).
210
+ *
211
+ * @prop { (scene: SceneMap) => any } [onPhysicsReset]
212
+ * @memberof RpgSceneMapHooks
213
+ */
214
+ onPhysicsReset?: (scene: SceneMap) => any;
182
215
  }
183
216
  export interface RpgClient {
184
217
  /**
@@ -283,33 +316,200 @@ export interface RpgClient {
283
316
  * */
284
317
  spritesheets?: any[];
285
318
  /**
286
- * Array containing the list of VueJS components
319
+ * Resolver function for dynamically creating spritesheets
320
+ *
321
+ * This function is called when a spritesheet is requested but not found in the cache.
322
+ * It can be synchronous (returns directly) or asynchronous (returns a Promise).
323
+ * The resolved spritesheet is automatically cached for future use.
324
+ *
325
+ * ```ts
326
+ * import { defineModule, RpgClient } from '@rpgjs/client'
287
327
  *
328
+ * defineModule<RpgClient>({
329
+ * spritesheetResolver: (id: string) => {
330
+ * // Synchronous resolver
331
+ * if (id === 'dynamic-sprite') {
332
+ * return {
333
+ * id: 'dynamic-sprite',
334
+ * image: 'path/to/image.png',
335
+ * framesWidth: 32,
336
+ * framesHeight: 32
337
+ * };
338
+ * }
339
+ * return undefined;
340
+ * }
341
+ * })
342
+ *
343
+ * // Or asynchronous resolver
344
+ * defineModule<RpgClient>({
345
+ * spritesheetResolver: async (id: string) => {
346
+ * const response = await fetch(`/api/spritesheets/${id}`);
347
+ * const data = await response.json();
348
+ * return data;
349
+ * }
350
+ * })
351
+ * ```
352
+ *
353
+ * @prop {(id: string) => any | Promise<any>} [spritesheetResolver]
354
+ * @memberof RpgClient
355
+ * */
356
+ spritesheetResolver?: (id: string) => any | Promise<any>;
357
+ /**
358
+ * Resolver function for dynamically loading sounds
359
+ *
360
+ * The resolver is called when a sound is requested but not found in the cache.
361
+ * It can be synchronous (returns directly) or asynchronous (returns a Promise).
362
+ * The resolved sound is automatically cached for future use.
363
+ *
364
+ * ```ts
365
+ * import { defineModule, RpgClient } from '@rpgjs/client'
366
+ *
367
+ * defineModule<RpgClient>({
368
+ * soundResolver: (id: string) => {
369
+ * if (id === 'dynamic-sound') {
370
+ * return { id: 'dynamic-sound', src: 'path/to/sound.mp3' };
371
+ * }
372
+ * return undefined;
373
+ * }
374
+ * })
375
+ * ```
376
+ *
377
+ * @prop {(id: string) => any | Promise<any>} [soundResolver]
378
+ * @memberof RpgClient
379
+ * */
380
+ soundResolver?: (id: string) => any | Promise<any>;
381
+ /**
382
+ * Array containing the list of GUI components
383
+ *
384
+ * ```ts
385
+ * import { defineModule, RpgClient } from '@rpgjs/client'
386
+ * import InventoryComponent from './inventory.ce'
387
+ *
388
+ * defineModule<RpgClient>({
389
+ * gui: [
390
+ * {
391
+ * id: 'inventory',
392
+ * component: InventoryComponent,
393
+ * autoDisplay: true,
394
+ * dependencies: () => [playerSignal, inventorySignal]
395
+ * }
396
+ * ]
397
+ * })
398
+ * ```
288
399
  *
289
400
  * [Guide: Create GUI](/guide/create-gui.html)
290
401
  *
291
- * @prop {Array<Component of CanvasEngine>} [gui]
402
+ * @prop {Array<GuiOptions>} [gui]
292
403
  * @memberof RpgClient
293
404
  * */
294
- gui?: ComponentFunction[];
405
+ gui?: ({
406
+ id: string;
407
+ component: ComponentFunction;
408
+ /**
409
+ * Auto display the GUI when added to the system
410
+ * @default false
411
+ */
412
+ autoDisplay?: boolean;
413
+ /**
414
+ * Function that returns an array of Signal dependencies
415
+ * The GUI will only display when all dependencies are resolved (!= undefined)
416
+ */
417
+ dependencies?: () => Signal[];
418
+ /**
419
+ * Attach the GUI to sprites instead of displaying globally
420
+ *
421
+ * When set to `true`, the GUI component will be rendered directly on each sprite
422
+ * in the game world, rather than being displayed as a fixed overlay on the screen.
423
+ * This is useful for tooltips, health bars, name tags, or any UI element that
424
+ * should follow a specific sprite.
425
+ *
426
+ * The GUI will be rendered in the `character.ce` component for each sprite.
427
+ * You can control the display state of attached GUIs from the server side using
428
+ * `player.showAttachedGui()` and `player.hideAttachedGui()` methods.
429
+ *
430
+ * @default false
431
+ * @example
432
+ * ```ts
433
+ * import { defineModule, RpgClient } from '@rpgjs/client'
434
+ * import TooltipComponent from './tooltip.ce'
435
+ *
436
+ * defineModule<RpgClient>({
437
+ * gui: [
438
+ * {
439
+ * id: "my-tooltip",
440
+ * component: TooltipComponent,
441
+ * attachToSprite: true
442
+ * }
443
+ * ]
444
+ * })
445
+ * ```
446
+ *
447
+ * On the server side, control the display:
448
+ * ```ts
449
+ * // Show the tooltip for this player
450
+ * player.showAttachedGui()
451
+ *
452
+ * // Hide the tooltip for this player
453
+ * player.hideAttachedGui()
454
+ *
455
+ * // Show tooltip for other players
456
+ * player.showAttachedGui([otherPlayer1, otherPlayer2])
457
+ * ```
458
+ */
459
+ attachToSprite?: boolean;
460
+ } | any)[];
295
461
  /**
296
462
  * Array containing the list of sounds
297
- * Each element is a simple object containing sound definitions
463
+ * Each element can be:
464
+ * - A simple object containing sound definitions
465
+ * - A class decorated with @Sound
298
466
  *
299
467
  * ```ts
300
- * import { defineModule, RpgClient } from '@rpgjs/client'
468
+ * import { defineModule, RpgClient, Sound } from '@rpgjs/client'
301
469
  *
470
+ * // Using simple objects
302
471
  * defineModule<RpgClient>({
303
472
  * sounds: [
304
473
  * {
305
- * town: require('./assets/Town_Theme.ogg'),
306
- * battle: require('./assets/Battle_Theme.ogg')
474
+ * id: 'typewriter',
475
+ * src: 'typewriter.wav'
476
+ * },
477
+ * {
478
+ * id: 'cursor',
479
+ * src: 'cursor.wav'
307
480
  * }
308
481
  * ]
309
482
  * })
483
+ *
484
+ * // Using @Sound decorator
485
+ * @Sound({
486
+ * id: 'town-music',
487
+ * sound: require('./sound/town.ogg'),
488
+ * loop: true,
489
+ * volume: 0.5
490
+ * })
491
+ * export class TownMusic {}
492
+ *
493
+ * defineModule<RpgClient>({
494
+ * sounds: [TownMusic]
495
+ * })
496
+ *
497
+ * // Multiple sounds in one class
498
+ * @Sound({
499
+ * sounds: {
500
+ * hero: require('./assets/hero.ogg'),
501
+ * monster: require('./assets/monster.ogg')
502
+ * },
503
+ * loop: true
504
+ * })
505
+ * export class CharacterSounds {}
506
+ *
507
+ * defineModule<RpgClient>({
508
+ * sounds: [CharacterSounds]
509
+ * })
310
510
  * ```
311
511
  *
312
- * @prop {Array<Object>} [sounds]
512
+ * @prop {Array<Object | Class>} [sounds]
313
513
  * @memberof RpgClient
314
514
  * */
315
515
  sounds?: any[];
@@ -356,7 +556,34 @@ export interface RpgClient {
356
556
  scenes?: {
357
557
  map: RpgSceneMapHooks;
358
558
  };
359
- effects?: {
559
+ sceneMap?: RpgSceneMapHooks;
560
+ /**
561
+ * Array containing the list of component animations
562
+ * Each element defines a temporary component to display for animations like hits, effects, etc.
563
+ *
564
+ * ```ts
565
+ * import { defineModule, RpgClient } from '@rpgjs/client'
566
+ * import HitComponent from './hit.ce'
567
+ * import ExplosionComponent from './explosion.ce'
568
+ *
569
+ * defineModule<RpgClient>({
570
+ * componentAnimations: [
571
+ * {
572
+ * id: 'hit',
573
+ * component: HitComponent
574
+ * },
575
+ * {
576
+ * id: 'explosion',
577
+ * component: ExplosionComponent
578
+ * }
579
+ * ]
580
+ * })
581
+ * ```
582
+ *
583
+ * @prop {Array<{id: string, component: ComponentFunction}>} [componentAnimations]
584
+ * @memberof RpgClient
585
+ * */
586
+ componentAnimations?: {
360
587
  id: string;
361
588
  component: ComponentFunction;
362
589
  }[];