@rpgjs/client 5.0.0-alpha.8 → 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 (305) 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 +290 -58
  26. package/dist/RpgClientEngine.d.ts +649 -9
  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 +300 -58
  176. package/src/RpgClientEngine.ts +1707 -48
  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 +406 -40
  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 +9 -2
  207. package/src/components/scenes/transition.ce +60 -0
  208. package/src/index.ts +16 -2
  209. package/src/module.ts +145 -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/tsconfig.json +1 -1
  223. package/vite.config.ts +4 -2
  224. package/dist/Game/EffectManager.d.ts +0 -5
  225. package/dist/components/effects/index.d.ts +0 -4
  226. package/dist/index.js.map +0 -1
  227. package/dist/index10.js +0 -8
  228. package/dist/index10.js.map +0 -1
  229. package/dist/index11.js +0 -10
  230. package/dist/index11.js.map +0 -1
  231. package/dist/index12.js +0 -8
  232. package/dist/index12.js.map +0 -1
  233. package/dist/index13.js +0 -17
  234. package/dist/index13.js.map +0 -1
  235. package/dist/index14.js +0 -91
  236. package/dist/index14.js.map +0 -1
  237. package/dist/index15.js +0 -50
  238. package/dist/index15.js.map +0 -1
  239. package/dist/index16.js +0 -191
  240. package/dist/index16.js.map +0 -1
  241. package/dist/index17.js +0 -9
  242. package/dist/index17.js.map +0 -1
  243. package/dist/index18.js +0 -387
  244. package/dist/index18.js.map +0 -1
  245. package/dist/index19.js +0 -31
  246. package/dist/index19.js.map +0 -1
  247. package/dist/index2.js +0 -112
  248. package/dist/index2.js.map +0 -1
  249. package/dist/index20.js +0 -24
  250. package/dist/index20.js.map +0 -1
  251. package/dist/index21.js +0 -2421
  252. package/dist/index21.js.map +0 -1
  253. package/dist/index22.js +0 -114
  254. package/dist/index22.js.map +0 -1
  255. package/dist/index23.js +0 -109
  256. package/dist/index23.js.map +0 -1
  257. package/dist/index24.js +0 -71
  258. package/dist/index24.js.map +0 -1
  259. package/dist/index25.js +0 -21
  260. package/dist/index25.js.map +0 -1
  261. package/dist/index26.js +0 -41
  262. package/dist/index26.js.map +0 -1
  263. package/dist/index27.js +0 -5
  264. package/dist/index27.js.map +0 -1
  265. package/dist/index28.js +0 -322
  266. package/dist/index28.js.map +0 -1
  267. package/dist/index29.js +0 -27
  268. package/dist/index29.js.map +0 -1
  269. package/dist/index3.js +0 -87
  270. package/dist/index3.js.map +0 -1
  271. package/dist/index30.js +0 -11
  272. package/dist/index30.js.map +0 -1
  273. package/dist/index31.js +0 -11
  274. package/dist/index31.js.map +0 -1
  275. package/dist/index32.js +0 -12
  276. package/dist/index32.js.map +0 -1
  277. package/dist/index33.js +0 -4403
  278. package/dist/index33.js.map +0 -1
  279. package/dist/index34.js +0 -316
  280. package/dist/index34.js.map +0 -1
  281. package/dist/index35.js +0 -174
  282. package/dist/index35.js.map +0 -1
  283. package/dist/index36.js +0 -501
  284. package/dist/index36.js.map +0 -1
  285. package/dist/index37.js +0 -61
  286. package/dist/index37.js.map +0 -1
  287. package/dist/index38.js +0 -20
  288. package/dist/index38.js.map +0 -1
  289. package/dist/index39.js +0 -20
  290. package/dist/index39.js.map +0 -1
  291. package/dist/index4.js +0 -67
  292. package/dist/index4.js.map +0 -1
  293. package/dist/index5.js +0 -16
  294. package/dist/index5.js.map +0 -1
  295. package/dist/index6.js +0 -17
  296. package/dist/index6.js.map +0 -1
  297. package/dist/index7.js +0 -39
  298. package/dist/index7.js.map +0 -1
  299. package/dist/index8.js +0 -90
  300. package/dist/index8.js.map +0 -1
  301. package/dist/index9.js +0 -76
  302. package/dist/index9.js.map +0 -1
  303. package/src/components/gui/dialogbox/itemMenu.ce +0 -23
  304. package/src/components/gui/dialogbox/selection.ce +0 -67
  305. /package/src/components/{effects → animations}/hit.ce +0 -0
@@ -0,0 +1,103 @@
1
+ import type { SaveSlotList, SaveSlotMeta } from "@rpgjs/common";
2
+ import { inject } from "../core/inject";
3
+ import { AbstractWebsocket, WebSocketToken } from "./AbstractSocket";
4
+
5
+ export const SaveClientToken = "SaveClientToken";
6
+
7
+ type SaveListResult = {
8
+ requestId: string;
9
+ slots: SaveSlotList;
10
+ };
11
+
12
+ type SaveSaveResult = {
13
+ requestId: string;
14
+ index: number;
15
+ slots: SaveSlotList;
16
+ };
17
+
18
+ type SaveLoadResult = {
19
+ requestId: string;
20
+ index: number;
21
+ ok: boolean;
22
+ slot?: SaveSlotMeta;
23
+ };
24
+
25
+ type SaveErrorResult = {
26
+ requestId: string;
27
+ message: string;
28
+ };
29
+
30
+ type PendingRequest = {
31
+ resolve: (value: any) => void;
32
+ reject: (error: Error) => void;
33
+ };
34
+
35
+ export class SaveClientService {
36
+ private webSocket: AbstractWebsocket = inject(WebSocketToken);
37
+ private pending: Map<string, PendingRequest> = new Map();
38
+ private requestCounter = 0;
39
+
40
+ initialize() {
41
+ const saveListResult = (data: SaveListResult) => this.resolveRequest(data.requestId, data);
42
+ const saveSaveResult = (data: SaveSaveResult) => this.resolveRequest(data.requestId, data);
43
+ const saveLoadResult = (data: SaveLoadResult) => this.resolveRequest(data.requestId, data);
44
+ const saveErrorResult = (data: SaveErrorResult) => this.rejectRequest(data.requestId, data.message);
45
+ this.webSocket.off("save.list.result", saveListResult);
46
+ this.webSocket.off("save.save.result", saveSaveResult);
47
+ this.webSocket.off("save.load.result", saveLoadResult);
48
+ this.webSocket.off("save.error", saveErrorResult);
49
+ this.webSocket.on("save.list.result", saveListResult);
50
+ this.webSocket.on("save.save.result", saveSaveResult);
51
+ this.webSocket.on("save.load.result", saveLoadResult);
52
+ this.webSocket.on("save.error", saveErrorResult);
53
+ }
54
+
55
+ listSlots(): Promise<SaveSlotList> {
56
+ return this.request<SaveListResult>("save.list", {}).then((result) => result.slots);
57
+ }
58
+
59
+ saveSlot(index: number, meta: SaveSlotMeta = {}): Promise<SaveSlotList> {
60
+ return this.request<SaveSaveResult>("save.save", { index, meta }).then((result) => result.slots);
61
+ }
62
+
63
+ loadSlot(index: number): Promise<boolean> {
64
+ return this.request<SaveLoadResult>("save.load", { index }).then((result) => result.ok);
65
+ }
66
+
67
+ private request<T>(event: string, payload: Record<string, any>): Promise<T> {
68
+ return new Promise((resolve, reject) => {
69
+ if (!this.webSocket) {
70
+ this.initialize();
71
+ }
72
+ const requestId = this.nextRequestId();
73
+ this.pending.set(requestId, { resolve, reject });
74
+ this.webSocket?.emit(event, { requestId, ...payload });
75
+ });
76
+ }
77
+
78
+ private resolveRequest(requestId: string, result: any) {
79
+ const pending = this.pending.get(requestId);
80
+ if (!pending) return;
81
+ this.pending.delete(requestId);
82
+ pending.resolve(result);
83
+ }
84
+
85
+ private rejectRequest(requestId: string, message: string) {
86
+ const pending = this.pending.get(requestId);
87
+ if (!pending) return;
88
+ this.pending.delete(requestId);
89
+ pending.reject(new Error(message));
90
+ }
91
+
92
+ private nextRequestId(): string {
93
+ this.requestCounter += 1;
94
+ return `${Date.now()}-${this.requestCounter}`;
95
+ }
96
+ }
97
+
98
+ export function provideSaveClient() {
99
+ return {
100
+ provide: SaveClientService,
101
+ useClass: SaveClientService,
102
+ };
103
+ }
@@ -1,29 +1,55 @@
1
- import { AbstractWebsocket, WebSocketToken } from "./AbstractSocket";
1
+ import { AbstractWebsocket, SocketUpdateProperties, WebSocketToken } from "./AbstractSocket";
2
2
  import { ClientIo, ServerIo } from "@signe/room";
3
3
  import { Context } from "@signe/di";
4
4
  import { RpgClientEngine } from "../RpgClientEngine";
5
5
  import { UpdateMapService, UpdateMapToken } from "@rpgjs/common";
6
6
  import { LoadMapToken } from "./loadMap";
7
7
  import { RpgGui } from "../Gui/Gui";
8
+ import { provideKeyboardControls } from "./keyboardControls";
9
+ import { provideSaveClient } from "./save";
8
10
 
9
11
  type ServerIo = any;
10
12
  type ClientIo = any;
11
13
 
14
+ interface StandaloneOptions {
15
+ env?: Record<string, any>;
16
+ }
17
+
12
18
  class BridgeWebsocket extends AbstractWebsocket {
13
19
  private room: ServerIo;
14
20
  private socket: ClientIo;
21
+ private pendingOn: Array<{ event: string; callback: (data: any) => void }> = [];
22
+ private rooms = {
23
+ partyFn: async (roomId: string) => {
24
+ this.room = new ServerIo(roomId, this.rooms);
25
+ const server = new this.server(this.room)
26
+ await server.onStart();
27
+ await server.subRoom.onStart()
28
+ this.context.set('server', server)
29
+ return server
30
+ },
31
+ env: {}
32
+ }
33
+ private serverInstance: any;
15
34
 
16
- constructor(protected context: Context, private server: any) {
35
+ constructor(protected context: Context, private server: any, options: StandaloneOptions = {}) {
17
36
  super(context);
18
37
  // fake room
19
- this.room = new ServerIo("lobby-1");
38
+ this.rooms.env = options.env || {};
39
+ this.room = new ServerIo("lobby-1", this.rooms);
20
40
  }
21
41
 
22
42
  async connection(listeners?: (data: any) => void) {
23
- const server = new this.server(this.room);
24
- await server.onStart();
25
- this.context.set('server', server)
26
- this.socket = new ClientIo(server);
43
+ this.serverInstance = new this.server(this.room);
44
+ await this.serverInstance.onStart();
45
+ await this.serverInstance.subRoom.onStart()
46
+ this.context.set('server', this.serverInstance)
47
+ return this._connection(listeners)
48
+ }
49
+
50
+ private async _connection(listeners?: (data: any) => void) {
51
+ this.serverInstance = this.context.get('server')
52
+ this.socket = new ClientIo(this.serverInstance, 'player-client-id');
27
53
  const url = new URL('http://localhost')
28
54
  const request = new Request(url.toString(), {
29
55
  method: 'GET',
@@ -32,21 +58,29 @@ class BridgeWebsocket extends AbstractWebsocket {
32
58
  }
33
59
  })
34
60
  listeners?.(this.socket)
35
- await server.onConnect(this.socket.conn as any, { request } as any);
61
+ await this.serverInstance.onConnect(this.socket.conn as any, { request } as any);
36
62
  this.room.clients.set(this.socket.id, this.socket);
63
+ this.pendingOn.forEach(({ event, callback }) => this.socket.addEventListener(event, callback));
64
+ this.pendingOn = [];
37
65
  return this.socket
38
66
  }
39
67
 
40
68
  on(key: string, callback: (data: any) => void) {
41
- this.socket.addEventListener("message", (event) => {
69
+ const handler = (event) => {
42
70
  const object = JSON.parse(event);
43
71
  if (object.type === key) {
44
72
  callback(object.value);
45
73
  }
46
- });
74
+ };
75
+ if (!this.socket) {
76
+ this.pendingOn.push({ event: "message", callback: handler });
77
+ return;
78
+ }
79
+ this.socket.addEventListener("message", handler);
47
80
  }
48
81
 
49
82
  off(event: string, callback: (data: any) => void) {
83
+ if (!this.socket) return;
50
84
  this.socket.removeEventListener(event, callback);
51
85
  }
52
86
 
@@ -57,24 +91,80 @@ class BridgeWebsocket extends AbstractWebsocket {
57
91
  });
58
92
  }
59
93
 
60
- updateProperties({ room }: { room: any }) {
61
- this.room = new ServerIo(room);
94
+ /**
95
+ * Update underlying connection properties before a reconnect
96
+ *
97
+ * Design
98
+ * - Dynamically register a factory for the requested room to ensure a fresh server instance
99
+ * - Swap the internal ServerIo to target the new room
100
+ *
101
+ * @param params - Properties to update
102
+ * @param params.room - The target room id (e.g. `map-simplemap2`)
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * websocket.updateProperties({ room: 'map-simplemap2' })
107
+ * await websocket.reconnect()
108
+ * ```
109
+ */
110
+ updateProperties(_params: SocketUpdateProperties) {
111
+ // empty
62
112
  }
63
113
 
64
- async reconnect(listeners?: (data: any) => void) {
65
- await this.connection((socket) => {
114
+ /**
115
+ * Reconnect the client to the current Party room
116
+ *
117
+ * Design
118
+ * - Must be called after `updateProperties()` when switching rooms
119
+ * - Rebuilds the client <-> server bridge and re-triggers connection listeners
120
+ *
121
+ * @param listeners - Optional callback to re-bind event handlers on the new socket
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * websocket.updateProperties({ room: 'map-dungeon' })
126
+ * await websocket.reconnect((socket) => {
127
+ * // re-bind events here
128
+ * })
129
+ * ```
130
+ */
131
+ async reconnect(listeners?: (data: any) => void): Promise<void> {
132
+ await this._connection((socket) => {
66
133
  listeners?.(socket)
67
134
  })
68
135
  }
136
+
137
+ getServer() {
138
+ return this.serverInstance
139
+ }
140
+
141
+ getSocket() {
142
+ return this.socket
143
+ }
69
144
  }
70
145
 
71
146
  class UpdateMapStandaloneService extends UpdateMapService {
72
147
  private server: any;
73
148
 
74
- async update(mapId: string, map: any) {
149
+ /**
150
+ * Update the current room map data on the server side
151
+ *
152
+ * Design
153
+ * - Uses the in-memory server instance stored in context (standalone mode)
154
+ * - Builds a local HTTP-like request to the current Party room endpoint
155
+ *
156
+ * @param map - The map payload to apply on the server
157
+ *
158
+ * @example
159
+ * ```ts
160
+ * await updateMapService.update({ width: 1024, height: 768, events: [] })
161
+ * ```
162
+ */
163
+ async update(map: any) {
75
164
  this.server = this.context.get('server')
165
+ const roomId = this.server?.room?.id ?? 'lobby-1'
76
166
  const req = {
77
- url: `http://localhost/parties/main/${mapId}/map/update`,
167
+ url: `http://localhost/parties/main/${roomId}/map/update`,
78
168
  method: 'POST',
79
169
  headers: new Headers({}),
80
170
  json: async () => {
@@ -85,16 +175,18 @@ class UpdateMapStandaloneService extends UpdateMapService {
85
175
  }
86
176
  }
87
177
 
88
- export function provideRpg(server: any) {
178
+ export function provideRpg(server: any, options: StandaloneOptions = {}) {
89
179
  return [
90
180
  {
91
181
  provide: WebSocketToken,
92
- useFactory: (context: Context) => new BridgeWebsocket(context, server),
182
+ useFactory: (context: Context) => new BridgeWebsocket(context, server, options),
93
183
  },
94
184
  {
95
185
  provide: UpdateMapToken,
96
186
  useClass: UpdateMapStandaloneService,
97
187
  },
188
+ provideKeyboardControls(),
189
+ provideSaveClient(),
98
190
  RpgGui,
99
191
  RpgClientEngine,
100
192
  ];
@@ -0,0 +1,87 @@
1
+ import { computed, Signal } from "canvasengine";
2
+ import { RpgClientObject } from "../Game/Object";
3
+
4
+ const BUILTIN_PARAM_KEYS = [
5
+ "maxHp",
6
+ "maxSp",
7
+ "atk",
8
+ "pdef",
9
+ "sdef",
10
+ "str",
11
+ "agi",
12
+ "int",
13
+ "dex",
14
+ ] as const;
15
+
16
+ type BuiltInParamKey = typeof BUILTIN_PARAM_KEYS[number];
17
+ type ParamPropKey = `params.${BuiltInParamKey}` | `params.${string}`;
18
+
19
+ const entityPropMap = {
20
+ level: (entity: RpgClientObject) => entity._level(),
21
+ exp: (entity: RpgClientObject) => entity._exp(),
22
+ gold: (entity: RpgClientObject) => entity._gold(),
23
+ hp: (entity: RpgClientObject) => entity.hpSignal(),
24
+ sp: (entity: RpgClientObject) => entity.spSignal(),
25
+ name: (entity: RpgClientObject) => entity.name(),
26
+ type: (entity: RpgClientObject) => entity.type(),
27
+ x: (entity: RpgClientObject) => entity.x(),
28
+ y: (entity: RpgClientObject) => entity.y(),
29
+ z: (entity: RpgClientObject) => entity.z(),
30
+ tint: (entity: RpgClientObject) => entity.tint(),
31
+ direction: (entity: RpgClientObject) => entity.direction(),
32
+ speed: (entity: RpgClientObject) => entity.speed(),
33
+ hitbox: (entity: RpgClientObject) => entity.hitbox(),
34
+ animation: (entity: RpgClientObject) => entity.animationName(),
35
+ canMove: (entity: RpgClientObject) => entity.canMove(),
36
+ graphics: (entity: RpgClientObject) => entity.graphics(),
37
+ items: (entity: RpgClientObject) => entity.items(),
38
+ equipments: (entity: RpgClientObject) => entity.equipments(),
39
+ states: (entity: RpgClientObject) => entity.states(),
40
+ skills: (entity: RpgClientObject) => entity.skills(),
41
+ effects: (entity: RpgClientObject) => entity._effects(),
42
+ componentsTop: (entity: RpgClientObject) => entity.componentsTop(),
43
+ componentsBottom: (entity: RpgClientObject) => entity.componentsBottom(),
44
+ componentsCenter: (entity: RpgClientObject) => entity.componentsCenter(),
45
+ componentsLeft: (entity: RpgClientObject) => entity.componentsLeft(),
46
+ componentsRight: (entity: RpgClientObject) => entity.componentsRight(),
47
+ } as const;
48
+
49
+ type EntityPropMap = typeof entityPropMap;
50
+ type EntityPropKey = keyof EntityPropMap | ParamPropKey;
51
+ type EntityPropValue<K extends EntityPropKey> = K extends keyof EntityPropMap
52
+ ? ReturnType<EntityPropMap[K]>
53
+ : K extends `params.${string}`
54
+ ? number | undefined
55
+ : never;
56
+
57
+ const isSignal = <T>(value: unknown): value is Signal<T> =>
58
+ typeof value === "function";
59
+
60
+ const toSignal = <T>(value: Signal<T> | T): Signal<T> =>
61
+ isSignal<T>(value) ? value : computed(() => value);
62
+
63
+ export const getEntityProp = <K extends EntityPropKey>(
64
+ entity: Signal<RpgClientObject | undefined> | RpgClientObject | undefined,
65
+ key: K
66
+ ): Signal<EntityPropValue<K>> => {
67
+ const entitySignal = toSignal(entity);
68
+
69
+ return computed(() => {
70
+ const current = entitySignal();
71
+ if (!current) {
72
+ return undefined as EntityPropValue<K>;
73
+ }
74
+
75
+ if (Object.prototype.hasOwnProperty.call(entityPropMap, key)) {
76
+ const getter = entityPropMap[key as keyof EntityPropMap];
77
+ return getter(current) as EntityPropValue<K>;
78
+ }
79
+
80
+ if (key.startsWith("params.")) {
81
+ const paramKey = key.slice("params.".length);
82
+ return current._param?.()?.[paramKey] as EntityPropValue<K>;
83
+ }
84
+
85
+ return undefined as EntityPropValue<K>;
86
+ });
87
+ };
package/tsconfig.json CHANGED
@@ -30,6 +30,6 @@
30
30
  ],
31
31
  "typeRoots": [
32
32
  "node_modules/@types",
33
- "src/types"
33
+ "node_modules/@rpgjs/client"
34
34
  ],
35
35
  }
package/vite.config.ts CHANGED
@@ -19,9 +19,11 @@ export default defineConfig({
19
19
  sourcemap: true,
20
20
  minify: false,
21
21
  lib: {
22
- entry: 'src/index.ts',
22
+ entry: {
23
+ index: 'src/index.ts'
24
+ },
23
25
  formats: ['es'],
24
- fileName: 'index'
26
+ fileName: (format, entryName) => `${entryName}.js`
25
27
  },
26
28
  rollupOptions: {
27
29
  external: [/@rpgjs/, 'esbuild', 'canvasengine', '@canvasengine/presets', 'rxjs', 'pixi.js'],
@@ -1,5 +0,0 @@
1
- import { RpgCommonPlayer } from '@rpgjs/common';
2
- export declare class EffectManager {
3
- current: import('canvasengine').WritableArraySignal<any[]>;
4
- displayEffect(params: any, player: RpgCommonPlayer): void;
5
- }
@@ -1,4 +0,0 @@
1
- export declare const PrebuiltEffects: {
2
- Hit: any;
3
- Animation: any;
4
- };
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
package/dist/index10.js DELETED
@@ -1,8 +0,0 @@
1
- import component from './index23.js';
2
-
3
- const PrebuiltGui = {
4
- Dialogbox: component
5
- };
6
-
7
- export { PrebuiltGui };
8
- //# sourceMappingURL=index10.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index10.js","sources":["../src/components/gui/index.ts"],"sourcesContent":["import Dialogbox from \"./dialogbox/index.ce\";\n\nexport const PrebuiltGui = {\n Dialogbox\n}"],"names":["Dialogbox"],"mappings":";;AAEO,MAAM,WAAc,GAAA;AAAA,aACvBA;AACJ;;;;"}
package/dist/index11.js DELETED
@@ -1,10 +0,0 @@
1
- import component$1 from './index24.js';
2
- import component from './index25.js';
3
-
4
- const PrebuiltEffects = {
5
- Hit: component$1,
6
- Animation: component
7
- };
8
-
9
- export { PrebuiltEffects };
10
- //# sourceMappingURL=index11.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index11.js","sources":["../src/components/effects/index.ts"],"sourcesContent":["import Hit from \"./hit.ce\";\nimport Animation from \"./animation.ce\";\n\nexport const PrebuiltEffects = {\n Hit,\n Animation\n}"],"names":["Hit","Animation"],"mappings":";;;AAGO,MAAM,eAAkB,GAAA;AAAA,OAC3BA,WAAA;AAAA,aACAC;AACJ;;;;"}
package/dist/index12.js DELETED
@@ -1,8 +0,0 @@
1
- import { RMSpritesheet } from './index26.js';
2
-
3
- const Presets = {
4
- RMSpritesheet
5
- };
6
-
7
- export { Presets };
8
- //# sourceMappingURL=index12.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index12.js","sources":["../src/presets/index.ts"],"sourcesContent":["import { RMSpritesheet } from \"./rmspritesheet\";\n\nexport const Presets = {\n RMSpritesheet\n}"],"names":[],"mappings":";;AAEO,MAAM,OAAU,GAAA;AAAA,EACnB;AACJ;;;;"}
package/dist/index13.js DELETED
@@ -1,17 +0,0 @@
1
- import { useProps, useDefineProps, h, Container, loop } from 'canvasengine';
2
- import { inject } from './index6.js';
3
- import { RpgClientEngine } from './index2.js';
4
- import component$1 from './index14.js';
5
-
6
- function component($$props) {
7
- useProps($$props);
8
- useDefineProps($$props);
9
- var engine = inject(RpgClientEngine);
10
- var players = engine.sceneMap.players;
11
- var events = engine.sceneMap.events;
12
- let $this = h(Container, { sortableChildren: true }, [loop(events, (event, id) => h(component$1, { id: id, object: event, isMe: false })), loop(players, (player, id) => h(component$1, { id: id, object: player, isMe: true }))]);
13
- return $this
14
- }
15
-
16
- export { component as default };
17
- //# sourceMappingURL=index13.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index13.js","sources":["../src/components/scenes/event-layer.ce"],"sourcesContent":["<Container sortableChildren={true}>\n @for ((event,id) of events) {\n <Character id={id} object={event} isMe={false} />\n }\n\n @for ((player,id) of players) {\n <Character id={id} object={player} isMe={true} />\n }\n</Container>\n\n<script>\n import { effect, signal } from 'canvasengine'\n import { inject } from \"../../core/inject\";\n import { RpgClientEngine } from \"../../RpgClientEngine\";\n import Character from \"../character.ce\";\n \n const engine = inject(RpgClientEngine);\n const players = engine.sceneMap.players\n const events = engine.sceneMap.events\n</script>"],"names":["Character"],"mappings":";;;;;AAQqB,SAAS,SAAS,CAAC,OAAO,EAAE;AACjD,QAAuB,QAAQ,CAAC,OAAO;AACvC,QAA4B,cAAc,CAAC,OAAO;AAClD,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAC5C,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO;AACrC,IAAI,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC7B,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAACA,WAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAACA,WAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACrO,QAAQ,OAAO;AACf;;;;"}
package/dist/index14.js DELETED
@@ -1,91 +0,0 @@
1
- import { useProps, useDefineProps, computed, signal, h, Container, loop, Sprite } from 'canvasengine';
2
- import { Particle } from '@canvasengine/presets';
3
- import { RpgClientEngine } from './index2.js';
4
- import { inject } from './index6.js';
5
- import { Direction } from '@rpgjs/common';
6
-
7
- function component($$props) {
8
- useProps($$props);
9
- const defineProps = useDefineProps($$props);
10
- var _a = defineProps(), object = _a.object; _a.id; var isMe = _a.isMe;
11
- var client = inject(RpgClientEngine);
12
- var spritesheets = client.spritesheets;
13
- var x = object.x;
14
- var y = object.y;
15
- var tint = object.tint;
16
- var direction = object.direction;
17
- var animationName = object.animationName;
18
- var emitParticleTrigger = object.emitParticleTrigger;
19
- var particleSettings = client.particleSettings;
20
- var particleName = object.particleName;
21
- var graphics = object.graphics;
22
- var hitbox = object.hitbox;
23
- var widthShadow = 10;
24
- computed(function () { return ({
25
- x: hitbox().w / 2,
26
- y: hitbox().h - (hitbox().h / 2),
27
- width: hitbox().w + widthShadow,
28
- height: hitbox().h,
29
- }); });
30
- var canControls = function () { return isMe() && object.canMove(); };
31
- var keyboardControls = client.globalConfig.keyboardControls;
32
- var controls = signal({
33
- down: {
34
- repeat: true,
35
- bind: keyboardControls.down,
36
- keyDown: function () {
37
- if (canControls())
38
- client.processInput({ input: Direction.Down });
39
- },
40
- },
41
- up: {
42
- repeat: true,
43
- bind: keyboardControls.up,
44
- keyDown: function () {
45
- if (canControls())
46
- client.processInput({ input: Direction.Up });
47
- },
48
- },
49
- left: {
50
- repeat: true,
51
- bind: keyboardControls.left,
52
- keyDown: function () {
53
- if (canControls())
54
- client.processInput({ input: Direction.Left });
55
- },
56
- },
57
- right: {
58
- repeat: true,
59
- bind: keyboardControls.right,
60
- keyDown: function () {
61
- if (canControls())
62
- client.processInput({ input: Direction.Right });
63
- },
64
- },
65
- action: {
66
- bind: keyboardControls.action,
67
- keyDown: function () {
68
- if (canControls()) {
69
- client.processAction({ action: 'action' });
70
- // particleName.set('hit')
71
- // emitParticleTrigger.start()
72
- // object.flash('red')
73
- }
74
- },
75
- },
76
- });
77
- var sheet = function (graphicId) {
78
- return {
79
- definition: spritesheets.get(graphicId),
80
- playing: animationName,
81
- params: {
82
- direction: direction
83
- },
84
- };
85
- };
86
- let $this = h(Container, { x, y, zIndex: y, viewportFollow: isMe, controls }, [h(Particle, { emit: emitParticleTrigger, settings: particleSettings, zIndex: 1000, name: particleName }), loop(graphics, graphicId => h(Sprite, { sheet: sheet(graphicId), direction, tint }))]);
87
- return $this
88
- }
89
-
90
- export { component as default };
91
- //# sourceMappingURL=index14.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index14.js","sources":["../src/components/character.ce"],"sourcesContent":["<Container x y zIndex={y} viewportFollow={isMe} controls>\n <Particle emit={@emitParticleTrigger} settings={@particleSettings} zIndex={1000} name={particleName} />\n @for (graphicId of graphics) {\n <Sprite sheet={@sheet(@graphicId)} direction tint />\n }\n <!-- <Ellipse \n x={shadow.@x} \n y={shadow.@y} \n width={shadow.@width} \n height={shadow.@height} \n color=\"black\" \n blur={10} \n alpha={0.5}\n /> -->\n</Container>\n\n<script>\n import { signal, effect, mount, computed } from \"canvasengine\";\n import { Particle } from \"@canvasengine/presets\";\n import { GameEngineToken } from \"@rpgjs/common\";\n import { RpgClientEngine } from \"../RpgClientEngine\";\n import { inject } from \"../core/inject\"; \n import { Direction } from \"@rpgjs/common\";\n import Hit from \"./effects/hit.ce\";\n\n const { object, id, isMe } = defineProps();\n\n const client = inject(RpgClientEngine);\n\n const spritesheets = client.spritesheets;\n\n const x = object.x;\n const y = object.y;\n const tint = object.tint;\n const direction = object.direction;\n const animationName = object.animationName;\n const emitParticleTrigger = object.emitParticleTrigger;\n const particleSettings = client.particleSettings;\n const particleName = object.particleName;\n const graphics = object.graphics;\n\n const hitbox = object.hitbox;\n const widthShadow = 10;\n const shadow = computed(() => ({\n x: hitbox().w / 2,\n y: hitbox().h - (hitbox().h / 2),\n width: hitbox().w + widthShadow,\n height: hitbox().h,\n }))\n const canControls = () => isMe() && object.canMove()\n const keyboardControls = client.globalConfig.keyboardControls;\n\n const controls = signal({\n down: {\n repeat: true,\n bind: keyboardControls.down,\n keyDown() {\n if (canControls()) client.processInput({ input: Direction.Down })\n },\n },\n up: {\n repeat: true,\n bind: keyboardControls.up,\n keyDown() {\n if (canControls()) client.processInput({ input: Direction.Up })\n },\n },\n left: {\n repeat: true,\n bind: keyboardControls.left,\n keyDown() {\n if (canControls()) client.processInput({ input: Direction.Left })\n },\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n keyDown() {\n if (canControls()) client.processInput({ input: Direction.Right })\n },\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (canControls()) {\n client.processAction({ action: 'action' })\n // particleName.set('hit') \n // emitParticleTrigger.start()\n // object.flash('red')\n }\n },\n },\n });\n\n const sheet = (graphicId) => {\n return {\n definition: spritesheets.get(graphicId),\n playing: animationName,\n params: {\n direction\n },\n };\n }\n</script>"],"names":[],"mappings":";;;;;;AAWqB,SAAS,SAAS,CAAC,OAAO,EAAE;AACjD,QAAuB,QAAQ,CAAC,OAAO;AACvC,QAAQ,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO;AAClD,QAAW,IAAC,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,CAAM,EAAE,CAAC,EAAE,CAAC,KAAC,IAAI,GAAG,EAAE,CAAC;AAC1E,IAAI,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AACpC,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY;AACtC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAChB,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AAChB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI;AACtB,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS;AAChC,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa;AACxC,IAAI,mBAAmB,GAAG,MAAM,CAAC,mBAAmB;AACpD,IAAI,gBAAgB,GAAG,MAAM,CAAC,gBAAgB;AAC9C,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY;AACtC,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAC9B,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC1B,IAAI,WAAW,GAAG,EAAE;AACP,QAAQ,CAAC,YAAY,EAAE,QAAQ;AAC5C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;AACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AACpC,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,WAAW;AACnC,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACtB,CAAC,EAAE,EAAE;AACL,IAAI,WAAW,GAAG,YAAY,EAAE,OAAO,IAAI,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE;AACpE,IAAI,gBAAgB,GAAG,MAAM,CAAC,YAAY,CAAC,gBAAgB;AAC3D,IAAI,QAAQ,GAAG,MAAM,CAAC;AACtB,IAAI,IAAI,EAAE;AACV,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI,EAAE,gBAAgB,CAAC,IAAI;AACnC,QAAQ,OAAO,EAAE,YAAY;AAC7B,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;AAC9D,SAAS;AACT,KAAK;AACL,IAAI,EAAE,EAAE;AACR,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI,EAAE,gBAAgB,CAAC,EAAE;AACjC,QAAQ,OAAO,EAAE,YAAY;AAC7B,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;AAC5D,SAAS;AACT,KAAK;AACL,IAAI,IAAI,EAAE;AACV,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI,EAAE,gBAAgB,CAAC,IAAI;AACnC,QAAQ,OAAO,EAAE,YAAY;AAC7B,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;AAC9D,SAAS;AACT,KAAK;AACL,IAAI,KAAK,EAAE;AACX,QAAQ,MAAM,EAAE,IAAI;AACpB,QAAQ,IAAI,EAAE,gBAAgB,CAAC,KAAK;AACpC,QAAQ,OAAO,EAAE,YAAY;AAC7B,YAAY,IAAI,WAAW,EAAE;AAC7B,gBAAgB,MAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC;AAC/D,SAAS;AACT,KAAK;AACL,IAAI,MAAM,EAAE;AACZ,QAAQ,IAAI,EAAE,gBAAgB,CAAC,MAAM;AACrC,QAAQ,OAAO,EAAE,YAAY;AAC7B,YAAY,IAAI,WAAW,EAAE,EAAE;AAC/B,gBAAgB,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC1D;AACA;AACA;AACA;AACA,SAAS;AACT,KAAK;AACL,CAAC,CAAC;AACF,IAAI,KAAK,GAAG,UAAU,SAAS,EAAE;AACjC,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;AAC/C,QAAQ,OAAO,EAAE,aAAa;AAC9B,QAAQ,MAAM,EAAE;AAChB,YAAY,SAAS,EAAE;AACvB,SAAS;AACT,KAAK;AACL;AACA,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtR,QAAQ,OAAO;AACf;;;;"}
package/dist/index15.js DELETED
@@ -1,50 +0,0 @@
1
- import { useProps, useDefineProps, computed, effect, h, Canvas, loop, Viewport, cond, Container } from 'canvasengine';
2
- import { inject } from './index6.js';
3
- import { RpgClientEngine } from './index2.js';
4
- import component$1 from './index29.js';
5
- import { RpgGui } from './index9.js';
6
-
7
- function component($$props) {
8
- useProps($$props);
9
- useDefineProps($$props);
10
- var __assign = (this && this.__assign) || function () {
11
- __assign = Object.assign || function(t) {
12
- for (var s, i = 1, n = arguments.length; i < n; i++) {
13
- s = arguments[i];
14
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
15
- t[p] = s[p];
16
- }
17
- return t;
18
- };
19
- return __assign.apply(this, arguments);
20
- };
21
- var engine = inject(RpgClientEngine);
22
- var guiService = inject(RpgGui);
23
- var sceneData = engine.sceneMap.data;
24
- var gui = guiService.gui;
25
- var worldWidth = computed(function () { var _a; return (_a = sceneData()) === null || _a === void 0 ? void 0 : _a.width; });
26
- var worldHeight = computed(function () { var _a; return (_a = sceneData()) === null || _a === void 0 ? void 0 : _a.height; });
27
- effect(function () {
28
- if (sceneData() && !sceneData().component) {
29
- throw new Error("Warning ! You need to define a component for the scene. Use provideLoadMap() to define a component for the scene.");
30
- }
31
- });
32
- var onGuiFinish = function (gui, data) {
33
- guiService.guiClose(gui.name, data);
34
- };
35
- var onGuiInteraction = function (gui, name, data) {
36
- guiService.guiInteraction(gui.name, name, data);
37
- };
38
- var clamp = {
39
- direction: "all"
40
- };
41
- let $this = h(Canvas, { width: computed(() => engine.width()), height: computed(() => engine.height()) }, [h(Viewport, { worldWidth, worldHeight, clamp }, cond(sceneData, () => h(component$1))), loop(gui, gui => h(Container, { display: 'flex' }, cond(gui.display, () => h(gui.component, { ...gui.data(), onFinish: (data) => {
42
- onGuiFinish(gui, data);
43
- }, onInteraction: (name, data) => {
44
- onGuiInteraction(gui, name, data);
45
- } }))))]);
46
- return $this
47
- }
48
-
49
- export { component as default };
50
- //# sourceMappingURL=index15.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index15.js","sources":["../src/components/scenes/canvas.ce"],"sourcesContent":["<Canvas width={@engine.width} height={@engine.height}>\n <Viewport worldWidth worldHeight clamp>\n @if (sceneData) {\n <SceneMap />\n }\n </Viewport>\n @for (gui of gui) {\n <Container display=\"flex\">\n @if (gui.display) {\n <gui.component ...gui.data() onFinish={(data) => {\n onGuiFinish(gui, data)\n }} onInteraction={(name, data) => {\n onGuiInteraction(gui, name, data)\n }} /> \n }\n </Container>\n } \n</Canvas>\n\n<script>\n import { signal, computed, effect } from \"canvasengine\";\n import { inject } from \"../../core/inject\";\n import { RpgClientEngine } from \"../../RpgClientEngine\";\n import SceneMap from './draw-map.ce'\n import { RpgGui } from \"../../Gui/Gui\";\n\n const engine = inject(RpgClientEngine);\n const guiService = inject(RpgGui);\n const sceneData = engine.sceneMap.data\n const gui = guiService.gui\n const worldWidth = computed(() => sceneData()?.width)\n const worldHeight = computed(() => sceneData()?.height)\n\n effect(() => {\n if (sceneData() && !sceneData().component) {\n throw new Error(\"Warning ! You need to define a component for the scene. Use provideLoadMap() to define a component for the scene.\")\n }\n })\n\n const onGuiFinish = (gui, data) => {\n guiService.guiClose(gui.name, data)\n }\n\n const onGuiInteraction = (gui, name, data) => {\n guiService.guiInteraction(gui.name, name, data)\n }\n \n const clamp = {\n direction: \"all\"\n }\n</script>\n"],"names":["SceneMap"],"mappings":"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"}