@rpgjs/client 5.0.0-alpha.23 → 5.0.0-alpha.25

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 (187) hide show
  1. package/dist/{index30.js → Game/AnimationManager.js} +1 -1
  2. package/dist/Game/AnimationManager.js.map +1 -0
  3. package/dist/{index24.js → Game/Event.js} +2 -2
  4. package/dist/Game/Event.js.map +1 -0
  5. package/dist/{index29.js → Game/Map.js} +6 -6
  6. package/dist/Game/Map.js.map +1 -0
  7. package/dist/{index22.js → Game/Object.js} +4 -4
  8. package/dist/Game/Object.js.map +1 -0
  9. package/dist/{index23.js → Game/Player.js} +2 -2
  10. package/dist/Game/Player.js.map +1 -0
  11. package/dist/{index9.js → Gui/Gui.js} +10 -11
  12. package/dist/{index9.js.map → Gui/Gui.js.map} +1 -1
  13. package/dist/{index19.js → Resource.js} +1 -1
  14. package/dist/Resource.js.map +1 -0
  15. package/dist/RpgClientEngine.d.ts +66 -115
  16. package/dist/{index2.js → RpgClientEngine.js} +234 -176
  17. package/dist/RpgClientEngine.js.map +1 -0
  18. package/dist/{index18.js → Sound.js} +1 -1
  19. package/dist/Sound.js.map +1 -0
  20. package/dist/{index35.js → components/animations/animation.ce.js} +3 -3
  21. package/dist/components/animations/animation.ce.js.map +1 -0
  22. package/dist/{index34.js → components/animations/hit.ce.js} +1 -1
  23. package/dist/components/animations/hit.ce.js.map +1 -0
  24. package/dist/{index12.js → components/animations/index.js} +3 -3
  25. package/dist/components/animations/index.js.map +1 -0
  26. package/dist/{index17.js → components/character.ce.js} +4 -4
  27. package/dist/components/character.ce.js.map +1 -0
  28. package/dist/{index51.js → components/dynamics/parse-value.js} +1 -1
  29. package/dist/components/dynamics/parse-value.js.map +1 -0
  30. package/dist/{index40.js → components/dynamics/text.ce.js} +2 -2
  31. package/dist/components/dynamics/text.ce.js.map +1 -0
  32. package/dist/{index11.js → components/gui/box.ce.js} +8 -8
  33. package/dist/components/gui/box.ce.js.map +1 -0
  34. package/dist/{index10.js → components/gui/dialogbox/index.ce.js} +4 -4
  35. package/dist/components/gui/dialogbox/index.ce.js.map +1 -0
  36. package/dist/{index52.js → components/gui/dialogbox/itemMenu.ce.js} +1 -1
  37. package/dist/components/gui/dialogbox/itemMenu.ce.js.map +1 -0
  38. package/dist/{index47.js → components/gui/dialogbox/selection.ce.js} +4 -4
  39. package/dist/components/gui/dialogbox/selection.ce.js.map +1 -0
  40. package/dist/components/gui/mobile/index.d.ts +1 -1
  41. package/dist/{index25.js → components/gui/mobile/index.js} +5 -5
  42. package/dist/components/gui/mobile/index.js.map +1 -0
  43. package/dist/components/gui/mobile/mobile.ce.js +17 -0
  44. package/dist/components/gui/mobile/mobile.ce.js.map +1 -0
  45. package/dist/{index13.js → components/prebuilt/hp-bar.ce.js} +1 -1
  46. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -0
  47. package/dist/{index14.js → components/prebuilt/light-halo.ce.js} +2 -3
  48. package/dist/components/prebuilt/light-halo.ce.js.map +1 -0
  49. package/dist/{index26.js → components/scenes/canvas.ce.js} +6 -7
  50. package/dist/components/scenes/canvas.ce.js.map +1 -0
  51. package/dist/{index46.js → components/scenes/draw-map.ce.js} +3 -3
  52. package/dist/components/scenes/draw-map.ce.js.map +1 -0
  53. package/dist/{index16.js → components/scenes/event-layer.ce.js} +4 -4
  54. package/dist/components/scenes/event-layer.ce.js.map +1 -0
  55. package/dist/{index6.js → core/inject.js} +2 -2
  56. package/dist/core/inject.js.map +1 -0
  57. package/dist/{index5.js → core/setup.js} +4 -4
  58. package/dist/core/setup.js.map +1 -0
  59. package/dist/index.d.ts +1 -0
  60. package/dist/index.js +25 -24
  61. package/dist/index.js.map +1 -1
  62. package/dist/{index8.js → module.js} +10 -5
  63. package/dist/module.js.map +1 -0
  64. package/dist/{index20.js → node_modules/.pnpm/@signe_di@2.6.0/node_modules/@signe/di/dist/index.js} +1 -1
  65. package/dist/node_modules/.pnpm/@signe_di@2.6.0/node_modules/@signe/di/dist/index.js.map +1 -0
  66. package/dist/{index45.js → node_modules/.pnpm/@signe_reactive@2.6.0/node_modules/@signe/reactive/dist/index.js} +216 -11
  67. package/dist/node_modules/.pnpm/@signe_reactive@2.6.0/node_modules/@signe/reactive/dist/index.js.map +1 -0
  68. package/dist/{index32.js → node_modules/.pnpm/@signe_room@2.6.0/node_modules/@signe/room/dist/index.js} +29 -30
  69. package/dist/node_modules/.pnpm/@signe_room@2.6.0/node_modules/@signe/room/dist/index.js.map +1 -0
  70. package/dist/{index42.js → node_modules/.pnpm/@signe_sync@2.6.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js} +1 -1
  71. package/dist/node_modules/.pnpm/@signe_sync@2.6.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +1 -0
  72. package/dist/{index33.js → node_modules/.pnpm/@signe_sync@2.6.0/node_modules/@signe/sync/dist/client/index.js} +5 -5
  73. package/dist/node_modules/.pnpm/@signe_sync@2.6.0/node_modules/@signe/sync/dist/client/index.js.map +1 -0
  74. package/dist/{index28.js → node_modules/.pnpm/@signe_sync@2.6.0/node_modules/@signe/sync/dist/index.js} +3 -3
  75. package/dist/node_modules/.pnpm/@signe_sync@2.6.0/node_modules/@signe/sync/dist/index.js.map +1 -0
  76. package/dist/{index48.js → node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js} +1 -1
  77. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +1 -0
  78. package/dist/{index43.js → node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js} +2 -15
  79. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +1 -0
  80. package/dist/{index44.js → node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js} +2 -5
  81. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +1 -0
  82. package/dist/{index50.js → node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js} +813 -100
  83. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +1 -0
  84. package/dist/{index36.js → presets/animation.js} +1 -1
  85. package/dist/presets/animation.js.map +1 -0
  86. package/dist/{index39.js → presets/faceset.js} +1 -1
  87. package/dist/presets/faceset.js.map +1 -0
  88. package/dist/presets/index.js +14 -0
  89. package/dist/presets/index.js.map +1 -0
  90. package/dist/{index37.js → presets/lpc.js} +1 -1
  91. package/dist/presets/lpc.js.map +1 -0
  92. package/dist/{index38.js → presets/rmspritesheet.js} +1 -1
  93. package/dist/presets/rmspritesheet.js.map +1 -0
  94. package/dist/{index27.js → services/AbstractSocket.js} +1 -1
  95. package/dist/services/AbstractSocket.js.map +1 -0
  96. package/dist/{index21.js → services/keyboardControls.js} +1 -1
  97. package/dist/services/keyboardControls.js.map +1 -0
  98. package/dist/{index7.js → services/loadMap.js} +2 -2
  99. package/dist/services/loadMap.js.map +1 -0
  100. package/dist/{index4.js → services/mmorpg.js} +6 -6
  101. package/dist/services/mmorpg.js.map +1 -0
  102. package/dist/services/standalone.d.ts +3 -0
  103. package/dist/{index3.js → services/standalone.js} +18 -12
  104. package/dist/services/standalone.js.map +1 -0
  105. package/package.json +9 -9
  106. package/src/Gui/Gui.ts +0 -1
  107. package/src/RpgClientEngine.ts +298 -182
  108. package/src/components/character.ce +2 -3
  109. package/src/components/gui/mobile/index.ts +1 -1
  110. package/src/components/gui/mobile/mobile.ce +73 -88
  111. package/src/components/prebuilt/light-halo.ce +2 -71
  112. package/src/components/scenes/canvas.ce +0 -10
  113. package/src/components/scenes/event-layer.ce +1 -0
  114. package/src/index.ts +2 -1
  115. package/src/module.ts +6 -1
  116. package/src/services/standalone.ts +16 -7
  117. package/vite.config.ts +4 -2
  118. package/dist/Game/TransitionManager.d.ts +0 -56
  119. package/dist/index10.js.map +0 -1
  120. package/dist/index11.js.map +0 -1
  121. package/dist/index12.js.map +0 -1
  122. package/dist/index13.js.map +0 -1
  123. package/dist/index14.js.map +0 -1
  124. package/dist/index15.js +0 -14
  125. package/dist/index15.js.map +0 -1
  126. package/dist/index16.js.map +0 -1
  127. package/dist/index17.js.map +0 -1
  128. package/dist/index18.js.map +0 -1
  129. package/dist/index19.js.map +0 -1
  130. package/dist/index2.js.map +0 -1
  131. package/dist/index20.js.map +0 -1
  132. package/dist/index21.js.map +0 -1
  133. package/dist/index22.js.map +0 -1
  134. package/dist/index23.js.map +0 -1
  135. package/dist/index24.js.map +0 -1
  136. package/dist/index25.js.map +0 -1
  137. package/dist/index26.js.map +0 -1
  138. package/dist/index27.js.map +0 -1
  139. package/dist/index28.js.map +0 -1
  140. package/dist/index29.js.map +0 -1
  141. package/dist/index3.js.map +0 -1
  142. package/dist/index30.js.map +0 -1
  143. package/dist/index31.js +0 -53
  144. package/dist/index31.js.map +0 -1
  145. package/dist/index32.js.map +0 -1
  146. package/dist/index33.js.map +0 -1
  147. package/dist/index34.js.map +0 -1
  148. package/dist/index35.js.map +0 -1
  149. package/dist/index36.js.map +0 -1
  150. package/dist/index37.js.map +0 -1
  151. package/dist/index38.js.map +0 -1
  152. package/dist/index39.js.map +0 -1
  153. package/dist/index4.js.map +0 -1
  154. package/dist/index40.js.map +0 -1
  155. package/dist/index41.js +0 -43
  156. package/dist/index41.js.map +0 -1
  157. package/dist/index42.js.map +0 -1
  158. package/dist/index43.js.map +0 -1
  159. package/dist/index44.js.map +0 -1
  160. package/dist/index45.js.map +0 -1
  161. package/dist/index46.js.map +0 -1
  162. package/dist/index47.js.map +0 -1
  163. package/dist/index48.js.map +0 -1
  164. package/dist/index49.js +0 -7
  165. package/dist/index49.js.map +0 -1
  166. package/dist/index5.js.map +0 -1
  167. package/dist/index50.js.map +0 -1
  168. package/dist/index51.js.map +0 -1
  169. package/dist/index52.js.map +0 -1
  170. package/dist/index53.js +0 -6
  171. package/dist/index53.js.map +0 -1
  172. package/dist/index54.js +0 -12
  173. package/dist/index54.js.map +0 -1
  174. package/dist/index55.js +0 -113
  175. package/dist/index55.js.map +0 -1
  176. package/dist/index56.js +0 -136
  177. package/dist/index56.js.map +0 -1
  178. package/dist/index57.js +0 -137
  179. package/dist/index57.js.map +0 -1
  180. package/dist/index58.js +0 -112
  181. package/dist/index58.js.map +0 -1
  182. package/dist/index59.js +0 -9
  183. package/dist/index59.js.map +0 -1
  184. package/dist/index6.js.map +0 -1
  185. package/dist/index7.js.map +0 -1
  186. package/dist/index8.js.map +0 -1
  187. package/src/Game/TransitionManager.ts +0 -75
@@ -1 +0,0 @@
1
- {"version":3,"file":"index6.js","sources":["../src/core/inject.ts"],"sourcesContent":["import { Context, inject as injector } from \"@signe/di\";\n\nexport let context: Context | null = null\n\nexport function inject<T>(service: (new (...args: any[]) => T) | string, _context?: Context): T {\n const c = _context ?? context\n if (!c) throw new Error(\"Context is not set. use setInject() to set the context\");\n return injector(c, service);\n}\n\nexport function setInject(_context: Context) {\n context = _context;\n}\n\nexport function clearInject() {\n context = null\n}"],"names":["injector"],"mappings":";;AAEO,IAAI,OAAA,GAA0B;AAE9B,SAAS,MAAA,CAAU,SAA+C,QAAA,EAAuB;AAC5F,EAAA,MAAM,IAAI,QAAA,IAAY,OAAA;AACtB,EAAA,IAAI,CAAC,CAAA,EAAG,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAChF,EAAA,OAAOA,QAAA,CAAS,GAAG,OAAO,CAAA;AAC9B;AAEO,SAAS,UAAU,QAAA,EAAmB;AACzC,EAAA,OAAA,GAAU,QAAA;AACd;AAEO,SAAS,WAAA,GAAc;AAC1B,EAAA,OAAA,GAAU,IAAA;AACd;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index7.js","sources":["../src/services/loadMap.ts"],"sourcesContent":["import { Context, inject } from \"@signe/di\";\nimport { UpdateMapToken, UpdateMapService } from \"@rpgjs/common\";\n\nexport const LoadMapToken = 'LoadMapToken'\n\n/**\n * Represents the structure of map data that should be returned by the load map callback.\n * This interface defines all the properties that can be provided when loading a custom map.\n * \n * @interface MapData\n */\ntype MapData = {\n /** Raw map data that will be passed to the map component */\n data: any;\n /** CanvasEngine component that will render the map */\n component: any;\n /** Optional map width in pixels, used for viewport calculations */\n width?: number;\n /** Optional map height in pixels, used for viewport calculations */\n height?: number;\n /** Optional map events data (NPCs, interactive objects, etc.) */\n events?: any;\n /** Optional map identifier, defaults to the mapId parameter if not provided */\n id?: string;\n}\n\n/**\n * Callback function type for loading map data.\n * This function receives a map ID and should return either a MapData object directly\n * or a Promise that resolves to a MapData object.\n * \n * @callback LoadMapOptions\n * @param {string} mapId - The identifier of the map to load\n * @returns {Promise<MapData> | MapData} The map data object or a promise resolving to it\n */\nexport type LoadMapOptions = (mapId: string) => Promise<MapData> | MapData \n\nexport class LoadMapService {\n private updateMapService: UpdateMapService;\n\n constructor(private context: Context, private options: LoadMapOptions) {\n if (context['side'] === 'server') {\n return\n }\n this.updateMapService = inject(context, UpdateMapToken);\n }\n\n async load(mapId: string) {\n const map = await this.options(mapId.replace('map-', ''))\n await this.updateMapService.update(map);\n return map;\n }\n}\n\n/**\n * Creates a dependency injection configuration for custom map loading on the client side.\n * \n * This function allows you to customize how maps are loaded and displayed by providing\n * a callback that defines custom map data and rendering components. It's designed to work\n * with the RPG-JS dependency injection system and enables integration of custom map formats\n * like Tiled TMX files or any other map data structure.\n * \n * The function sets up the necessary service providers for map loading, including:\n * - UpdateMapToken: Handles map updates in the client context\n * - LoadMapToken: Provides the LoadMapService with your custom loading logic\n * \n * **Design Concept:**\n * The function follows the provider pattern, creating a modular way to inject custom\n * map loading behavior into the RPG-JS client engine. It separates the concern of\n * map data fetching from map rendering, allowing developers to focus on their specific\n * map format while leveraging the engine's rendering capabilities.\n * \n * @param {LoadMapOptions} options - Callback function that handles map loading logic\n * @returns {Array<Object>} Array of dependency injection provider configurations\n * \n * @example\n * ```typescript\n * import { provideLoadMap } from '@rpgjs/client'\n * import { createModule } from '@rpgjs/common'\n * import MyTiledMapComponent from './MyTiledMapComponent.ce'\n * \n * // Basic usage with JSON map data\n * export function provideCustomMap() {\n * return createModule(\"CustomMap\", [\n * provideLoadMap(async (mapId) => {\n * const response = await fetch(`/maps/${mapId}.json`)\n * const mapData = await response.json()\n * \n * return {\n * data: mapData,\n * component: MyTiledMapComponent,\n * width: mapData.width,\n * height: mapData.height,\n * events: mapData.events\n * }\n * })\n * ])\n * }\n * \n * // Advanced usage with Tiled TMX files\n * export function provideTiledMap() {\n * return createModule(\"TiledMap\", [\n * provideLoadMap(async (mapId) => {\n * // Load TMX file\n * const tmxResponse = await fetch(`/tiled/${mapId}.tmx`)\n * const tmxData = await tmxResponse.text()\n * \n * // Parse TMX data (using a TMX parser)\n * const parsedMap = parseTMX(tmxData)\n * \n * return {\n * data: parsedMap,\n * component: TiledMapRenderer,\n * width: parsedMap.width * parsedMap.tilewidth,\n * height: parsedMap.height * parsedMap.tileheight,\n * events: parsedMap.objectGroups?.find(g => g.name === 'events')?.objects\n * }\n * })\n * ])\n * }\n * \n * // Synchronous usage for static maps\n * export function provideStaticMap() {\n * return createModule(\"StaticMap\", [\n * provideLoadMap((mapId) => {\n * const staticMaps = {\n * 'town': { tiles: [...], npcs: [...] },\n * 'dungeon': { tiles: [...], monsters: [...] }\n * }\n * \n * return {\n * data: staticMaps[mapId],\n * component: StaticMapComponent,\n * width: 800,\n * height: 600\n * }\n * })\n * ])\n * }\n * ```\n * \n * @since 4.0.0\n * @see {@link LoadMapOptions} for callback function signature\n * @see {@link MapData} for return data structure\n */\nexport function provideLoadMap(options: LoadMapOptions) {\n return [\n {\n provide: UpdateMapToken,\n useFactory: (context: Context) => {\n if (context['side'] === 'client') {\n console.warn('UpdateMapToken is not overridden')\n }\n return\n },\n },\n {\n provide: LoadMapToken,\n useFactory: (context: Context) => new LoadMapService(context, options),\n },\n ];\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,YAAA,GAAe;AAkCrB,MAAM,cAAA,CAAe;AAAA,EAG1B,WAAA,CAAoB,SAA0B,OAAA,EAAyB;AAAnD,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAA0B,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAC5C,IAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,QAAA,EAAU;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,gBAAA,GAAmB,MAAA,CAAO,OAAA,EAAS,cAAc,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,KAAK,KAAA,EAAe;AACxB,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA;AACxD,IAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,MAAA,CAAO,GAAG,CAAA;AACtC,IAAA,OAAO,GAAA;AAAA,EACT;AACF;AA6FO,SAAS,eAAe,OAAA,EAAyB;AACtD,EAAA,OAAO;AAAA,IACL;AAAA,MACE,OAAA,EAAS,cAAA;AAAA,MACT,UAAA,EAAY,CAAC,OAAA,KAAqB;AAChC,QAAA,IAAI,OAAA,CAAQ,MAAM,CAAA,KAAM,QAAA,EAAU;AAChC,UAAA,OAAA,CAAQ,KAAK,kCAAkC,CAAA;AAAA,QACjD;AACA,QAAA;AAAA,MACF;AAAA,KACF;AAAA,IACA;AAAA,MACE,OAAA,EAAS,YAAA;AAAA,MACT,YAAY,CAAC,OAAA,KAAqB,IAAI,cAAA,CAAe,SAAS,OAAO;AAAA;AACvE,GACF;AACF;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index8.js","sources":["../src/module.ts"],"sourcesContent":["import { findModules, provideModules } from \"@rpgjs/common\";\nimport { FactoryProvider } from \"@signe/di\";\nimport { RpgClientEngine } from \"./RpgClientEngine\";\nimport { RpgClient } from \"./RpgClient\";\nimport { inject } from \"@signe/di\";\nimport { RpgGui } from \"./Gui/Gui\";\nimport { getSoundMetadata } from \"./Sound\";\n\n/**\n * Type for client modules that can be either:\n * - An object implementing RpgClient interface\n * - A class decorated with @RpgModule decorator\n */\nexport type RpgClientModule = RpgClient | (new () => any);\n\n/**\n * Provides client modules configuration to Dependency Injection\n * \n * This function accepts an array of client modules that can be either:\n * - Objects implementing the RpgClient interface\n * - Classes decorated with the @RpgModule decorator (which will be instantiated)\n * \n * @param modules - Array of client modules (objects or classes)\n * @returns FactoryProvider configuration for DI\n * @example\n * ```ts\n * // Using an object\n * provideClientModules([\n * {\n * engine: {\n * onConnected(engine) {\n * console.log('Client connected')\n * }\n * }\n * }\n * ])\n * \n * // Using a decorated class\n * @RpgModule<RpgClient>({\n * engine: {\n * onStart(engine) {\n * console.log('Client started')\n * }\n * }\n * })\n * class MyClientModule {}\n * \n * provideClientModules([MyClientModule])\n * ```\n */\nexport function provideClientModules(modules: RpgClientModule[]): FactoryProvider {\n return provideModules(modules, \"client\", (modules, context) => {\n const mainModuleClient = findModules(context, 'Client')\n modules = [...mainModuleClient, ...modules]\n modules = modules.map((module) => {\n // If module is a class (constructor function), instantiate it\n // The RpgModule decorator adds properties to the prototype, which will be accessible via the instance\n if (typeof module === 'function') {\n const instance = new module() as any;\n // Copy all enumerable properties (including from prototype) to a plain object\n const moduleObj: any = {};\n for (const key in instance) {\n moduleObj[key] = instance[key];\n }\n module = moduleObj;\n }\n if ('client' in module) {\n module = module.client as any;\n }\n if (module.spritesheets) {\n const spritesheets = [...module.spritesheets];\n module.spritesheets = {\n load: (engine: RpgClientEngine) => {\n spritesheets.forEach((spritesheet) => {\n engine.addSpriteSheet(spritesheet);\n });\n },\n };\n }\n if (module.spritesheetResolver) {\n const resolver = module.spritesheetResolver;\n module.spritesheetResolver = {\n load: (engine: RpgClientEngine) => {\n engine.setSpritesheetResolver(resolver);\n },\n };\n }\n if (module.sounds) {\n const sounds = [...module.sounds];\n module.sounds = {\n load: (engine: RpgClientEngine) => {\n sounds.forEach((sound) => {\n // Check if it's a class decorated with @Sound\n if (typeof sound === 'function' || (sound && sound.constructor && sound.constructor !== Object)) {\n const metadata = getSoundMetadata(sound);\n if (metadata) {\n // Handle single sound\n if (metadata.id && metadata.sound) {\n engine.addSound({\n id: metadata.id,\n src: metadata.sound,\n loop: metadata.loop,\n volume: metadata.volume,\n });\n }\n // Handle multiple sounds\n if (metadata.sounds) {\n Object.entries(metadata.sounds).forEach(([soundId, soundSrc]) => {\n engine.addSound({\n id: soundId,\n src: soundSrc,\n loop: metadata.loop,\n volume: metadata.volume,\n });\n });\n }\n } else {\n // Not a decorated class, treat as regular sound object\n engine.addSound(sound);\n }\n } else {\n // Regular sound object\n engine.addSound(sound);\n }\n });\n },\n };\n }\n if (module.soundResolver) {\n const resolver = module.soundResolver;\n module.soundResolver = {\n load: (engine: RpgClientEngine) => {\n engine.setSoundResolver(resolver);\n },\n };\n }\n if (module.gui) {\n const gui = [...module.gui];\n module.gui = {\n load: (engine: RpgClientEngine) => {\n const guiService = inject(engine.context, RpgGui) as RpgGui;\n gui.forEach((gui) => {\n guiService.add(gui);\n });\n },\n };\n }\n if (module.componentAnimations) {\n const componentAnimations = [...module.componentAnimations];\n module.componentAnimations = {\n load: (engine: RpgClientEngine) => {\n componentAnimations.forEach((componentAnimation) => {\n engine.addComponentAnimation(componentAnimation);\n });\n },\n };\n }\n if (module.transitions) {\n const transitions = [...module.transitions];\n module.transitions = {\n load: (engine: RpgClientEngine) => {\n transitions.forEach((transition) => {\n engine.addTransition(transition);\n });\n },\n };\n }\n if (module.particles) {\n const particles = [...module.particles];\n module.particles = {\n load: (engine: RpgClientEngine) => {\n particles.forEach((particle) => {\n engine.addParticle(particle);\n });\n },\n };\n }\n if (module.sprite) {\n const sprite = {...module.sprite};\n module.sprite = {\n ...sprite,\n load: (engine: RpgClientEngine) => {\n if (sprite.componentsBehind) {\n sprite.componentsBehind.forEach((component) => {\n engine.addSpriteComponentBehind(component);\n });\n }\n if (sprite.componentsInFront) {\n sprite.componentsInFront.forEach((component) => {\n engine.addSpriteComponentInFront(component);\n });\n }\n },\n };\n }\n return module;\n });\n return modules\n });\n}\n\nexport const GlobalConfigToken = \"GlobalConfigToken\";\n\nexport function provideGlobalConfig(config: any) {\n return {\n provide: GlobalConfigToken,\n useValue: config ?? {},\n };\n}\n\nexport function provideClientGlobalConfig(config: any = {}) {\n if (!config.keyboardControls) {\n config.keyboardControls = {\n up: 'up',\n down: 'down',\n left: 'left',\n right: 'right',\n action: 'space'\n }\n }\n return provideGlobalConfig(config)\n}\n\n"],"names":["modules","gui"],"mappings":"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"}
@@ -1,75 +0,0 @@
1
- import { generateUID } from "@rpgjs/common";
2
- import { signal } from "canvasengine";
3
-
4
- /**
5
- * Manages active transitions in the game
6
- *
7
- * This class handles the lifecycle of screen transitions, such as fade effects,
8
- * slide transitions, or any custom transition components. It maintains a list
9
- * of currently active transitions and provides methods to start and finish them.
10
- *
11
- * ## Design
12
- *
13
- * - Uses signals to track active transitions reactively
14
- * - Each transition has a unique ID for identification
15
- * - Transitions automatically remove themselves when finished via onFinish callback
16
- * - Supports multiple simultaneous transitions if needed
17
- *
18
- * @example
19
- * ```ts
20
- * const manager = new TransitionManager();
21
- *
22
- * // Start a fade transition
23
- * manager.start('fade', { duration: 1000 });
24
- *
25
- * // Check active transitions
26
- * console.log(manager.current()); // Array of active transitions
27
- * ```
28
- */
29
- export class TransitionManager {
30
- /**
31
- * Signal containing all currently active transitions
32
- *
33
- * Each transition object contains:
34
- * - id: Unique identifier
35
- * - props: Properties passed to the transition component
36
- * - onFinish: Callback to remove the transition when complete
37
- */
38
- current = signal<any[]>([]);
39
-
40
- /**
41
- * Start a new transition
42
- *
43
- * Creates a new transition instance with the given props and adds it to
44
- * the active transitions list. The transition will be automatically removed
45
- * when it calls its onFinish callback.
46
- *
47
- * @param props - Properties to pass to the transition component (must include onFinish)
48
- * @returns The created transition object with id and onFinish callback
49
- *
50
- * @example
51
- * ```ts
52
- * const transition = manager.start({
53
- * duration: 1000,
54
- * color: 'black',
55
- * onFinish: () => console.log('Transition complete')
56
- * });
57
- * ```
58
- */
59
- start(props: any) {
60
- const id = generateUID();
61
- const transition = {
62
- ...props,
63
- id,
64
- onFinish: () => {
65
- const index = this.current().findIndex((value) => value.id === id);
66
- if (index !== -1) {
67
- this.current().splice(index, 1);
68
- }
69
- },
70
- };
71
-
72
- this.current().push(transition);
73
- return transition;
74
- }
75
- }