@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,652 @@
1
+ import { inject } from "../../../core/inject.js";
2
+ import { RpgClientEngine } from "../../../RpgClientEngine.js";
3
+ import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, signal, useDefineProps, useProps } from "canvasengine";
4
+ //#region src/components/gui/shop/shop.ce
5
+ function component($$props) {
6
+ useProps($$props);
7
+ const defineProps = useDefineProps($$props);
8
+ var engine = inject(RpgClientEngine);
9
+ var currentPlayer = engine.scene.currentPlayer;
10
+ var keyboardControls = engine.globalConfig.keyboardControls;
11
+ var iconSheet = function(iconId) {
12
+ return {
13
+ definition: engine.getSpriteSheet(iconId),
14
+ playing: "default"
15
+ };
16
+ };
17
+ var goldTerm = engine.globalConfig.goldTerm || "G";
18
+ var selectedItem = signal(0);
19
+ var selectedTab = signal(0);
20
+ var tradeMode = signal("buy");
21
+ var tradeView = signal("mode");
22
+ var selectedModeIndex = signal(0);
23
+ var quantity = signal(1);
24
+ var quantityDialogOpen = signal(false);
25
+ var defaultMessage = "Welcome to my shop!";
26
+ var tabs = [
27
+ {
28
+ id: "item",
29
+ label: "Items"
30
+ },
31
+ {
32
+ id: "weapon",
33
+ label: "Weapons"
34
+ },
35
+ {
36
+ id: "armor",
37
+ label: "Armor"
38
+ }
39
+ ];
40
+ var _a = defineProps(), data = _a.data, onInteraction = _a.onInteraction, onFinish = _a.onFinish;
41
+ var resolveProp = function(value) {
42
+ return typeof value === "function" ? value() : value;
43
+ };
44
+ var guiData = computed(function() {
45
+ return resolveProp(data) || {};
46
+ });
47
+ var shopMessage = computed(function() {
48
+ var message = resolveProp(guiData().message);
49
+ return message ? String(message) : defaultMessage;
50
+ });
51
+ var face = computed(function() {
52
+ return resolveProp(guiData().face);
53
+ });
54
+ var hasFace = computed(function() {
55
+ var value = face();
56
+ return value && value.id;
57
+ });
58
+ var buyItems = computed(function() {
59
+ return guiData().items || [];
60
+ });
61
+ var sellItems = computed(function() {
62
+ return guiData().sellItems || [];
63
+ });
64
+ var activeItems = computed(function() {
65
+ return tradeMode() === "buy" ? buyItems() : sellItems();
66
+ });
67
+ var filteredItems = computed(function() {
68
+ var tab = tabs[selectedTab()];
69
+ var items = activeItems();
70
+ if (!tab) return [];
71
+ return items.filter(function(item) {
72
+ return (item === null || item === void 0 ? void 0 : item.type) === tab.id;
73
+ });
74
+ });
75
+ var currentItem = computed(function() {
76
+ return filteredItems()[selectedItem()];
77
+ });
78
+ var gold = computed(function() {
79
+ return currentPlayer()._gold();
80
+ });
81
+ var actionLabel = computed(function() {
82
+ return tradeMode() === "buy" ? "Buy" : "Sell";
83
+ });
84
+ var faceSheet = function(graphicId, animationName) {
85
+ return {
86
+ definition: engine.getSpriteSheet(graphicId),
87
+ playing: animationName || "default"
88
+ };
89
+ };
90
+ var maxQuantity = computed(function() {
91
+ var _a;
92
+ var item = currentItem();
93
+ if (!item) return 0;
94
+ var price = (item === null || item === void 0 ? void 0 : item.price) || 0;
95
+ if (price <= 0) return 0;
96
+ if (tradeMode() === "sell") {
97
+ var qty = (_a = item === null || item === void 0 ? void 0 : item.quantity) !== null && _a !== void 0 ? _a : 0;
98
+ return Math.max(0, qty);
99
+ }
100
+ return Math.max(1, Math.floor(gold() / price));
101
+ });
102
+ var totalPrice = computed(function() {
103
+ var _a;
104
+ return (((_a = currentItem()) === null || _a === void 0 ? void 0 : _a.price) || 0) * quantity();
105
+ });
106
+ var displayStats = computed(function() {
107
+ var _a;
108
+ var stats = ((_a = currentItem()) === null || _a === void 0 ? void 0 : _a.stats) || {};
109
+ var params = guiData().playerParams || {};
110
+ var order = [
111
+ "atk",
112
+ "def",
113
+ "pdef",
114
+ "sdef",
115
+ "str",
116
+ "dex",
117
+ "int",
118
+ "agi",
119
+ "maxHp",
120
+ "maxSp"
121
+ ];
122
+ var labels = {
123
+ atk: "ATK",
124
+ def: "DEF",
125
+ pdef: "PDEF",
126
+ sdef: "SDEF",
127
+ str: "STR",
128
+ dex: "DEX",
129
+ int: "INT",
130
+ agi: "AGI",
131
+ maxHp: "MAX HP",
132
+ maxSp: "MAX SP"
133
+ };
134
+ var orderedKeys = order.filter(function(key) {
135
+ return stats[key] !== void 0;
136
+ });
137
+ var extraKeys = Object.keys(stats).filter(function(key) {
138
+ return !order.includes(key);
139
+ });
140
+ var keys = orderedKeys.concat(extraKeys);
141
+ var list = [];
142
+ for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
143
+ var key = keys_1[_i];
144
+ var delta = stats[key];
145
+ if (delta === void 0 || delta === 0) continue;
146
+ var current = params[key];
147
+ if (current === void 0 && key === "def") current = params.pdef;
148
+ var next = current !== void 0 ? current + delta : void 0;
149
+ list.push({
150
+ key,
151
+ label: labels[key] || key.toUpperCase(),
152
+ delta,
153
+ current,
154
+ next
155
+ });
156
+ }
157
+ return list;
158
+ });
159
+ var nav = createTabindexNavigator(selectedItem, { count: function() {
160
+ return filteredItems().length;
161
+ } }, "wrap");
162
+ var navTab = createTabindexNavigator(selectedTab, { count: function() {
163
+ return tabs.length;
164
+ } }, "wrap");
165
+ var navMode = createTabindexNavigator(selectedModeIndex, { count: function() {
166
+ return 2;
167
+ } }, "wrap");
168
+ function selectItem(index) {
169
+ return function() {
170
+ selectedItem.set(index);
171
+ quantity.set(1);
172
+ if (!isItemDisabled(filteredItems()[index])) quantityDialogOpen.set(true);
173
+ };
174
+ }
175
+ function selectTab(index) {
176
+ return function() {
177
+ selectedTab.set(index);
178
+ selectedItem.set(0);
179
+ };
180
+ }
181
+ function selectMode(mode) {
182
+ return function() {
183
+ tradeMode.set(mode);
184
+ selectedModeIndex.set(mode === "buy" ? 0 : 1);
185
+ selectedItem.set(0);
186
+ quantity.set(1);
187
+ tradeView.set("items");
188
+ };
189
+ }
190
+ function isItemDisabled(item) {
191
+ var _a;
192
+ if (!item) return true;
193
+ var price = (item === null || item === void 0 ? void 0 : item.price) || 0;
194
+ if (price <= 0) return true;
195
+ if (tradeMode() === "sell") return ((_a = item === null || item === void 0 ? void 0 : item.quantity) !== null && _a !== void 0 ? _a : 0) <= 0;
196
+ return gold() < price;
197
+ }
198
+ function backToMode() {
199
+ return function() {
200
+ tradeView.set("mode");
201
+ };
202
+ }
203
+ function changeQuantity(delta) {
204
+ return function() {
205
+ var limit = maxQuantity();
206
+ if (limit <= 0) return;
207
+ var nextValue = Math.max(1, Math.min(limit, quantity() + delta));
208
+ if (nextValue !== quantity()) quantity.set(nextValue);
209
+ };
210
+ }
211
+ function closeQuantityDialog() {
212
+ return function() {
213
+ quantityDialogOpen.set(false);
214
+ };
215
+ }
216
+ function confirmTrade() {
217
+ return function() {
218
+ var item = currentItem();
219
+ if (!item || isItemDisabled(item)) {
220
+ quantityDialogOpen.set(false);
221
+ return;
222
+ }
223
+ onInteraction(tradeMode() === "buy" ? "buyItem" : "sellItem", {
224
+ id: item.id,
225
+ nb: quantity()
226
+ });
227
+ quantityDialogOpen.set(false);
228
+ };
229
+ }
230
+ effect(function() {
231
+ var count = filteredItems().length;
232
+ if (selectedItem() >= count) selectedItem.set(Math.max(0, count - 1));
233
+ });
234
+ var modeControls = signal({
235
+ left: {
236
+ repeat: true,
237
+ bind: keyboardControls.left,
238
+ throttle: 150,
239
+ keyDown: function() {
240
+ navMode.next(-1);
241
+ }
242
+ },
243
+ right: {
244
+ repeat: true,
245
+ bind: keyboardControls.right,
246
+ throttle: 150,
247
+ keyDown: function() {
248
+ navMode.next(1);
249
+ }
250
+ },
251
+ action: {
252
+ bind: keyboardControls.action,
253
+ keyDown: function() {
254
+ var mode = selectedModeIndex() === 0 ? "buy" : "sell";
255
+ tradeMode.set(mode);
256
+ selectedItem.set(0);
257
+ quantity.set(1);
258
+ tradeView.set("items");
259
+ }
260
+ },
261
+ escape: {
262
+ bind: keyboardControls.escape,
263
+ keyDown: function() {
264
+ onFinish();
265
+ }
266
+ },
267
+ gamepad: { enabled: true }
268
+ });
269
+ var itemControls = signal({
270
+ up: {
271
+ repeat: true,
272
+ bind: keyboardControls.up,
273
+ throttle: 150,
274
+ keyDown: function() {
275
+ if (quantityDialogOpen()) {
276
+ changeQuantity(1)();
277
+ return;
278
+ }
279
+ nav.next(-1);
280
+ }
281
+ },
282
+ down: {
283
+ repeat: true,
284
+ bind: keyboardControls.down,
285
+ throttle: 150,
286
+ keyDown: function() {
287
+ if (quantityDialogOpen()) {
288
+ changeQuantity(-1)();
289
+ return;
290
+ }
291
+ nav.next(1);
292
+ }
293
+ },
294
+ action: {
295
+ bind: keyboardControls.action,
296
+ keyDown: function() {
297
+ if (quantityDialogOpen()) {
298
+ var item_1 = currentItem();
299
+ if (!item_1 || isItemDisabled(item_1)) {
300
+ quantityDialogOpen.set(false);
301
+ return;
302
+ }
303
+ onInteraction(tradeMode() === "buy" ? "buyItem" : "sellItem", {
304
+ id: item_1.id,
305
+ nb: quantity()
306
+ });
307
+ quantityDialogOpen.set(false);
308
+ return;
309
+ }
310
+ if (!isItemDisabled(currentItem())) quantityDialogOpen.set(true);
311
+ }
312
+ },
313
+ escape: {
314
+ bind: keyboardControls.escape,
315
+ keyDown: function() {
316
+ if (quantityDialogOpen()) {
317
+ quantityDialogOpen.set(false);
318
+ return;
319
+ }
320
+ tradeView.set("mode");
321
+ }
322
+ },
323
+ gamepad: { enabled: true }
324
+ });
325
+ var tabControls = signal({
326
+ left: {
327
+ repeat: true,
328
+ bind: keyboardControls.left,
329
+ throttle: 150,
330
+ keyDown: function() {
331
+ if (quantityDialogOpen()) return;
332
+ navTab.next(-1);
333
+ }
334
+ },
335
+ right: {
336
+ repeat: true,
337
+ bind: keyboardControls.right,
338
+ throttle: 150,
339
+ keyDown: function() {
340
+ if (quantityDialogOpen()) return;
341
+ navTab.next(1);
342
+ }
343
+ },
344
+ gamepad: { enabled: true }
345
+ });
346
+ return h(DOMContainer, {
347
+ width: "100%",
348
+ height: "100%"
349
+ }, h(DOMElement, {
350
+ element: "div",
351
+ attrs: { class: "rpg-shop-container rpg-anim-fade-in" }
352
+ }, [h(DOMElement, {
353
+ element: "div",
354
+ attrs: { class: "rpg-shop-header" }
355
+ }, [h(DOMElement, {
356
+ element: "div",
357
+ attrs: { class: "rpg-shop-merchant" }
358
+ }, [h(DOMElement, { element: "div" }, cond(hasFace, () => h(DOMElement, {
359
+ element: "div",
360
+ attrs: { class: "rpg-shop-merchant-avatar" }
361
+ }, h(DOMSprite, {
362
+ sheet: computed(() => faceSheet(face().id, face().expression)),
363
+ width: "50px",
364
+ height: "50px",
365
+ objectFit: "contain"
366
+ })))), h(DOMElement, {
367
+ element: "div",
368
+ attrs: { class: "rpg-shop-merchant-info" }
369
+ }, h(DOMElement, {
370
+ element: "p",
371
+ textContent: computed(() => shopMessage())
372
+ }))]), h(DOMElement, {
373
+ element: "div",
374
+ attrs: { class: "rpg-shop-gold" },
375
+ textContent: computed(() => gold() + goldTerm)
376
+ })]), h(DOMElement, {
377
+ element: "div",
378
+ attrs: { class: "rpg-shop-body" }
379
+ }, h(DOMElement, {
380
+ element: "div",
381
+ attrs: { class: "rpg-shop-left" }
382
+ }, [cond(computed(() => tradeView() === "mode"), () => h(DOMElement, {
383
+ element: "div",
384
+ attrs: { class: "rpg-shop-content rpg-shop-content-mode" }
385
+ }, h(DOMElement, {
386
+ element: "div",
387
+ attrs: { class: "rpg-shop-details rpg-shop-details-mode" }
388
+ }, [h(DOMElement, {
389
+ element: "div",
390
+ attrs: { class: "rpg-shop-details-header" }
391
+ }, [h(DOMElement, {
392
+ element: "div",
393
+ attrs: { class: "rpg-shop-details-icon" },
394
+ textContent: "🛒"
395
+ }), h(DOMElement, {
396
+ element: "h2",
397
+ attrs: { style: "margin: 0;" },
398
+ textContent: "Choose an action"
399
+ })]), h(DOMElement, {
400
+ element: "div",
401
+ attrs: { class: "rpg-shop-trade" }
402
+ }, h(Navigation, {
403
+ tabindex: selectedModeIndex,
404
+ controls: modeControls
405
+ }, h(DOMElement, {
406
+ element: "div",
407
+ attrs: { class: "rpg-shop-tabs rpg-shop-trade-tabs" }
408
+ }, [h(DOMElement, {
409
+ element: "div",
410
+ attrs: {
411
+ class: ["rpg-shop-tab", computed(() => ({ active: selectedModeIndex() === 0 }))],
412
+ click: selectMode("buy")
413
+ },
414
+ textContent: "Buy"
415
+ }), h(DOMElement, {
416
+ element: "div",
417
+ attrs: {
418
+ class: ["rpg-shop-tab", computed(() => ({ active: selectedModeIndex() === 1 }))],
419
+ click: selectMode("sell")
420
+ },
421
+ textContent: "Sell"
422
+ })])))])), () => h(DOMElement, { element: "div" }, [h(Navigation, {
423
+ tabindex: selectedTab,
424
+ controls: tabControls
425
+ }, h(DOMElement, {
426
+ element: "div",
427
+ attrs: { class: "rpg-shop-tabs" }
428
+ }, loop(tabs, (tab, index) => h(DOMElement, {
429
+ element: "div",
430
+ attrs: {
431
+ class: ["rpg-shop-tab", computed(() => ({ active: selectedTab() === index }))],
432
+ tabindex: index,
433
+ click: selectTab(index)
434
+ },
435
+ textContent: tab.label
436
+ })))), h(DOMElement, {
437
+ element: "div",
438
+ attrs: { class: "rpg-shop-content" }
439
+ }, [h(DOMElement, {
440
+ element: "div",
441
+ attrs: { class: "rpg-shop-grid" }
442
+ }, h(Navigation, {
443
+ tabindex: selectedItem,
444
+ controls: itemControls
445
+ }, loop(filteredItems, (item, index) => h(DOMElement, {
446
+ element: "div",
447
+ attrs: {
448
+ class: ["rpg-shop-card", computed(() => ({
449
+ disabled: isItemDisabled(item),
450
+ selected: selectedItem() === index
451
+ }))],
452
+ tabindex: index,
453
+ click: selectItem(index)
454
+ }
455
+ }, [
456
+ h(DOMElement, {
457
+ element: "div",
458
+ attrs: { class: "rpg-shop-card-icon" }
459
+ }, cond(item.icon, () => h(DOMSprite, {
460
+ sheet: computed(() => iconSheet(item.icon)),
461
+ playing: "default",
462
+ width: "48px",
463
+ height: "48px",
464
+ objectFit: "contain"
465
+ }))),
466
+ h(DOMElement, {
467
+ element: "div",
468
+ attrs: { class: "rpg-shop-card-name" },
469
+ textContent: item.name
470
+ }),
471
+ h(DOMElement, {
472
+ element: "div",
473
+ attrs: { class: "rpg-shop-card-price" },
474
+ textContent: item.price + goldTerm
475
+ }),
476
+ cond(computed(() => item.quantity !== void 0), () => h(DOMElement, {
477
+ element: "div",
478
+ attrs: { class: "rpg-shop-card-qty" },
479
+ textContent: "x" + item.quantity
480
+ })),
481
+ cond(item.equipped, () => h(DOMElement, {
482
+ element: "div",
483
+ attrs: { class: "rpg-shop-card-tag" },
484
+ textContent: "Equipped"
485
+ }))
486
+ ])))), h(DOMElement, {
487
+ element: "div",
488
+ attrs: { class: "rpg-shop-details" }
489
+ }, [
490
+ h(DOMElement, {
491
+ element: "div",
492
+ attrs: { class: "rpg-shop-details-header" }
493
+ }, [
494
+ h(DOMElement, {
495
+ element: "div",
496
+ attrs: { class: "rpg-shop-details-icon" }
497
+ }, h(DOMSprite, {
498
+ sheet: computed(() => iconSheet(currentItem()?.icon)),
499
+ playing: "default",
500
+ width: "80px",
501
+ height: "80px",
502
+ objectFit: "contain"
503
+ })),
504
+ h(DOMElement, {
505
+ element: "h2",
506
+ attrs: { style: "margin: 0;" },
507
+ textContent: computed(() => currentItem()?.name || "")
508
+ }),
509
+ h(DOMElement, {
510
+ element: "p",
511
+ attrs: { style: "color: #ffd700; font-weight: bold; margin: 8px 0;" },
512
+ textContent: computed(() => currentItem()?.price ?? 0 + goldTerm)
513
+ }),
514
+ cond(computed(() => currentItem()?.quantity !== void 0), () => h(DOMElement, {
515
+ element: "div",
516
+ attrs: { class: "rpg-shop-details-qty" },
517
+ textContent: computed(() => "Qty: x" + currentItem()?.quantity)
518
+ }))
519
+ ]),
520
+ h(DOMElement, { element: "div" }, cond(currentItem()?.equipped, () => h(DOMElement, {
521
+ element: "div",
522
+ attrs: { class: "rpg-shop-equipped" },
523
+ textContent: "Already equipped"
524
+ }))),
525
+ h(DOMElement, {
526
+ element: "div",
527
+ attrs: { class: "rpg-shop-details-desc" },
528
+ textContent: computed(() => currentItem()?.description || "")
529
+ }),
530
+ h(DOMElement, { element: "div" }, cond(computed(() => displayStats().length > 0), () => h(DOMElement, {
531
+ element: "div",
532
+ attrs: { class: "rpg-shop-stats" }
533
+ }, loop(displayStats, (stat, index) => h(DOMElement, {
534
+ element: "div",
535
+ attrs: { class: ["rpg-shop-stat", {
536
+ positive: stat.delta > 0,
537
+ negative: stat.delta < 0
538
+ }] }
539
+ }, [
540
+ h(DOMElement, {
541
+ element: "div",
542
+ attrs: { class: "rpg-shop-stat-key" },
543
+ textContent: stat.label
544
+ }),
545
+ h(DOMElement, {
546
+ element: "div",
547
+ attrs: { class: "rpg-shop-stat-value" },
548
+ textContent: stat.delta > 0 ? "+" : "" + stat.delta
549
+ }),
550
+ cond(computed(() => stat.current !== void 0), () => h(DOMElement, {
551
+ element: "div",
552
+ attrs: { class: "rpg-shop-stat-current" },
553
+ textContent: stat.current + " → " + stat.next
554
+ }))
555
+ ]))))),
556
+ h(DOMElement, {
557
+ element: "button",
558
+ attrs: {
559
+ class: "rpg-shop-btn",
560
+ click: backToMode()
561
+ },
562
+ textContent: "Back"
563
+ })
564
+ ])])])), cond(quantityDialogOpen, () => h(DOMElement, {
565
+ element: "div",
566
+ attrs: { class: "rpg-shop-modal" }
567
+ }, h(DOMElement, {
568
+ element: "div",
569
+ attrs: { class: "rpg-shop-modal-card" }
570
+ }, [
571
+ h(DOMElement, {
572
+ element: "div",
573
+ attrs: { class: "rpg-shop-modal-title" },
574
+ textContent: actionLabel
575
+ }),
576
+ h(DOMElement, {
577
+ element: "div",
578
+ attrs: { class: "rpg-shop-modal-item" },
579
+ textContent: computed(() => currentItem()?.name || "")
580
+ }),
581
+ cond(computed(() => currentItem()?.quantity !== void 0), () => h(DOMElement, {
582
+ element: "div",
583
+ attrs: { class: "rpg-shop-modal-qty" },
584
+ textContent: computed(() => "Available: x" + currentItem()?.quantity)
585
+ })),
586
+ h(DOMElement, {
587
+ element: "div",
588
+ attrs: { class: "rpg-shop-quantity" }
589
+ }, [h(DOMElement, {
590
+ element: "div",
591
+ attrs: { class: "rpg-shop-quantity-label" },
592
+ textContent: "Quantity"
593
+ }), h(DOMElement, {
594
+ element: "div",
595
+ attrs: { class: "rpg-shop-quantity-controls" }
596
+ }, [
597
+ h(DOMElement, {
598
+ element: "button",
599
+ attrs: {
600
+ class: "rpg-shop-btn",
601
+ click: changeQuantity(-1)
602
+ },
603
+ textContent: "-"
604
+ }),
605
+ h(DOMElement, {
606
+ element: "div",
607
+ attrs: { class: "rpg-shop-quantity-value" },
608
+ textContent: quantity
609
+ }),
610
+ h(DOMElement, {
611
+ element: "button",
612
+ attrs: {
613
+ class: "rpg-shop-btn",
614
+ click: changeQuantity(1)
615
+ },
616
+ textContent: "+"
617
+ })
618
+ ])]),
619
+ h(DOMElement, {
620
+ element: "div",
621
+ attrs: { class: "rpg-shop-modal-total" }
622
+ }, [h(DOMElement, {
623
+ element: "span",
624
+ textContent: "Total"
625
+ }), h(DOMElement, {
626
+ element: "span",
627
+ textContent: computed(() => totalPrice() + goldTerm)
628
+ })]),
629
+ h(DOMElement, {
630
+ element: "div",
631
+ attrs: { class: "rpg-shop-modal-actions" }
632
+ }, [h(DOMElement, {
633
+ element: "button",
634
+ attrs: {
635
+ class: "rpg-shop-btn rpg-shop-btn-secondary",
636
+ click: closeQuantityDialog()
637
+ },
638
+ textContent: "Cancel"
639
+ }), h(DOMElement, {
640
+ element: "button",
641
+ attrs: {
642
+ class: "rpg-shop-btn",
643
+ click: confirmTrade()
644
+ },
645
+ textContent: computed(() => actionLabel() + " x" + quantity())
646
+ })])
647
+ ])))]))]));
648
+ }
649
+ //#endregion
650
+ export { component as default };
651
+
652
+ //# sourceMappingURL=shop.ce.js.map