@rpgjs/client 5.0.0-beta.1 → 5.0.0-beta.11
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.
- package/CHANGELOG.md +49 -0
- package/LICENSE +19 -0
- package/dist/Game/AnimationManager.d.ts +1 -1
- package/dist/Game/AnimationManager.js +18 -9
- package/dist/Game/AnimationManager.js.map +1 -1
- package/dist/Game/AnimationManager.spec.d.ts +1 -0
- package/dist/Game/Event.js.map +1 -1
- package/dist/Game/Map.d.ts +9 -1
- package/dist/Game/Map.js +63 -5
- package/dist/Game/Map.js.map +1 -1
- package/dist/Game/Object.d.ts +47 -15
- package/dist/Game/Object.js +82 -38
- package/dist/Game/Object.js.map +1 -1
- package/dist/Game/Player.js.map +1 -1
- package/dist/Game/ProjectileManager.d.ts +89 -0
- package/dist/Game/ProjectileManager.js +179 -0
- package/dist/Game/ProjectileManager.js.map +1 -0
- package/dist/Game/ProjectileManager.spec.d.ts +1 -0
- package/dist/Gui/Gui.d.ts +17 -4
- package/dist/Gui/Gui.js +78 -48
- package/dist/Gui/Gui.js.map +1 -1
- package/dist/Gui/Gui.spec.d.ts +1 -0
- package/dist/Gui/NotificationManager.js.map +1 -1
- package/dist/Resource.js +1 -1
- package/dist/Resource.js.map +1 -1
- package/dist/RpgClient.d.ts +110 -15
- package/dist/RpgClientEngine.d.ts +86 -10
- package/dist/RpgClientEngine.js +306 -49
- package/dist/RpgClientEngine.js.map +1 -1
- package/dist/Sound.js.map +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.122.0 → _@oxc-project_runtime@0.130.0}/helpers/decorate.js +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.122.0 → _@oxc-project_runtime@0.130.0}/helpers/decorateMetadata.js +1 -1
- package/dist/components/animations/animation.ce.js +4 -5
- package/dist/components/animations/animation.ce.js.map +1 -1
- package/dist/components/animations/hit.ce.js +19 -25
- package/dist/components/animations/hit.ce.js.map +1 -1
- package/dist/components/animations/index.js +4 -4
- package/dist/components/animations/index.js.map +1 -1
- package/dist/components/character.ce.js +422 -240
- package/dist/components/character.ce.js.map +1 -1
- package/dist/components/dynamics/bar.ce.js +97 -0
- package/dist/components/dynamics/bar.ce.js.map +1 -0
- package/dist/components/dynamics/image.ce.js +24 -0
- package/dist/components/dynamics/image.ce.js.map +1 -0
- package/dist/components/dynamics/parse-value.d.ts +3 -0
- package/dist/components/dynamics/parse-value.js +54 -35
- package/dist/components/dynamics/parse-value.js.map +1 -1
- package/dist/components/dynamics/parse-value.spec.d.ts +1 -0
- package/dist/components/dynamics/shape-utils.d.ts +16 -0
- package/dist/components/dynamics/shape-utils.js +73 -0
- package/dist/components/dynamics/shape-utils.js.map +1 -0
- package/dist/components/dynamics/shape-utils.spec.d.ts +1 -0
- package/dist/components/dynamics/shape.ce.js +84 -0
- package/dist/components/dynamics/shape.ce.js.map +1 -0
- package/dist/components/dynamics/text.ce.js +34 -56
- package/dist/components/dynamics/text.ce.js.map +1 -1
- package/dist/components/gui/box.ce.js +6 -8
- package/dist/components/gui/box.ce.js.map +1 -1
- package/dist/components/gui/dialogbox/index.ce.js +56 -62
- package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
- package/dist/components/gui/gameover.ce.js +42 -65
- package/dist/components/gui/gameover.ce.js.map +1 -1
- package/dist/components/gui/hud/hud.ce.js +21 -30
- package/dist/components/gui/hud/hud.ce.js.map +1 -1
- package/dist/components/gui/menu/equip-menu.ce.js +112 -165
- package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/exit-menu.ce.js +8 -6
- package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/items-menu.ce.js +52 -69
- package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/main-menu.ce.js +75 -92
- package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/options-menu.ce.js +5 -4
- package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/skills-menu.ce.js +12 -17
- package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
- package/dist/components/gui/mobile/index.js +2 -2
- package/dist/components/gui/mobile/index.js.map +1 -1
- package/dist/components/gui/mobile/mobile.ce.js +5 -4
- package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
- package/dist/components/gui/notification/notification.ce.js +22 -24
- package/dist/components/gui/notification/notification.ce.js.map +1 -1
- package/dist/components/gui/save-load.ce.js +72 -249
- package/dist/components/gui/save-load.ce.js.map +1 -1
- package/dist/components/gui/shop/shop.ce.js +90 -127
- package/dist/components/gui/shop/shop.ce.js.map +1 -1
- package/dist/components/gui/title-screen.ce.js +45 -70
- package/dist/components/gui/title-screen.ce.js.map +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +1 -0
- package/dist/components/player-components-utils.d.ts +67 -0
- package/dist/components/player-components-utils.js +162 -0
- package/dist/components/player-components-utils.js.map +1 -0
- package/dist/components/player-components-utils.spec.d.ts +1 -0
- package/dist/components/player-components.ce.js +189 -0
- package/dist/components/player-components.ce.js.map +1 -0
- package/dist/components/prebuilt/hp-bar.ce.js +42 -44
- package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
- package/dist/components/prebuilt/light-halo.ce.js +36 -59
- package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
- package/dist/components/scenes/canvas.ce.js +165 -21
- package/dist/components/scenes/canvas.ce.js.map +1 -1
- package/dist/components/scenes/draw-map.ce.js +25 -32
- package/dist/components/scenes/draw-map.ce.js.map +1 -1
- package/dist/components/scenes/event-layer.ce.js +9 -8
- package/dist/components/scenes/event-layer.ce.js.map +1 -1
- package/dist/core/inject.js +1 -1
- package/dist/core/inject.js.map +1 -1
- package/dist/core/setup.js +1 -1
- package/dist/core/setup.js.map +1 -1
- package/dist/decorators/spritesheet.d.ts +1 -0
- package/dist/decorators/spritesheet.js +11 -0
- package/dist/decorators/spritesheet.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +26 -21
- package/dist/module.js +15 -1
- package/dist/module.js.map +1 -1
- package/dist/node_modules/.pnpm/{@signe_di@2.9.0 → @signe_di@3.0.1}/node_modules/@signe/di/dist/index.js +7 -117
- package/dist/node_modules/.pnpm/@signe_di@3.0.1/node_modules/@signe/di/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_reactive@3.0.1/node_modules/@signe/reactive/dist/index.js +239 -0
- package/dist/node_modules/.pnpm/@signe_reactive@3.0.1/node_modules/@signe/reactive/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/chunk-EUXUH3YW.js +13 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/chunk-EUXUH3YW.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/index.js +696 -0
- package/dist/node_modules/.pnpm/@signe_room@3.0.1/node_modules/@signe/room/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/client/index.js +44 -0
- package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/client/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{@signe_sync@2.9.0 → @signe_sync@3.0.1}/node_modules/@signe/sync/dist/index.js +57 -141
- package/dist/node_modules/.pnpm/@signe_sync@3.0.1/node_modules/@signe/sync/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +1 -1
- package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js +27 -27
- package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +1 -1
- package/dist/presets/animation.js.map +1 -1
- package/dist/presets/faceset.js.map +1 -1
- package/dist/presets/icon.js.map +1 -1
- package/dist/presets/index.js.map +1 -1
- package/dist/presets/lpc.js.map +1 -1
- package/dist/presets/rmspritesheet.js.map +1 -1
- package/dist/services/AbstractSocket.js.map +1 -1
- package/dist/services/actionInput.d.ts +12 -0
- package/dist/services/actionInput.js +27 -0
- package/dist/services/actionInput.js.map +1 -0
- package/dist/services/actionInput.spec.d.ts +1 -0
- package/dist/services/keyboardControls.js.map +1 -1
- package/dist/services/loadMap.d.ts +6 -0
- package/dist/services/loadMap.js +1 -1
- package/dist/services/loadMap.js.map +1 -1
- package/dist/services/mmorpg-connection.d.ts +5 -0
- package/dist/services/mmorpg-connection.js +50 -0
- package/dist/services/mmorpg-connection.js.map +1 -0
- package/dist/services/mmorpg-connection.spec.d.ts +1 -0
- package/dist/services/mmorpg.d.ts +10 -4
- package/dist/services/mmorpg.js +56 -33
- package/dist/services/mmorpg.js.map +1 -1
- package/dist/services/pointerContext.d.ts +11 -0
- package/dist/services/pointerContext.js +48 -0
- package/dist/services/pointerContext.js.map +1 -0
- package/dist/services/pointerContext.spec.d.ts +1 -0
- package/dist/services/save.js.map +1 -1
- package/dist/services/save.spec.d.ts +1 -0
- package/dist/services/standalone-message.d.ts +1 -0
- package/dist/services/standalone-message.js +9 -0
- package/dist/services/standalone-message.js.map +1 -0
- package/dist/services/standalone.js +4 -3
- package/dist/services/standalone.js.map +1 -1
- package/dist/services/standalone.spec.d.ts +1 -0
- package/dist/utils/getEntityProp.js +4 -3
- package/dist/utils/getEntityProp.js.map +1 -1
- package/dist/utils/getEntityProp.spec.d.ts +1 -0
- package/dist/utils/readPropValue.d.ts +2 -0
- package/dist/utils/readPropValue.js +13 -0
- package/dist/utils/readPropValue.js.map +1 -0
- package/package.json +13 -14
- package/src/Game/AnimationManager.spec.ts +30 -0
- package/src/Game/AnimationManager.ts +22 -10
- package/src/Game/Map.ts +91 -2
- package/src/Game/Object.ts +148 -69
- package/src/Game/ProjectileManager.spec.ts +338 -0
- package/src/Game/ProjectileManager.ts +324 -0
- package/src/Gui/Gui.spec.ts +273 -0
- package/src/Gui/Gui.ts +105 -50
- package/src/Resource.ts +1 -2
- package/src/RpgClient.ts +125 -17
- package/src/RpgClientEngine.ts +457 -87
- package/src/components/character.ce +441 -32
- package/src/components/dynamics/bar.ce +88 -0
- package/src/components/dynamics/image.ce +21 -0
- package/src/components/dynamics/parse-value.spec.ts +83 -0
- package/src/components/dynamics/parse-value.ts +111 -37
- package/src/components/dynamics/shape-utils.spec.ts +46 -0
- package/src/components/dynamics/shape-utils.ts +61 -0
- package/src/components/dynamics/shape.ce +90 -0
- package/src/components/dynamics/text.ce +35 -149
- package/src/components/gui/dialogbox/index.ce +18 -8
- package/src/components/gui/gameover.ce +2 -1
- package/src/components/gui/menu/equip-menu.ce +2 -1
- package/src/components/gui/menu/exit-menu.ce +2 -1
- package/src/components/gui/menu/items-menu.ce +3 -2
- package/src/components/gui/menu/main-menu.ce +2 -1
- package/src/components/gui/save-load.ce +2 -1
- package/src/components/gui/shop/shop.ce +3 -2
- package/src/components/gui/title-screen.ce +2 -1
- package/src/components/index.ts +2 -1
- package/src/components/player-components-utils.spec.ts +109 -0
- package/src/components/player-components-utils.ts +205 -0
- package/src/components/player-components.ce +222 -0
- package/src/components/prebuilt/hp-bar.ce +4 -3
- package/src/components/prebuilt/light-halo.ce +2 -2
- package/src/components/scenes/canvas.ce +175 -8
- package/src/components/scenes/draw-map.ce +18 -17
- package/src/components/scenes/event-layer.ce +1 -2
- package/src/core/setup.ts +2 -2
- package/src/decorators/spritesheet.ts +8 -0
- package/src/index.ts +4 -0
- package/src/module.ts +18 -1
- package/src/services/actionInput.spec.ts +101 -0
- package/src/services/actionInput.ts +53 -0
- package/src/services/loadMap.ts +2 -0
- package/src/services/mmorpg-connection.spec.ts +99 -0
- package/src/services/mmorpg-connection.ts +69 -0
- package/src/services/mmorpg.ts +68 -36
- package/src/services/pointerContext.spec.ts +36 -0
- package/src/services/pointerContext.ts +84 -0
- package/src/services/save.spec.ts +127 -0
- package/src/services/standalone-message.ts +7 -0
- package/src/services/standalone.spec.ts +34 -0
- package/src/services/standalone.ts +3 -2
- package/src/utils/getEntityProp.spec.ts +96 -0
- package/src/utils/getEntityProp.ts +4 -3
- package/src/utils/readPropValue.ts +16 -0
- package/dist/node_modules/.pnpm/@signe_di@2.9.0/node_modules/@signe/di/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +0 -457
- package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js +0 -463
- package/dist/node_modules/.pnpm/@signe_reactive@2.9.0/node_modules/@signe/reactive/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js +0 -2191
- package/dist/node_modules/.pnpm/@signe_room@2.9.0/node_modules/@signe/room/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +0 -10
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js +0 -91
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/client/index.js.map +0 -1
- package/dist/node_modules/.pnpm/@signe_sync@2.9.0/node_modules/@signe/sync/dist/index.js.map +0 -1
- package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +0 -14
- package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +0 -1
|
@@ -1,43 +1,20 @@
|
|
|
1
1
|
import { inject } from "../../../core/inject.js";
|
|
2
|
+
import { getKeyboardControlBind } from "../../../services/actionInput.js";
|
|
2
3
|
import { RpgClientEngine } from "../../../RpgClientEngine.js";
|
|
3
4
|
import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, signal, useDefineProps, useProps } from "canvasengine";
|
|
4
5
|
//#region src/components/gui/menu/equip-menu.ce
|
|
5
6
|
function component($$props) {
|
|
6
7
|
useProps($$props);
|
|
7
8
|
const defineProps = useDefineProps($$props);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
};
|
|
18
|
-
var __spreadArray = this && this.__spreadArray || function(to, from, pack) {
|
|
19
|
-
if (pack || arguments.length === 2) {
|
|
20
|
-
for (var i = 0, l = from.length, ar; i < l; i++) if (ar || !(i in from)) {
|
|
21
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
-
ar[i] = from[i];
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
-
};
|
|
27
|
-
var engine = inject(RpgClientEngine);
|
|
28
|
-
var keyboardControls = engine.globalConfig.keyboardControls;
|
|
29
|
-
var currentPlayer = engine.scene.currentPlayer;
|
|
30
|
-
var selectedTab = signal(0);
|
|
31
|
-
var selectedItem = signal(0);
|
|
32
|
-
var _a = defineProps(), data = _a.data, onInteraction = _a.onInteraction, onBack = _a.onBack;
|
|
33
|
-
var equips = computed(function() {
|
|
34
|
-
var _a;
|
|
35
|
-
return (_a = data().equips) !== null && _a !== void 0 ? _a : data().items;
|
|
36
|
-
});
|
|
37
|
-
var slots = computed(function() {
|
|
38
|
-
return data().slots;
|
|
39
|
-
});
|
|
40
|
-
var defaultSlots = [{
|
|
9
|
+
const engine = inject(RpgClientEngine);
|
|
10
|
+
const keyboardControls = engine.globalConfig.keyboardControls;
|
|
11
|
+
const currentPlayer = engine.scene.currentPlayer;
|
|
12
|
+
const selectedTab = signal(0);
|
|
13
|
+
const selectedItem = signal(0);
|
|
14
|
+
const { data, onInteraction, onBack } = defineProps();
|
|
15
|
+
const equips = computed(() => data().equips ?? data().items);
|
|
16
|
+
const slots = computed(() => data().slots);
|
|
17
|
+
const defaultSlots = [{
|
|
41
18
|
id: "weapon",
|
|
42
19
|
label: "Weapon",
|
|
43
20
|
types: ["weapon"]
|
|
@@ -46,108 +23,88 @@ function component($$props) {
|
|
|
46
23
|
label: "Armor",
|
|
47
24
|
types: ["armor"]
|
|
48
25
|
}];
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
var safeEquips = computed(function() {
|
|
53
|
-
var list = resolveProp(equips);
|
|
26
|
+
const resolveProp = (value) => typeof value === "function" ? value() : value;
|
|
27
|
+
const safeEquips = computed(() => {
|
|
28
|
+
const list = resolveProp(equips);
|
|
54
29
|
return Array.isArray(list) ? list : [];
|
|
55
30
|
});
|
|
56
|
-
|
|
57
|
-
|
|
31
|
+
const slotList = computed(() => {
|
|
32
|
+
const list = resolveProp(slots);
|
|
58
33
|
if (Array.isArray(list) && list.length) return list;
|
|
59
34
|
return defaultSlots;
|
|
60
35
|
});
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
var _a, _b;
|
|
66
|
-
var equipped = ((_b = (_a = currentPlayer()).equipments) === null || _b === void 0 ? void 0 : _b.call(_a)) || [];
|
|
67
|
-
return new Set(equipped.map(function(it) {
|
|
68
|
-
var _a, _b, _c;
|
|
69
|
-
return (_c = (_b = (_a = it === null || it === void 0 ? void 0 : it.id) === null || _a === void 0 ? void 0 : _a.call(it)) !== null && _b !== void 0 ? _b : it === null || it === void 0 ? void 0 : it.id) !== null && _c !== void 0 ? _c : it === null || it === void 0 ? void 0 : it.name;
|
|
70
|
-
}));
|
|
36
|
+
const currentSlot = computed(() => slotList()[selectedTab()]);
|
|
37
|
+
const equippedIds = computed(() => {
|
|
38
|
+
const equipped = currentPlayer().equipments?.() || [];
|
|
39
|
+
return new Set(equipped.map((it) => it?.id?.() ?? it?.id ?? it?.name));
|
|
71
40
|
});
|
|
72
|
-
|
|
73
|
-
effect(
|
|
74
|
-
|
|
75
|
-
safeEquips().forEach(
|
|
76
|
-
if (
|
|
41
|
+
const equippedOverrides = signal({});
|
|
42
|
+
effect(() => {
|
|
43
|
+
const next = {};
|
|
44
|
+
safeEquips().forEach((item) => {
|
|
45
|
+
if (item?.id && typeof item.equipped === "boolean") next[item.id] = item.equipped;
|
|
77
46
|
});
|
|
78
47
|
equippedOverrides.set(next);
|
|
79
48
|
});
|
|
80
|
-
|
|
49
|
+
const itemEquipped = (item) => {
|
|
81
50
|
if (!item) return false;
|
|
82
|
-
|
|
51
|
+
const overrides = equippedOverrides();
|
|
83
52
|
if (Object.prototype.hasOwnProperty.call(overrides, item.id)) return overrides[item.id];
|
|
84
53
|
if (typeof item.equipped === "boolean") return item.equipped;
|
|
85
54
|
return equippedIds().has(item.id);
|
|
86
55
|
};
|
|
87
|
-
|
|
56
|
+
const slotTypes = (slot) => {
|
|
88
57
|
if (!slot) return [];
|
|
89
58
|
if (Array.isArray(slot.types)) return slot.types;
|
|
90
59
|
if (slot.type) return [slot.type];
|
|
91
60
|
if (slot.id) return [slot.id];
|
|
92
61
|
return [];
|
|
93
62
|
};
|
|
94
|
-
|
|
95
|
-
|
|
63
|
+
const slotItems = computed(() => {
|
|
64
|
+
const slot = currentSlot();
|
|
96
65
|
if (!slot) return [];
|
|
97
|
-
|
|
98
|
-
return safeEquips().filter(
|
|
99
|
-
return item && types.has(item.type);
|
|
100
|
-
});
|
|
66
|
+
const types = new Set(slotTypes(slot));
|
|
67
|
+
return safeEquips().filter((item) => item && types.has(item.type));
|
|
101
68
|
});
|
|
102
|
-
|
|
103
|
-
return slotItems().find(
|
|
104
|
-
return itemEquipped(item);
|
|
105
|
-
}) || null;
|
|
69
|
+
const currentEquippedItem = computed(() => {
|
|
70
|
+
return slotItems().find((item) => itemEquipped(item)) || null;
|
|
106
71
|
});
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
});
|
|
72
|
+
const listEntries = computed(() => {
|
|
73
|
+
const items = slotItems().map((item) => ({
|
|
74
|
+
...item,
|
|
75
|
+
kind: "item",
|
|
76
|
+
tag: itemEquipped(item) ? "Equipped" : ""
|
|
77
|
+
}));
|
|
114
78
|
if (!currentEquippedItem()) return items;
|
|
115
|
-
return
|
|
79
|
+
return [{
|
|
116
80
|
id: "__unequip__",
|
|
117
81
|
name: "Unequip",
|
|
118
82
|
description: "Remove the current equipment",
|
|
119
83
|
kind: "unequip",
|
|
120
84
|
tag: ""
|
|
121
|
-
}
|
|
85
|
+
}, ...items];
|
|
122
86
|
});
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
var entry = currentEntry();
|
|
128
|
-
if ((entry === null || entry === void 0 ? void 0 : entry.kind) === "item") return entry;
|
|
87
|
+
const currentEntry = computed(() => listEntries()[selectedItem()]);
|
|
88
|
+
const detailsItem = computed(() => {
|
|
89
|
+
const entry = currentEntry();
|
|
90
|
+
if (entry?.kind === "item") return entry;
|
|
129
91
|
return currentEquippedItem();
|
|
130
92
|
});
|
|
131
|
-
|
|
132
|
-
|
|
93
|
+
const equippedText = computed(() => {
|
|
94
|
+
const slot = currentSlot();
|
|
133
95
|
if (!slot) return "";
|
|
134
|
-
|
|
135
|
-
return equipped ?
|
|
136
|
-
});
|
|
137
|
-
computed(function() {
|
|
138
|
-
return listEntries().length === 0;
|
|
96
|
+
const equipped = currentEquippedItem();
|
|
97
|
+
return equipped ? `${slot.label}: ${equipped.name}` : `${slot.label}: Empty`;
|
|
139
98
|
});
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if (menuData === null || menuData === void 0 ? void 0 : menuData.playerParams) return menuData.playerParams;
|
|
148
|
-
return ((_b = (_a = currentPlayer()) === null || _a === void 0 ? void 0 : _a._param) === null || _b === void 0 ? void 0 : _b.call(_a)) || {};
|
|
99
|
+
computed(() => listEntries().length === 0);
|
|
100
|
+
const nav = createTabindexNavigator(selectedItem, { count: () => listEntries().length }, "wrap");
|
|
101
|
+
const playerParams = computed(() => {
|
|
102
|
+
const menuData = data();
|
|
103
|
+
if (menuData?.playerStats) return menuData.playerStats;
|
|
104
|
+
if (menuData?.playerParams) return menuData.playerParams;
|
|
105
|
+
return currentPlayer()?._param?.() || {};
|
|
149
106
|
});
|
|
150
|
-
|
|
107
|
+
const statOrder = [
|
|
151
108
|
"atk",
|
|
152
109
|
"def",
|
|
153
110
|
"pdef",
|
|
@@ -159,7 +116,7 @@ function component($$props) {
|
|
|
159
116
|
"maxHp",
|
|
160
117
|
"maxSp"
|
|
161
118
|
];
|
|
162
|
-
|
|
119
|
+
const statLabels = {
|
|
163
120
|
atk: "ATK",
|
|
164
121
|
def: "DEF",
|
|
165
122
|
pdef: "PDEF",
|
|
@@ -171,11 +128,11 @@ function component($$props) {
|
|
|
171
128
|
maxHp: "MAX HP",
|
|
172
129
|
maxSp: "MAX SP"
|
|
173
130
|
};
|
|
174
|
-
|
|
131
|
+
const getItemStats = (item) => {
|
|
175
132
|
if (!item) return {};
|
|
176
|
-
|
|
133
|
+
const stats = item.stats || item.params || {};
|
|
177
134
|
if (Object.keys(stats).length) return stats;
|
|
178
|
-
|
|
135
|
+
const keys = [
|
|
179
136
|
"atk",
|
|
180
137
|
"def",
|
|
181
138
|
"pdef",
|
|
@@ -187,29 +144,24 @@ function component($$props) {
|
|
|
187
144
|
"maxHp",
|
|
188
145
|
"maxSp"
|
|
189
146
|
];
|
|
190
|
-
|
|
191
|
-
keys.forEach(
|
|
147
|
+
const direct = {};
|
|
148
|
+
keys.forEach((key) => {
|
|
192
149
|
if (item[key] !== void 0) direct[key] = item[key];
|
|
193
150
|
});
|
|
194
151
|
return direct;
|
|
195
152
|
};
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
var keys = orderedKeys.concat(extraKeys);
|
|
205
|
-
var list = [];
|
|
206
|
-
for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {
|
|
207
|
-
var key = keys_1[_i];
|
|
208
|
-
var delta = deltaStats[key];
|
|
153
|
+
const buildStatsList = (deltaStats) => {
|
|
154
|
+
const params = playerParams() || {};
|
|
155
|
+
const orderedKeys = statOrder.filter((key) => deltaStats[key] !== void 0);
|
|
156
|
+
const extraKeys = Object.keys(deltaStats).filter((key) => !statOrder.includes(key));
|
|
157
|
+
const keys = orderedKeys.concat(extraKeys);
|
|
158
|
+
const list = [];
|
|
159
|
+
for (const key of keys) {
|
|
160
|
+
const delta = deltaStats[key];
|
|
209
161
|
if (delta === void 0 || delta === 0) continue;
|
|
210
|
-
|
|
162
|
+
let current = params[key];
|
|
211
163
|
if (current === void 0 && key === "def") current = params.pdef;
|
|
212
|
-
|
|
164
|
+
const next = current !== void 0 ? current + delta : void 0;
|
|
213
165
|
list.push({
|
|
214
166
|
key,
|
|
215
167
|
label: statLabels[key] || key.toUpperCase(),
|
|
@@ -220,50 +172,50 @@ function component($$props) {
|
|
|
220
172
|
}
|
|
221
173
|
return list;
|
|
222
174
|
};
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
175
|
+
const displayStats = computed(() => {
|
|
176
|
+
const entry = currentEntry();
|
|
177
|
+
const equipped = currentEquippedItem();
|
|
226
178
|
if (!entry) return [];
|
|
227
179
|
if (entry.kind === "unequip") {
|
|
228
180
|
if (!equipped) return [];
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
Object.keys(
|
|
232
|
-
|
|
181
|
+
const stats = getItemStats(equipped);
|
|
182
|
+
const delta = {};
|
|
183
|
+
Object.keys(stats).forEach((key) => {
|
|
184
|
+
delta[key] = -stats[key];
|
|
233
185
|
});
|
|
234
|
-
return buildStatsList(
|
|
186
|
+
return buildStatsList(delta);
|
|
235
187
|
}
|
|
236
188
|
if (entry.kind === "item") {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
new Set(
|
|
241
|
-
|
|
189
|
+
const equippedStats = getItemStats(equipped);
|
|
190
|
+
const nextStats = getItemStats(entry);
|
|
191
|
+
const delta = {};
|
|
192
|
+
new Set([...Object.keys(nextStats), ...Object.keys(equippedStats)]).forEach((key) => {
|
|
193
|
+
delta[key] = (nextStats[key] || 0) - (equippedStats[key] || 0);
|
|
242
194
|
});
|
|
243
|
-
return buildStatsList(
|
|
195
|
+
return buildStatsList(delta);
|
|
244
196
|
}
|
|
245
197
|
return [];
|
|
246
198
|
});
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
if (types.length) safeEquips().forEach(
|
|
199
|
+
const applyEquipState = (slot, itemId, equip) => {
|
|
200
|
+
const types = slotTypes(slot);
|
|
201
|
+
const next = { ...equippedOverrides() };
|
|
202
|
+
if (types.length) safeEquips().forEach((item) => {
|
|
251
203
|
if (!item) return;
|
|
252
204
|
if (types.includes(item.type)) next[item.id] = false;
|
|
253
205
|
});
|
|
254
206
|
if (itemId) next[itemId] = equip;
|
|
255
207
|
equippedOverrides.set(next);
|
|
256
208
|
};
|
|
257
|
-
|
|
258
|
-
|
|
209
|
+
const commitSelection = (index) => {
|
|
210
|
+
const entry = listEntries()[index];
|
|
259
211
|
if (!entry) return;
|
|
260
212
|
if (entry.kind === "unequip") {
|
|
261
|
-
|
|
213
|
+
const equipped = currentEquippedItem();
|
|
262
214
|
if (equipped && onInteraction) onInteraction("equipItem", {
|
|
263
215
|
id: equipped.id,
|
|
264
216
|
equip: false
|
|
265
217
|
});
|
|
266
|
-
applyEquipState(currentSlot(), equipped
|
|
218
|
+
applyEquipState(currentSlot(), equipped?.id, false);
|
|
267
219
|
return;
|
|
268
220
|
}
|
|
269
221
|
if (entry.kind === "item" && onInteraction) {
|
|
@@ -286,15 +238,13 @@ function component($$props) {
|
|
|
286
238
|
commitSelection(index);
|
|
287
239
|
};
|
|
288
240
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
};
|
|
292
|
-
var controls = signal({
|
|
241
|
+
const iconSheet = (iconId) => ({ definition: engine.getSpriteSheet(iconId) });
|
|
242
|
+
const controls = signal({
|
|
293
243
|
up: {
|
|
294
244
|
repeat: true,
|
|
295
245
|
bind: keyboardControls.up,
|
|
296
246
|
throttle: 150,
|
|
297
|
-
keyDown
|
|
247
|
+
keyDown() {
|
|
298
248
|
if (!listEntries().length) return;
|
|
299
249
|
nav.next(-1);
|
|
300
250
|
}
|
|
@@ -303,12 +253,10 @@ function component($$props) {
|
|
|
303
253
|
repeat: true,
|
|
304
254
|
bind: keyboardControls.left,
|
|
305
255
|
throttle: 150,
|
|
306
|
-
keyDown
|
|
307
|
-
|
|
256
|
+
keyDown() {
|
|
257
|
+
const tabs = slotList();
|
|
308
258
|
if (!tabs.length) return;
|
|
309
|
-
selectedTab.update(
|
|
310
|
-
return (value - 1 + tabs.length) % tabs.length;
|
|
311
|
-
});
|
|
259
|
+
selectedTab.update((value) => (value - 1 + tabs.length) % tabs.length);
|
|
312
260
|
selectedItem.set(0);
|
|
313
261
|
}
|
|
314
262
|
},
|
|
@@ -316,12 +264,10 @@ function component($$props) {
|
|
|
316
264
|
repeat: true,
|
|
317
265
|
bind: keyboardControls.right,
|
|
318
266
|
throttle: 150,
|
|
319
|
-
keyDown
|
|
320
|
-
|
|
267
|
+
keyDown() {
|
|
268
|
+
const tabs = slotList();
|
|
321
269
|
if (!tabs.length) return;
|
|
322
|
-
selectedTab.update(
|
|
323
|
-
return (value + 1) % tabs.length;
|
|
324
|
-
});
|
|
270
|
+
selectedTab.update((value) => (value + 1) % tabs.length);
|
|
325
271
|
selectedItem.set(0);
|
|
326
272
|
}
|
|
327
273
|
},
|
|
@@ -329,28 +275,28 @@ function component($$props) {
|
|
|
329
275
|
repeat: true,
|
|
330
276
|
bind: keyboardControls.down,
|
|
331
277
|
throttle: 150,
|
|
332
|
-
keyDown
|
|
278
|
+
keyDown() {
|
|
333
279
|
if (!listEntries().length) return;
|
|
334
280
|
nav.next(1);
|
|
335
281
|
}
|
|
336
282
|
},
|
|
337
283
|
action: {
|
|
338
|
-
bind: keyboardControls.action,
|
|
339
|
-
keyDown
|
|
284
|
+
bind: getKeyboardControlBind(keyboardControls.action),
|
|
285
|
+
keyDown() {
|
|
340
286
|
if (!listEntries().length) return;
|
|
341
287
|
commitSelection(selectedItem());
|
|
342
288
|
}
|
|
343
289
|
},
|
|
344
290
|
escape: {
|
|
345
291
|
bind: keyboardControls.escape,
|
|
346
|
-
keyDown
|
|
292
|
+
keyDown() {
|
|
347
293
|
if (onBack) onBack();
|
|
348
294
|
}
|
|
349
295
|
},
|
|
350
296
|
gamepad: { enabled: true }
|
|
351
297
|
});
|
|
352
|
-
effect(
|
|
353
|
-
|
|
298
|
+
effect(() => {
|
|
299
|
+
const count = listEntries().length;
|
|
354
300
|
if (!count) {
|
|
355
301
|
selectedItem.set(0);
|
|
356
302
|
return;
|
|
@@ -475,7 +421,8 @@ function component($$props) {
|
|
|
475
421
|
textContent: entry.tag || ""
|
|
476
422
|
})])))])])]));
|
|
477
423
|
}
|
|
424
|
+
var __ce_component = component;
|
|
478
425
|
//#endregion
|
|
479
|
-
export {
|
|
426
|
+
export { __ce_component as default };
|
|
480
427
|
|
|
481
428
|
//# sourceMappingURL=equip-menu.ce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"equip-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/equip-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">Equip</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div>\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">\n <DOMSprite \n sheet={iconSheet(detailsItem()?.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n </div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">\n {detailsItem()?.name || currentSlot()?.label || \"Equip\"}\n </div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n {detailsItem()?.description || \"\"}\n </div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-ui-equip-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-ui-equip-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-ui-equip-stat-key\">{stat.label}</div>\n <div class=\"rpg-ui-equip-stat-value\">\n {stat.delta > 0 ? \"+\" : \"\"}{stat.delta}\n </div>\n @if (stat.current) {\n <div class=\"rpg-ui-equip-stat-current\">{stat.current} -> {stat.next}</div>\n }\n </div>\n }\n </div>\n }\n <div class=\"rpg-ui-menu-panel-details-meta\">\n <span>{equippedText()}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <div class=\"rpg-ui-menu-tabs\">\n @for ((tab,tabIndex) of slotList) {\n <div\n class=\"rpg-ui-menu-tab\"\n class={{active: selectedTab() === tabIndex}}\n tabindex={tabIndex}\n click={selectTab(tabIndex)}\n >{tab.label}</div>\n }\n </div>\n <Navigation tabindex={selectedItem} controls={controls}>\n @for ((entry,index) of listEntries) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedItem() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectItem(index)}\n >\n <div class=\"rpg-ui-menu-row-main\">\n <div class=\"rpg-ui-menu-row-icon\">\n @if (entry?.icon) {\n <DOMSprite \n sheet={iconSheet(entry.icon)} \n playing=\"default\" \n width=\"28px\"\n height=\"28px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <span>{entry.name}</span>\n </div>\n <span class=\"rpg-ui-menu-row-end\">{entry.tag || \"\"}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator, effect } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const keyboardControls = engine.globalConfig.keyboardControls;\n const currentPlayer = engine.scene.currentPlayer;\n\n const selectedTab = signal(0);\n const selectedItem = signal(0);\n const { data, onInteraction, onBack } = defineProps();\n\n const equips = computed(() => data().equips ?? data().items);\n const slots = computed(() => data().slots);\n\n const defaultSlots = [\n { id: \"weapon\", label: \"Weapon\", types: [\"weapon\"] },\n { id: \"armor\", label: \"Armor\", types: [\"armor\"] }\n ];\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const safeEquips = computed(() => {\n const list = resolveProp(equips);\n return Array.isArray(list) ? list : [];\n });\n const slotList = computed(() => {\n const list = resolveProp(slots);\n if (Array.isArray(list) && list.length) return list;\n return defaultSlots;\n });\n\n const currentSlot = computed(() => slotList()[selectedTab()]);\n\n const equippedIds = computed(() => {\n const equipped = currentPlayer().equipments?.() || [];\n return new Set(equipped.map((it) => it?.id?.() ?? it?.id ?? it?.name));\n });\n const equippedOverrides = signal({});\n\n effect(() => {\n const next = {};\n safeEquips().forEach((item) => {\n if (item?.id && typeof item.equipped === \"boolean\") {\n next[item.id] = item.equipped;\n }\n });\n equippedOverrides.set(next);\n });\n\n const itemEquipped = (item) => {\n if (!item) return false;\n const overrides = equippedOverrides();\n if (Object.prototype.hasOwnProperty.call(overrides, item.id)) {\n return overrides[item.id];\n }\n if (typeof item.equipped === \"boolean\") return item.equipped;\n return equippedIds().has(item.id);\n };\n\n const slotTypes = (slot) => {\n if (!slot) return [];\n if (Array.isArray(slot.types)) return slot.types;\n if (slot.type) return [slot.type];\n if (slot.id) return [slot.id];\n return [];\n };\n\n const slotItems = computed(() => {\n const slot = currentSlot();\n if (!slot) return [];\n const types = new Set(slotTypes(slot));\n return safeEquips().filter((item) => item && types.has(item.type));\n });\n\n const currentEquippedItem = computed(() => {\n const list = slotItems();\n return list.find((item) => itemEquipped(item)) || null;\n });\n\n const listEntries = computed(() => {\n const items = slotItems().map((item) => ({\n ...item,\n kind: \"item\",\n tag: itemEquipped(item) ? \"Equipped\" : \"\"\n }));\n const equipped = currentEquippedItem();\n if (!equipped) return items;\n return [\n {\n id: \"__unequip__\",\n name: \"Unequip\",\n description: \"Remove the current equipment\",\n kind: \"unequip\",\n tag: \"\"\n },\n ...items\n ];\n });\n\n const currentEntry = computed(() => listEntries()[selectedItem()]);\n const detailsItem = computed(() => {\n const entry = currentEntry();\n if (entry?.kind === \"item\") return entry;\n return currentEquippedItem();\n });\n\n const equippedText = computed(() => {\n const slot = currentSlot();\n if (!slot) return \"\";\n const equipped = currentEquippedItem();\n return equipped ? `${slot.label}: ${equipped.name}` : `${slot.label}: Empty`;\n });\n const listEmpty = computed(() => listEntries().length === 0);\n\n const nav = createTabindexNavigator(selectedItem, { count: () => listEntries().length }, \"wrap\");\n\n const playerParams = computed(() => {\n const menuData = data();\n if (menuData?.playerStats) return menuData.playerStats;\n if (menuData?.playerParams) return menuData.playerParams;\n return currentPlayer()?._param?.() || {};\n });\n const statOrder = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const statLabels = {\n atk: \"ATK\",\n def: \"DEF\",\n pdef: \"PDEF\",\n sdef: \"SDEF\",\n str: \"STR\",\n dex: \"DEX\",\n int: \"INT\",\n agi: \"AGI\",\n maxHp: \"MAX HP\",\n maxSp: \"MAX SP\"\n };\n\n const getItemStats = (item) => {\n if (!item) return {};\n const stats = item.stats || item.params || {};\n if (Object.keys(stats).length) return stats;\n const keys = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const direct = {};\n keys.forEach((key) => {\n if (item[key] !== undefined) direct[key] = item[key];\n });\n return direct;\n };\n\n const buildStatsList = (deltaStats) => {\n const params = playerParams() || {};\n const orderedKeys = statOrder.filter((key) => deltaStats[key] !== undefined);\n const extraKeys = Object.keys(deltaStats).filter((key) => !statOrder.includes(key));\n const keys = orderedKeys.concat(extraKeys);\n const list = [];\n for (const key of keys) {\n const delta = deltaStats[key];\n if (delta === undefined || delta === 0) continue;\n let current = params[key];\n if (current === undefined && key === \"def\") current = params.pdef;\n const next = current !== undefined ? current + delta : undefined;\n list.push({\n key,\n label: statLabels[key] || key.toUpperCase(),\n delta,\n current,\n next\n });\n }\n return list;\n };\n\n const displayStats = computed(() => {\n const entry = currentEntry();\n const equipped = currentEquippedItem();\n if (!entry) return [];\n if (entry.kind === \"unequip\") {\n \n if (!equipped) return [];\n const stats = getItemStats(equipped);\n const delta = {};\n Object.keys(stats).forEach((key) => {\n delta[key] = -stats[key];\n });\n return buildStatsList(delta);\n }\n if (entry.kind === \"item\") {\n const equippedStats = getItemStats(equipped);\n const nextStats = getItemStats(entry);\n const delta = {};\n const keys = new Set([...Object.keys(nextStats), ...Object.keys(equippedStats)]);\n keys.forEach((key) => {\n delta[key] = (nextStats[key] || 0) - (equippedStats[key] || 0);\n });\n return buildStatsList(delta);\n }\n return [];\n });\n\n const applyEquipState = (slot, itemId, equip) => {\n const types = slotTypes(slot);\n const next = { ...equippedOverrides() };\n if (types.length) {\n safeEquips().forEach((item) => {\n if (!item) return;\n if (types.includes(item.type)) {\n next[item.id] = false;\n }\n });\n }\n if (itemId) {\n next[itemId] = equip;\n }\n equippedOverrides.set(next);\n };\n\n const commitSelection = (index) => {\n const entry = listEntries()[index];\n if (!entry) return;\n if (entry.kind === \"unequip\") {\n const equipped = currentEquippedItem();\n if (equipped && onInteraction) {\n onInteraction(\"equipItem\", { id: equipped.id, equip: false });\n }\n applyEquipState(currentSlot(), equipped?.id, false);\n return;\n }\n if (entry.kind === \"item\" && onInteraction) {\n if (!itemEquipped(entry)) {\n onInteraction(\"equipItem\", { id: entry.id, equip: true });\n }\n applyEquipState(currentSlot(), entry.id, true);\n }\n };\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index);\n selectedItem.set(0);\n }\n }\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index);\n commitSelection(index);\n }\n }\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId)\n });\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(-1);\n }\n },\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value - 1 + tabs.length) % tabs.length);\n selectedItem.set(0);\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value + 1) % tabs.length);\n selectedItem.set(0);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (!listEntries().length) return;\n commitSelection(selectedItem());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n effect(() => {\n const count = listEntries().length;\n if (!count) {\n selectedItem.set(0);\n return;\n }\n if (selectedItem() >= count) {\n selectedItem.set(count - 1);\n }\n });\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"equip-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/equip-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">Equip</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div>\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">\n <DOMSprite \n sheet={iconSheet(detailsItem()?.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n </div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">\n {detailsItem()?.name || currentSlot()?.label || \"Equip\"}\n </div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n {detailsItem()?.description || \"\"}\n </div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-ui-equip-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-ui-equip-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-ui-equip-stat-key\">{stat.label}</div>\n <div class=\"rpg-ui-equip-stat-value\">\n {stat.delta > 0 ? \"+\" : \"\"}{stat.delta}\n </div>\n @if (stat.current) {\n <div class=\"rpg-ui-equip-stat-current\">{stat.current} -> {stat.next}</div>\n }\n </div>\n }\n </div>\n }\n <div class=\"rpg-ui-menu-panel-details-meta\">\n <span>{equippedText()}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <div class=\"rpg-ui-menu-tabs\">\n @for ((tab,tabIndex) of slotList) {\n <div\n class=\"rpg-ui-menu-tab\"\n class={{active: selectedTab() === tabIndex}}\n tabindex={tabIndex}\n click={selectTab(tabIndex)}\n >{tab.label}</div>\n }\n </div>\n <Navigation tabindex={selectedItem} controls={controls}>\n @for ((entry,index) of listEntries) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedItem() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectItem(index)}\n >\n <div class=\"rpg-ui-menu-row-main\">\n <div class=\"rpg-ui-menu-row-icon\">\n @if (entry?.icon) {\n <DOMSprite \n sheet={iconSheet(entry.icon)} \n playing=\"default\" \n width=\"28px\"\n height=\"28px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <span>{entry.name}</span>\n </div>\n <span class=\"rpg-ui-menu-row-end\">{entry.tag || \"\"}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator, effect } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const keyboardControls = engine.globalConfig.keyboardControls;\n const currentPlayer = engine.scene.currentPlayer;\n\n const selectedTab = signal(0);\n const selectedItem = signal(0);\n const { data, onInteraction, onBack } = defineProps();\n\n const equips = computed(() => data().equips ?? data().items);\n const slots = computed(() => data().slots);\n\n const defaultSlots = [\n { id: \"weapon\", label: \"Weapon\", types: [\"weapon\"] },\n { id: \"armor\", label: \"Armor\", types: [\"armor\"] }\n ];\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const safeEquips = computed(() => {\n const list = resolveProp(equips);\n return Array.isArray(list) ? list : [];\n });\n const slotList = computed(() => {\n const list = resolveProp(slots);\n if (Array.isArray(list) && list.length) return list;\n return defaultSlots;\n });\n\n const currentSlot = computed(() => slotList()[selectedTab()]);\n\n const equippedIds = computed(() => {\n const equipped = currentPlayer().equipments?.() || [];\n return new Set(equipped.map((it) => it?.id?.() ?? it?.id ?? it?.name));\n });\n const equippedOverrides = signal({});\n\n effect(() => {\n const next = {};\n safeEquips().forEach((item) => {\n if (item?.id && typeof item.equipped === \"boolean\") {\n next[item.id] = item.equipped;\n }\n });\n equippedOverrides.set(next);\n });\n\n const itemEquipped = (item) => {\n if (!item) return false;\n const overrides = equippedOverrides();\n if (Object.prototype.hasOwnProperty.call(overrides, item.id)) {\n return overrides[item.id];\n }\n if (typeof item.equipped === \"boolean\") return item.equipped;\n return equippedIds().has(item.id);\n };\n\n const slotTypes = (slot) => {\n if (!slot) return [];\n if (Array.isArray(slot.types)) return slot.types;\n if (slot.type) return [slot.type];\n if (slot.id) return [slot.id];\n return [];\n };\n\n const slotItems = computed(() => {\n const slot = currentSlot();\n if (!slot) return [];\n const types = new Set(slotTypes(slot));\n return safeEquips().filter((item) => item && types.has(item.type));\n });\n\n const currentEquippedItem = computed(() => {\n const list = slotItems();\n return list.find((item) => itemEquipped(item)) || null;\n });\n\n const listEntries = computed(() => {\n const items = slotItems().map((item) => ({\n ...item,\n kind: \"item\",\n tag: itemEquipped(item) ? \"Equipped\" : \"\"\n }));\n const equipped = currentEquippedItem();\n if (!equipped) return items;\n return [\n {\n id: \"__unequip__\",\n name: \"Unequip\",\n description: \"Remove the current equipment\",\n kind: \"unequip\",\n tag: \"\"\n },\n ...items\n ];\n });\n\n const currentEntry = computed(() => listEntries()[selectedItem()]);\n const detailsItem = computed(() => {\n const entry = currentEntry();\n if (entry?.kind === \"item\") return entry;\n return currentEquippedItem();\n });\n\n const equippedText = computed(() => {\n const slot = currentSlot();\n if (!slot) return \"\";\n const equipped = currentEquippedItem();\n return equipped ? `${slot.label}: ${equipped.name}` : `${slot.label}: Empty`;\n });\n const listEmpty = computed(() => listEntries().length === 0);\n\n const nav = createTabindexNavigator(selectedItem, { count: () => listEntries().length }, \"wrap\");\n\n const playerParams = computed(() => {\n const menuData = data();\n if (menuData?.playerStats) return menuData.playerStats;\n if (menuData?.playerParams) return menuData.playerParams;\n return currentPlayer()?._param?.() || {};\n });\n const statOrder = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const statLabels = {\n atk: \"ATK\",\n def: \"DEF\",\n pdef: \"PDEF\",\n sdef: \"SDEF\",\n str: \"STR\",\n dex: \"DEX\",\n int: \"INT\",\n agi: \"AGI\",\n maxHp: \"MAX HP\",\n maxSp: \"MAX SP\"\n };\n\n const getItemStats = (item) => {\n if (!item) return {};\n const stats = item.stats || item.params || {};\n if (Object.keys(stats).length) return stats;\n const keys = [\"atk\", \"def\", \"pdef\", \"sdef\", \"str\", \"dex\", \"int\", \"agi\", \"maxHp\", \"maxSp\"];\n const direct = {};\n keys.forEach((key) => {\n if (item[key] !== undefined) direct[key] = item[key];\n });\n return direct;\n };\n\n const buildStatsList = (deltaStats) => {\n const params = playerParams() || {};\n const orderedKeys = statOrder.filter((key) => deltaStats[key] !== undefined);\n const extraKeys = Object.keys(deltaStats).filter((key) => !statOrder.includes(key));\n const keys = orderedKeys.concat(extraKeys);\n const list = [];\n for (const key of keys) {\n const delta = deltaStats[key];\n if (delta === undefined || delta === 0) continue;\n let current = params[key];\n if (current === undefined && key === \"def\") current = params.pdef;\n const next = current !== undefined ? current + delta : undefined;\n list.push({\n key,\n label: statLabels[key] || key.toUpperCase(),\n delta,\n current,\n next\n });\n }\n return list;\n };\n\n const displayStats = computed(() => {\n const entry = currentEntry();\n const equipped = currentEquippedItem();\n if (!entry) return [];\n if (entry.kind === \"unequip\") {\n \n if (!equipped) return [];\n const stats = getItemStats(equipped);\n const delta = {};\n Object.keys(stats).forEach((key) => {\n delta[key] = -stats[key];\n });\n return buildStatsList(delta);\n }\n if (entry.kind === \"item\") {\n const equippedStats = getItemStats(equipped);\n const nextStats = getItemStats(entry);\n const delta = {};\n const keys = new Set([...Object.keys(nextStats), ...Object.keys(equippedStats)]);\n keys.forEach((key) => {\n delta[key] = (nextStats[key] || 0) - (equippedStats[key] || 0);\n });\n return buildStatsList(delta);\n }\n return [];\n });\n\n const applyEquipState = (slot, itemId, equip) => {\n const types = slotTypes(slot);\n const next = { ...equippedOverrides() };\n if (types.length) {\n safeEquips().forEach((item) => {\n if (!item) return;\n if (types.includes(item.type)) {\n next[item.id] = false;\n }\n });\n }\n if (itemId) {\n next[itemId] = equip;\n }\n equippedOverrides.set(next);\n };\n\n const commitSelection = (index) => {\n const entry = listEntries()[index];\n if (!entry) return;\n if (entry.kind === \"unequip\") {\n const equipped = currentEquippedItem();\n if (equipped && onInteraction) {\n onInteraction(\"equipItem\", { id: equipped.id, equip: false });\n }\n applyEquipState(currentSlot(), equipped?.id, false);\n return;\n }\n if (entry.kind === \"item\" && onInteraction) {\n if (!itemEquipped(entry)) {\n onInteraction(\"equipItem\", { id: entry.id, equip: true });\n }\n applyEquipState(currentSlot(), entry.id, true);\n }\n };\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index);\n selectedItem.set(0);\n }\n }\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index);\n commitSelection(index);\n }\n }\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId)\n });\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(-1);\n }\n },\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value - 1 + tabs.length) % tabs.length);\n selectedItem.set(0);\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n const tabs = slotList();\n if (!tabs.length) return;\n selectedTab.update((value) => (value + 1) % tabs.length);\n selectedItem.set(0);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!listEntries().length) return;\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (!listEntries().length) return;\n commitSelection(selectedItem());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n effect(() => {\n const count = listEntries().length;\n if (!count) {\n selectedItem.set(0);\n return;\n }\n if (selectedItem() >= count) {\n selectedItem.set(count - 1);\n }\n });\n</script>\n"],"mappings":"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"}
|
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import { inject } from "../../../core/inject.js";
|
|
2
|
+
import { getKeyboardControlBind } from "../../../services/actionInput.js";
|
|
2
3
|
import { RpgClientEngine } from "../../../RpgClientEngine.js";
|
|
3
4
|
import { DOMContainer, DOMElement, h, signal, useDefineProps, useProps } from "canvasengine";
|
|
4
5
|
//#region src/components/gui/menu/exit-menu.ce
|
|
5
6
|
function component($$props) {
|
|
6
7
|
useProps($$props);
|
|
7
8
|
const defineProps = useDefineProps($$props);
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
const keyboardControls = inject(RpgClientEngine).globalConfig.keyboardControls;
|
|
10
|
+
const { onConfirm, onBack } = defineProps();
|
|
10
11
|
return h(DOMContainer, {
|
|
11
12
|
width: "100%",
|
|
12
13
|
height: "100%",
|
|
13
14
|
controls: signal({
|
|
14
15
|
action: {
|
|
15
|
-
bind: keyboardControls.action,
|
|
16
|
-
keyDown
|
|
16
|
+
bind: getKeyboardControlBind(keyboardControls.action),
|
|
17
|
+
keyDown() {
|
|
17
18
|
if (onConfirm) onConfirm();
|
|
18
19
|
}
|
|
19
20
|
},
|
|
20
21
|
escape: {
|
|
21
22
|
bind: keyboardControls.escape,
|
|
22
|
-
keyDown
|
|
23
|
+
keyDown() {
|
|
23
24
|
if (onBack) onBack();
|
|
24
25
|
}
|
|
25
26
|
},
|
|
@@ -48,7 +49,8 @@ function component($$props) {
|
|
|
48
49
|
textContent: "Press Action to confirm or Escape to go back.\n "
|
|
49
50
|
})]))]));
|
|
50
51
|
}
|
|
52
|
+
var __ce_component = component;
|
|
51
53
|
//#endregion
|
|
52
|
-
export {
|
|
54
|
+
export { __ce_component as default };
|
|
53
55
|
|
|
54
56
|
//# sourceMappingURL=exit-menu.ce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/exit-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={controls}>\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">Exit</div>\n <div class=\"rpg-ui-menu-panel-body\">\n <div class=\"rpg-ui-menu-panel-details\">\n <div class=\"rpg-ui-menu-panel-details-title\">Leave the game?</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n Press Action to confirm or Escape to go back.\n </div>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const keyboardControls = engine.globalConfig.keyboardControls;\n const { onConfirm, onBack } = defineProps();\n\n const controls = signal({\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (onConfirm) onConfirm();\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n</script>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"exit-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/exit-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={controls}>\n <div class=\"rpg-ui-menu-panel rpg-ui-panel\">\n <div class=\"rpg-ui-menu-panel-header\">Exit</div>\n <div class=\"rpg-ui-menu-panel-body\">\n <div class=\"rpg-ui-menu-panel-details\">\n <div class=\"rpg-ui-menu-panel-details-title\">Leave the game?</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n Press Action to confirm or Escape to go back.\n </div>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const keyboardControls = engine.globalConfig.keyboardControls;\n const { onConfirm, onBack } = defineProps();\n\n const controls = signal({\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (onConfirm) onConfirm();\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (onBack) onBack();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n</script>\n"],"mappings":";;;;;AAUM,SAAO,UAAA,SAAA;CACJ,SAAA,OAAA;CACP,MAAY,cAAA,eAAA,OAAA;CAEd,MAAC,mBAAA,OAAA,eAAM,EAAA,aAAA;CACP,MAAI,EAAA,WAAe,WAAS,YAAa;CAqBjC,OADI,EAAA,cAAA;EAAA,OAAA;EAAA,QAAA;EAAA,UAnBC,OAAS;GAClB,QAAQ;IACR,MAAS,uBAAwB,iBAAgB,MAAA;;KAE3C,IAAM,WACN,UAAgB;IACtB;;GAEA,QAAM;IACF,MAAM,iBAAE;IACR,UAAU;KACN,IAAA,QACI,OAAI;IACZ;GACJ;GACA,SAAI,EACA,SAAS,KACb;EACJ,CACY;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iCAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,2BAAA;EAAA,aAAA;CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,yBAAA;CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,4BAAA;CAAA,GAAA,CAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,kCAAA;EAAA,aAAA;CAAA,CAAA,GAAA,EAAA,YAAA;EAAA,SAAA;EAAA,OAAA,EAAA,OAAA,iCAAA;EAAA,aAAA;CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACH;AACH;AAEA,IAAE,iBAAA"}
|