@rpgjs/client 5.0.0-beta.27 → 5.0.0-beta.28
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 +27 -0
- package/dist/Game/AnimationManager.js.map +1 -1
- package/dist/Game/ClientVisuals.js.map +1 -1
- package/dist/Game/Map.js +2 -2
- package/dist/Game/Map.js.map +1 -1
- package/dist/Game/Object.js +1 -1
- package/dist/Game/Object.js.map +1 -1
- package/dist/Game/ProjectileManager.js.map +1 -1
- package/dist/Gui/Gui.d.ts +34 -15
- package/dist/Gui/Gui.js +40 -22
- package/dist/Gui/Gui.js.map +1 -1
- package/dist/Gui/NotificationManager.js.map +1 -1
- package/dist/RpgClient.d.ts +3 -64
- package/dist/RpgClientEngine.js +1 -1
- package/dist/RpgClientEngine.js.map +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.133.0 → _@oxc-project_runtime@0.139.0}/helpers/esm/decorate.js +2 -2
- package/dist/_virtual/{_@oxc-project_runtime@0.133.0 → _@oxc-project_runtime@0.139.0}/helpers/esm/decorateMetadata.js +2 -2
- package/dist/components/animations/animation.ce.js.map +1 -1
- package/dist/components/animations/fx.ce.js.map +1 -1
- package/dist/components/animations/hit.ce.js.map +1 -1
- package/dist/components/character-hitbox.js +1 -1
- package/dist/components/character.ce.js +3 -1
- package/dist/components/character.ce.js.map +1 -1
- package/dist/components/dynamics/bar.ce.js.map +1 -1
- package/dist/components/dynamics/image.ce.js.map +1 -1
- package/dist/components/dynamics/parse-value.js +1 -1
- package/dist/components/dynamics/parse-value.js.map +1 -1
- package/dist/components/dynamics/shape-utils.js +1 -1
- package/dist/components/dynamics/shape.ce.js.map +1 -1
- package/dist/components/dynamics/text.ce.js.map +1 -1
- package/dist/components/gui/box.ce.js.map +1 -1
- package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
- package/dist/components/gui/gameover.ce.js.map +1 -1
- package/dist/components/gui/hud/hud.ce.js.map +1 -1
- package/dist/components/gui/index.js +17 -16
- package/dist/components/gui/input-field.ce.js.map +1 -1
- package/dist/components/gui/input.ce.js.map +1 -1
- package/dist/components/gui/menu/equip-menu.ce.js +1 -1
- package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
- package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
- package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
- package/dist/components/gui/notification/notification.ce.js.map +1 -1
- package/dist/components/gui/save-load.ce.js.map +1 -1
- package/dist/components/gui/shop/shop.ce.js +4 -2
- package/dist/components/gui/shop/shop.ce.js.map +1 -1
- package/dist/components/gui/title-screen.ce.js.map +1 -1
- package/dist/components/index.js +4 -3
- package/dist/components/interaction-components.ce.js.map +1 -1
- package/dist/components/player-components-utils.js +1 -1
- package/dist/components/player-components-utils.js.map +1 -1
- package/dist/components/player-components.ce.js.map +1 -1
- package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
- package/dist/components/prebuilt/index.js +3 -2
- package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
- package/dist/components/scenes/canvas.ce.js.map +1 -1
- package/dist/components/scenes/draw-map.ce.js.map +1 -1
- package/dist/components/scenes/event-layer.ce.js.map +1 -1
- package/dist/components/scenes/weather-tick-lifecycle.js.map +1 -1
- package/dist/core/setup.js.map +1 -1
- package/dist/module.js.map +1 -1
- package/dist/node_modules/.pnpm/@signe_di@3.1.0/node_modules/@signe/di/dist/index.js +1 -1
- package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js +1 -1
- package/dist/node_modules/.pnpm/@signe_reactive@3.1.0/node_modules/@signe/reactive/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js +2 -2
- package/dist/node_modules/.pnpm/@signe_room@3.1.0_react@19.2.7/node_modules/@signe/room/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/client/index.js +1 -1
- package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js +1 -1
- package/dist/node_modules/.pnpm/@signe_sync@3.1.0_react@19.2.7/node_modules/@signe/sync/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js +2 -2
- package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/index.js.map +1 -1
- package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js +1 -1
- package/dist/node_modules/.pnpm/partysocket@1.2.0_react@19.2.7/node_modules/partysocket/dist/ws.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js +7 -7
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/ZodError.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/errors.js +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js +2 -2
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/errorUtil.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/parseUtil.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/helpers/util.js.map +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js +1 -1
- package/dist/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/types.js.map +1 -1
- package/dist/presets/faceset.js.map +1 -1
- package/dist/presets/rmspritesheet.js.map +1 -1
- package/dist/services/cameraFollow.js +1 -1
- package/dist/services/cameraFollow.js.map +1 -1
- package/dist/services/interactions.js.map +1 -1
- package/dist/services/mapStreaming.js.map +1 -1
- package/dist/services/mmorpg-connection.js +1 -1
- package/dist/services/mmorpg-connection.js.map +1 -1
- package/dist/services/mmorpg.js.map +1 -1
- package/dist/services/pointerContext.js +2 -1
- package/dist/services/pointerContext.js.map +1 -1
- package/dist/services/save.js.map +1 -1
- package/dist/services/standalone.js.map +1 -1
- package/dist/utils/getEntityProp.js.map +1 -1
- package/dist/utils/syncHitbox.js.map +1 -1
- package/package.json +9 -9
- package/src/Gui/Gui.spec.ts +26 -1
- package/src/Gui/Gui.ts +101 -37
- package/src/RpgClient.ts +2 -63
- package/src/public-api-types.spec.ts +19 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/main-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={menuControls}>\n <div class=\"rpg-ui-main-menu rpg-anim-fade-in\" click={closeMenuFromPointer}>\n <div class=\"rpg-ui-main-menu-backdrop\"></div>\n <button class=\"rpg-ui-close-button\" type=\"button\" title=\"Close\" aria-label=\"Close menu\" click={closeMenuFromPointer}>x</button>\n <div class=\"rpg-ui-main-menu-layout\" click={stopEvent}>\n <div class=\"rpg-ui-main-menu-left rpg-ui-menu rpg-ui-panel\">\n <div class=\"rpg-ui-menu-header\">{t(\"rpg.menu.title\")}</div>\n <div class=\"rpg-ui-main-menu-list\">\n @for ((entry,index) of menuEntries()) {\n <div\n class=\"rpg-ui-menu-item\"\n class={{disabled: isMenuDisabled(entry)}}\n data-selected={selectedMenu() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectMenu(index)}\n >{entry.label}</div>\n }\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-right\">\n @if (view() === \"menu\") {\n <div class=\"rpg-ui-panel\">\n <div class=\"rpg-ui-main-menu-section-title\">{t(\"rpg.menu.status\")}</div>\n <div class=\"rpg-ui-main-menu-status-card\">\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">{t(\"rpg.menu.level\")}</div>\n <div class=\"rpg-ui-main-menu-status-value\">{level()}</div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">{t(\"rpg.menu.gold\")}</div>\n <div class=\"rpg-ui-main-menu-status-value\">{gold()}</div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">HP {hp()}/{hpMax()}</div>\n <div class=\"rpg-ui-main-menu-status-bar\">\n <div class=\"rpg-ui-main-menu-status-bar-fill hp\" style={{width: hpPercent}}></div>\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">SP {sp()}/{spMax()}</div>\n <div class=\"rpg-ui-main-menu-status-bar\">\n <div class=\"rpg-ui-main-menu-status-bar-fill sp\" style={{width: spPercent}}></div>\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\" style={{gridColumn: \"span 2\"}}>\n <div class=\"rpg-ui-main-menu-status-label\">EXP {exp()}/{expForNextlevel()}</div>\n <div class=\"rpg-ui-main-menu-status-bar\">\n <div class=\"rpg-ui-main-menu-status-bar-fill exp\" style={{width: expPercent}}></div>\n </div>\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-section-title\">{t(\"rpg.menu.parameters\")}</div>\n <div class=\"rpg-ui-main-menu-params\">\n @for ((param,index) of paramsList) {\n <div class=\"rpg-ui-main-menu-param\">\n <span>{param.label}</span>\n <span>{param.value}</span>\n </div>\n }\n </div>\n </div>\n }\n @if (view() === \"items\") {\n <ItemsMenu data={data} onInteraction={onInteraction} onBack={goBack} />\n }\n @if (view() === \"skills\") {\n <SkillsMenu data={data} onBack={goBack} />\n }\n @if (view() === \"equip\") {\n <EquipMenu data={data} onInteraction={onInteraction} onBack={goBack} />\n }\n @if (view() === \"options\") {\n <OptionsMenu onBack={goBack} />\n }\n @if (view() === \"exit\") {\n <ExitMenu onConfirm={confirmExit} onBack={goBack} />\n }\n </div>\n </div>\n @if (saveOverlay) {\n <div class=\"rpg-ui-main-menu-overlay\">\n <div class=\"rpg-ui-main-menu-overlay-backdrop\" click={closeSaveOverlayFromPointer}></div>\n <div class=\"rpg-ui-main-menu-overlay-content\" click={stopEvent}>\n <SaveLoadComponent\n data={saveLoadData}\n onFinish={closeSaveOverlay}\n />\n </div>\n </div>\n }\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, effect, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import SaveLoadComponent from \"../save-load.ce\";\n import ItemsMenu from \"./items-menu.ce\";\n import SkillsMenu from \"./skills-menu.ce\";\n import EquipMenu from \"./equip-menu.ce\";\n import OptionsMenu from \"./options-menu.ce\";\n import ExitMenu from \"./exit-menu.ce\";\n import { getEntityProp } from \"../../../utils/getEntityProp\";\n import { delay } from \"@rpgjs/common\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const currentPlayer = engine.scene.currentPlayer;\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const { data, onFinish, onInteraction } = defineProps();\n const { menus, items, skills, equips, saveLoad } = data();\n\n const defaultMenus = [\n { id: \"items\", label: t(\"rpg.menu.items\") },\n { id: \"skills\", label: t(\"rpg.menu.skills\") },\n { id: \"equip\", label: t(\"rpg.menu.equip\") },\n { id: \"options\", label: t(\"rpg.menu.options\") },\n { id: \"save\", label: t(\"rpg.menu.save\") },\n { id: \"exit\", label: t(\"rpg.menu.exit\") }\n ];\n\n const menuEntries = computed(() => {\n if (menus && Array.isArray(menus) && menus.length) return menus;\n return defaultMenus;\n });\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const saveLoadData = computed(() => resolveProp(saveLoad) || {});\n const saveLoadMode = computed(() => saveLoadData().mode || \"load\");\n const saveLoadSlots = computed(() => saveLoadData().slots || []);\n const saveLoadCanSave = computed(() => saveLoadData().canSave !== false);\n\n const isMenuDisabled = (entry) => {\n if (!entry) return true;\n if (entry.disabled) return true;\n if (entry.enabled === false) return true;\n if (entry.id === \"save\" && !saveLoadCanSave()) return true;\n return false;\n };\n\n const selectedMenu = signal(0);\n const view = signal(\"menu\");\n const saveOverlay = signal(false);\n\n const selectableIndexes = computed(() => {\n const entries = menuEntries();\n return entries\n .map((entry, index) => (isMenuDisabled(entry) ? null : index))\n .filter((value) => value !== null);\n });\n\n effect(() => {\n const available = selectableIndexes();\n if (!available.length) return;\n const current = selectedMenu();\n if (!available.includes(current)) {\n selectedMenu.set(available[0]);\n }\n });\n\n const moveMenu = (delta) => {\n const available = selectableIndexes();\n if (!available.length) return;\n const current = selectedMenu();\n const currentIndex = Math.max(0, available.indexOf(current));\n const nextIndex = (currentIndex + delta + available.length) % available.length;\n selectedMenu.set(available[nextIndex]);\n };\n\n function selectMenu(index) {\n return function() {\n selectedMenu.set(index);\n openMenu();\n }\n }\n\n const openMenu = () => {\n const entry = menuEntries()[selectedMenu()];\n if (!entry || isMenuDisabled(entry)) return;\n if (entry.id === \"save\") {\n saveOverlay.set(true);\n return;\n }\n if (entry.id === \"exit\") {\n view.set(\"exit\");\n return;\n }\n view.set(entry.id);\n };\n\n const goBack = () => {\n delay(() => {\n view.set(\"menu\");\n });\n };\n\n const closeSaveOverlay = () => {\n delay(() => {\n saveOverlay.set(false);\n view.set(\"menu\");\n });\n };\n\n const stopEvent = (event) => {\n event?.stopPropagation?.();\n };\n\n const closeSaveOverlayFromPointer = (event) => {\n stopEvent(event);\n closeSaveOverlay();\n };\n\n const closeMenu = () => {\n if (saveOverlay()) {\n closeSaveOverlay();\n return;\n }\n onFinish();\n };\n\n const closeMenuFromPointer = (event) => {\n stopEvent(event);\n closeMenu();\n };\n\n const confirmExit = () => {\n if (onInteraction) onInteraction(\"exit\");\n };\n\n const hp = getEntityProp(currentPlayer, \"hp\");\n const hpMax = getEntityProp(currentPlayer, \"params.maxHp\");\n const sp = getEntityProp(currentPlayer, \"sp\");\n const spMax = getEntityProp(currentPlayer, \"params.maxSp\");\n const level = getEntityProp(currentPlayer, \"level\");\n const exp = getEntityProp(currentPlayer, \"exp\");\n const gold = getEntityProp(currentPlayer, \"gold\");\n const expForNextlevel = computed(() => data().expForNextlevel || 0);\n const hpPercent = computed(() => {\n const max = hpMax() || 1;\n return `${Math.max(0, Math.min(100, (hp() / max) * 100))}%`;\n });\n const spPercent = computed(() => {\n const max = spMax() || 1;\n return `${Math.max(0, Math.min(100, (sp() / max) * 100))}%`;\n });\n const expPercent = computed(() => {\n const max = expForNextlevel() || 1;\n return `${Math.max(0, Math.min(100, (exp() / max) * 100))}%`;\n });\n\n const paramsList = computed(() => {\n return [\n { label: \"ATK\", value: data().playerStats.atk },\n { label: \"PDEF\", value: data().playerStats.pdef },\n { label: \"SDEF\", value: data().playerStats.sdef },\n { label: \"STR\", value: data().playerStats.str },\n { label: \"DEX\", value: data().playerStats.dex },\n { label: \"INT\", value: data().playerStats.int },\n { label: \"AGI\", value: data().playerStats.agi }\n ]\n }\n\n const menuControls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") return;\n moveMenu(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") return;\n moveMenu(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") return;\n openMenu();\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") {\n goBack();\n return;\n }\n onFinish()\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n mount((element) => {\n const inputLockToken = {};\n const previousStopProcessingInput = engine.stopProcessingInput;\n const previousGamePause = engine.gamePause();\n engine.__rpgMainMenuInputLock = inputLockToken;\n engine.stopProcessingInput = true;\n engine.gamePause.set(true);\n return () => {\n delay(() => {\n if (engine.__rpgMainMenuInputLock !== inputLockToken) return;\n engine.__rpgMainMenuInputLock = undefined;\n engine.stopProcessingInput = previousStopProcessingInput;\n engine.gamePause.set(previousGamePause);\n });\n }\n });\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main-menu.ce.js","names":["ItemsMenu","SkillsMenu","EquipMenu","OptionsMenu","ExitMenu","SaveLoadComponent"],"sources":["../../../../src/components/gui/menu/main-menu.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={menuControls}>\n <div class=\"rpg-ui-main-menu rpg-anim-fade-in\" click={closeMenuFromPointer}>\n <div class=\"rpg-ui-main-menu-backdrop\"></div>\n <button class=\"rpg-ui-close-button\" type=\"button\" title=\"Close\" aria-label=\"Close menu\" click={closeMenuFromPointer}>x</button>\n <div class=\"rpg-ui-main-menu-layout\" click={stopEvent}>\n <div class=\"rpg-ui-main-menu-left rpg-ui-menu rpg-ui-panel\">\n <div class=\"rpg-ui-menu-header\">{t(\"rpg.menu.title\")}</div>\n <div class=\"rpg-ui-main-menu-list\">\n @for ((entry,index) of menuEntries()) {\n <div\n class=\"rpg-ui-menu-item\"\n class={{disabled: isMenuDisabled(entry)}}\n data-selected={selectedMenu() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectMenu(index)}\n >{entry.label}</div>\n }\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-right\">\n @if (view() === \"menu\") {\n <div class=\"rpg-ui-panel\">\n <div class=\"rpg-ui-main-menu-section-title\">{t(\"rpg.menu.status\")}</div>\n <div class=\"rpg-ui-main-menu-status-card\">\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">{t(\"rpg.menu.level\")}</div>\n <div class=\"rpg-ui-main-menu-status-value\">{level()}</div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">{t(\"rpg.menu.gold\")}</div>\n <div class=\"rpg-ui-main-menu-status-value\">{gold()}</div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">HP {hp()}/{hpMax()}</div>\n <div class=\"rpg-ui-main-menu-status-bar\">\n <div class=\"rpg-ui-main-menu-status-bar-fill hp\" style={{width: hpPercent}}></div>\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\">\n <div class=\"rpg-ui-main-menu-status-label\">SP {sp()}/{spMax()}</div>\n <div class=\"rpg-ui-main-menu-status-bar\">\n <div class=\"rpg-ui-main-menu-status-bar-fill sp\" style={{width: spPercent}}></div>\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-status-block\" style={{gridColumn: \"span 2\"}}>\n <div class=\"rpg-ui-main-menu-status-label\">EXP {exp()}/{expForNextlevel()}</div>\n <div class=\"rpg-ui-main-menu-status-bar\">\n <div class=\"rpg-ui-main-menu-status-bar-fill exp\" style={{width: expPercent}}></div>\n </div>\n </div>\n </div>\n <div class=\"rpg-ui-main-menu-section-title\">{t(\"rpg.menu.parameters\")}</div>\n <div class=\"rpg-ui-main-menu-params\">\n @for ((param,index) of paramsList) {\n <div class=\"rpg-ui-main-menu-param\">\n <span>{param.label}</span>\n <span>{param.value}</span>\n </div>\n }\n </div>\n </div>\n }\n @if (view() === \"items\") {\n <ItemsMenu data={data} onInteraction={onInteraction} onBack={goBack} />\n }\n @if (view() === \"skills\") {\n <SkillsMenu data={data} onBack={goBack} />\n }\n @if (view() === \"equip\") {\n <EquipMenu data={data} onInteraction={onInteraction} onBack={goBack} />\n }\n @if (view() === \"options\") {\n <OptionsMenu onBack={goBack} />\n }\n @if (view() === \"exit\") {\n <ExitMenu onConfirm={confirmExit} onBack={goBack} />\n }\n </div>\n </div>\n @if (saveOverlay) {\n <div class=\"rpg-ui-main-menu-overlay\">\n <div class=\"rpg-ui-main-menu-overlay-backdrop\" click={closeSaveOverlayFromPointer}></div>\n <div class=\"rpg-ui-main-menu-overlay-content\" click={stopEvent}>\n <SaveLoadComponent\n data={saveLoadData}\n onFinish={closeSaveOverlay}\n />\n </div>\n </div>\n }\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, effect, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import SaveLoadComponent from \"../save-load.ce\";\n import ItemsMenu from \"./items-menu.ce\";\n import SkillsMenu from \"./skills-menu.ce\";\n import EquipMenu from \"./equip-menu.ce\";\n import OptionsMenu from \"./options-menu.ce\";\n import ExitMenu from \"./exit-menu.ce\";\n import { getEntityProp } from \"../../../utils/getEntityProp\";\n import { delay } from \"@rpgjs/common\";\n import { getKeyboardControlBind } from \"../../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const currentPlayer = engine.scene.currentPlayer;\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const { data, onFinish, onInteraction } = defineProps();\n const { menus, items, skills, equips, saveLoad } = data();\n\n const defaultMenus = [\n { id: \"items\", label: t(\"rpg.menu.items\") },\n { id: \"skills\", label: t(\"rpg.menu.skills\") },\n { id: \"equip\", label: t(\"rpg.menu.equip\") },\n { id: \"options\", label: t(\"rpg.menu.options\") },\n { id: \"save\", label: t(\"rpg.menu.save\") },\n { id: \"exit\", label: t(\"rpg.menu.exit\") }\n ];\n\n const menuEntries = computed(() => {\n if (menus && Array.isArray(menus) && menus.length) return menus;\n return defaultMenus;\n });\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const saveLoadData = computed(() => resolveProp(saveLoad) || {});\n const saveLoadMode = computed(() => saveLoadData().mode || \"load\");\n const saveLoadSlots = computed(() => saveLoadData().slots || []);\n const saveLoadCanSave = computed(() => saveLoadData().canSave !== false);\n\n const isMenuDisabled = (entry) => {\n if (!entry) return true;\n if (entry.disabled) return true;\n if (entry.enabled === false) return true;\n if (entry.id === \"save\" && !saveLoadCanSave()) return true;\n return false;\n };\n\n const selectedMenu = signal(0);\n const view = signal(\"menu\");\n const saveOverlay = signal(false);\n\n const selectableIndexes = computed(() => {\n const entries = menuEntries();\n return entries\n .map((entry, index) => (isMenuDisabled(entry) ? null : index))\n .filter((value) => value !== null);\n });\n\n effect(() => {\n const available = selectableIndexes();\n if (!available.length) return;\n const current = selectedMenu();\n if (!available.includes(current)) {\n selectedMenu.set(available[0]);\n }\n });\n\n const moveMenu = (delta) => {\n const available = selectableIndexes();\n if (!available.length) return;\n const current = selectedMenu();\n const currentIndex = Math.max(0, available.indexOf(current));\n const nextIndex = (currentIndex + delta + available.length) % available.length;\n selectedMenu.set(available[nextIndex]);\n };\n\n function selectMenu(index) {\n return function() {\n selectedMenu.set(index);\n openMenu();\n }\n }\n\n const openMenu = () => {\n const entry = menuEntries()[selectedMenu()];\n if (!entry || isMenuDisabled(entry)) return;\n if (entry.id === \"save\") {\n saveOverlay.set(true);\n return;\n }\n if (entry.id === \"exit\") {\n view.set(\"exit\");\n return;\n }\n view.set(entry.id);\n };\n\n const goBack = () => {\n delay(() => {\n view.set(\"menu\");\n });\n };\n\n const closeSaveOverlay = () => {\n delay(() => {\n saveOverlay.set(false);\n view.set(\"menu\");\n });\n };\n\n const stopEvent = (event) => {\n event?.stopPropagation?.();\n };\n\n const closeSaveOverlayFromPointer = (event) => {\n stopEvent(event);\n closeSaveOverlay();\n };\n\n const closeMenu = () => {\n if (saveOverlay()) {\n closeSaveOverlay();\n return;\n }\n onFinish();\n };\n\n const closeMenuFromPointer = (event) => {\n stopEvent(event);\n closeMenu();\n };\n\n const confirmExit = () => {\n if (onInteraction) onInteraction(\"exit\");\n };\n\n const hp = getEntityProp(currentPlayer, \"hp\");\n const hpMax = getEntityProp(currentPlayer, \"params.maxHp\");\n const sp = getEntityProp(currentPlayer, \"sp\");\n const spMax = getEntityProp(currentPlayer, \"params.maxSp\");\n const level = getEntityProp(currentPlayer, \"level\");\n const exp = getEntityProp(currentPlayer, \"exp\");\n const gold = getEntityProp(currentPlayer, \"gold\");\n const expForNextlevel = computed(() => data().expForNextlevel || 0);\n const hpPercent = computed(() => {\n const max = hpMax() || 1;\n return `${Math.max(0, Math.min(100, (hp() / max) * 100))}%`;\n });\n const spPercent = computed(() => {\n const max = spMax() || 1;\n return `${Math.max(0, Math.min(100, (sp() / max) * 100))}%`;\n });\n const expPercent = computed(() => {\n const max = expForNextlevel() || 1;\n return `${Math.max(0, Math.min(100, (exp() / max) * 100))}%`;\n });\n\n const paramsList = computed(() => {\n return [\n { label: \"ATK\", value: data().playerStats.atk },\n { label: \"PDEF\", value: data().playerStats.pdef },\n { label: \"SDEF\", value: data().playerStats.sdef },\n { label: \"STR\", value: data().playerStats.str },\n { label: \"DEX\", value: data().playerStats.dex },\n { label: \"INT\", value: data().playerStats.int },\n { label: \"AGI\", value: data().playerStats.agi }\n ]\n }\n\n const menuControls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") return;\n moveMenu(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") return;\n moveMenu(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") return;\n openMenu();\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (saveOverlay()) return;\n if (view() !== \"menu\") {\n goBack();\n return;\n }\n onFinish()\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n mount((element) => {\n const inputLockToken = {};\n const previousStopProcessingInput = engine.stopProcessingInput;\n const previousGamePause = engine.gamePause();\n engine.__rpgMainMenuInputLock = inputLockToken;\n engine.stopProcessingInput = true;\n engine.gamePause.set(true);\n return () => {\n delay(() => {\n if (engine.__rpgMainMenuInputLock !== inputLockToken) return;\n engine.__rpgMainMenuInputLock = undefined;\n engine.stopProcessingInput = previousStopProcessingInput;\n engine.gamePause.set(previousGamePause);\n });\n }\n });\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/options-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\">{t(\"rpg.menu.options\")}</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\">{t(\"rpg.menu.options\")}</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n {t(\"rpg.menu.options-help\")}\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 { t } = engine.i18n();\n const keyboardControls = engine.globalConfig.keyboardControls;\n const { onBack } = defineProps();\n\n const controls = signal({\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":";;;;AASM,
|
|
1
|
+
{"version":3,"file":"options-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/options-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\">{t(\"rpg.menu.options\")}</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\">{t(\"rpg.menu.options\")}</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">\n {t(\"rpg.menu.options-help\")}\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 { t } = engine.i18n();\n const keyboardControls = engine.globalConfig.keyboardControls;\n const { onBack } = defineProps();\n\n const controls = signal({\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":";;;;AASM,SAAS,UAAU,SAAS;CACX,SAAS,OAAO;CAC/B,MAAM,cAAc,eAAe,OAAO;CACtB,eAAe,OAAO;CAC1C,MAAM,SAAS,OAAO,eAAe;CAC7C,MAAM,EAAE,MAAM,OAAO,KAAK;CAC1B,MAAM,mBAAmB,OAAO,aAAa;CAC7C,MAAM,EAAE,WAAW,YAAY;CAcvB,OADY,EAAE,cAAc;EAAE,OAAO;EAAQ,QAAQ;EAAQ,UAZpD,OAAO;GACpB,QAAQ;IACJ,MAAM,iBAAiB;IACvB,UAAU;KACN,IAAI,QACA,OAAO;IACf;GACJ;GACA,SAAS,EACL,SAAS,KACb;EACJ,CACsF;CAAE,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,iCAAiC;CAAE,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,2BAA2B;EAAG,aAAa,eAAe,EAAE,kBAAkB,CAAC;CAAE,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,yBAAyB;CAAE,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,4BAA4B;CAAE,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,kCAAkC;EAAG,aAAa,eAAe,EAAE,kBAAkB,CAAC;CAAE,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,iCAAiC;EAAG,aAAa,eAAe,EAAE,uBAAuB,CAAC;CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACluB;AACb;AAEA,IAAM,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skills-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/skills-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\">{t(\"rpg.menu.skills\")}</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n @if (currentSkill) {\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">✨</div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">{currentSkill()?.name}</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">{currentSkill()?.description || \"\"}</div>\n </div>\n </div>\n }\n </div>\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <Navigation tabindex={selectedSkill} controls={controls}>\n @for ((skill,index) of skills) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedSkill() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectSkill(index)}\n >\n <span>{skill.name}</span>\n <span class=\"rpg-ui-menu-row-end\">SP {skill.spCost ?? 0}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSkill = signal(0);\n const { data, onBack } = defineProps();\n const skills = computed(() => data().skills);\n\n const nav = createTabindexNavigator(selectedSkill, { count: () => skills().length }, \"wrap\");\n const currentSkill = computed(() => skills()[selectedSkill()]);\n\n function selectSkill(index) {\n return function() {\n selectedSkill.set(index);\n }\n }\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\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,SAAS,UAAU,
|
|
1
|
+
{"version":3,"file":"skills-menu.ce.js","names":[],"sources":["../../../../src/components/gui/menu/skills-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\">{t(\"rpg.menu.skills\")}</div>\n <div class=\"rpg-ui-menu-panel-body rpg-ui-menu-panel-body-stacked\">\n <div class=\"rpg-ui-menu-panel-details rpg-ui-panel\">\n @if (currentSkill) {\n <div class=\"rpg-ui-menu-panel-hero\">\n <div class=\"rpg-ui-menu-panel-hero-icon\">✨</div>\n <div>\n <div class=\"rpg-ui-menu-panel-details-title\">{currentSkill()?.name}</div>\n <div class=\"rpg-ui-menu-panel-details-desc\">{currentSkill()?.description || \"\"}</div>\n </div>\n </div>\n }\n </div>\n <div class=\"rpg-ui-menu-panel-list rpg-ui-menu rpg-ui-menu-panel-list-full\">\n <Navigation tabindex={selectedSkill} controls={controls}>\n @for ((skill,index) of skills) {\n <div\n class=\"rpg-ui-menu-item rpg-ui-menu-row\"\n data-selected={selectedSkill() === index ? \"true\" : \"false\"}\n tabindex={index}\n click={selectSkill(index)}\n >\n <span>{skill.name}</span>\n <span class=\"rpg-ui-menu-row-end\">SP {skill.spCost ?? 0}</span>\n </div>\n }\n </Navigation>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, createTabindexNavigator } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSkill = signal(0);\n const { data, onBack } = defineProps();\n const skills = computed(() => data().skills);\n\n const nav = createTabindexNavigator(selectedSkill, { count: () => skills().length }, \"wrap\");\n const currentSkill = computed(() => skills()[selectedSkill()]);\n\n function selectSkill(index) {\n return function() {\n selectedSkill.set(index);\n }\n }\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\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,SAAS,UAAU,SAAS;CACX,SAAS,OAAO;CAC/B,MAAM,cAAc,eAAe,OAAO;CACtB,eAAe,OAAO;CAC1C,MAAM,SAAS,OAAO,eAAe;CAC7C,MAAM,EAAE,MAAM,OAAO,KAAK;CAC1B,MAAM,mBAAmB,OAAO,aAAa;CAC7C,MAAM,gBAAgB,OAAO,CAAC;CAC9B,MAAM,EAAE,MAAM,WAAW,YAAY;CACrC,MAAM,SAAS,eAAe,KAAK,CAAC,CAAC,MAAM;CAC3C,MAAM,MAAM,wBAAwB,eAAe,EAAE,aAAa,OAAO,CAAC,CAAC,OAAO,GAAG,MAAM;CAC3F,MAAM,eAAe,eAAe,OAAO,CAAC,CAAC,cAAc,EAAE;CAC7D,SAAS,YAAY,OAAO;EACxB,OAAO,WAAY;GACf,cAAc,IAAI,KAAK;EAC3B;CACJ;CACA,MAAM,WAAW,OAAO;EACpB,IAAI;GACA,QAAQ;GACR,MAAM,iBAAiB;GACvB,UAAU;GACV,UAAU;IACN,IAAI,KAAK,EAAE;GACf;EACJ;EACA,MAAM;GACF,QAAQ;GACR,MAAM,iBAAiB;GACvB,UAAU;GACV,UAAU;IACN,IAAI,KAAK,CAAC;GACd;EACJ;EACA,QAAQ;GACJ,MAAM,iBAAiB;GACvB,UAAU;IACN,IAAI,QACA,OAAO;GACf;EACJ;EACA,SAAS,EACL,SAAS,KACb;CACJ,CAAC;CAEO,OADY,EAAE,cAAc;EAAE,OAAO;EAAQ,QAAQ;CAAO,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,iCAAiC;CAAE,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,2BAA2B;EAAG,aAAa,eAAe,EAAE,iBAAiB,CAAC;CAAE,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,wDAAwD;CAAE,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,yCAAyC;CAAE,GAAG,KAAK,oBAAoB,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,yBAAyB;CAAE,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,8BAA8B;EAAG,aAAa;CAAI,CAAC,GAAG,EAAE,YAAY,EAAE,SAAS,MAAM,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,kCAAkC;EAAG,aAAa,eAAe,aAAa,CAAC,EAAE,IAAI;CAAE,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,iCAAiC;EAAG,aAAa,eAAe,aAAa,CAAC,EAAE,eAAe,EAAE;CAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,iEAAiE;CAAE,GAAG,EAAE,YAAY;EAAE,UAAU;EAAyB;CAAS,GAAG,KAAK,SAAS,OAAO,UAAU,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO;GAAE,OAAO;GAAoC,iBAAiB,eAAe,cAAc,MAAM,QAAQ,SAAS,OAAO;GAAG,UAAU;GAAO,OAAO,YAAY,KAAK;EAAE;CAAE,GAAG,CAAC,EAAE,YAAY;EAAE,SAAS;EAAQ,aAAa,MAAM;CAAK,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAQ,OAAO,EAAE,OAAO,sBAAsB;EAAG,aAAa,QAAQ,MAAM;CAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACplD;AACb;AAEA,IAAM,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile.ce.js","names":[],"sources":["../../../../src/components/gui/mobile/mobile.ce"],"sourcesContent":["<Container flexDirection={rootDirection()} justifyContent=\"space-between\" alignItems=\"flex-end\" width=\"100%\" height=\"100%\" onBeforeDestroy={releaseJoystickControl}>\n <Container justifyContent=\"flex-end\" alignItems=\"flex-end\" gap={layoutGap()} margin={buttonsMargin()}>\n <Container display=\"flex\" flexDirection=\"row\" alignItems=\"flex-end\" gap={layoutGap()}>\n @if (showDashButton()) {\n <Container ...buttonContainerProps(\"dash\")>\n <dashButtonComponent() ...buttonProps(\"dash\") />\n </Container>\n }\n\n @if (showActionButton()) {\n <Container ...buttonContainerProps(\"action\")>\n <actionButtonComponent() ...buttonProps(\"action\") />\n </Container>\n }\n\n @if (showBackButton()) {\n <Container ...buttonContainerProps(\"back\")>\n <backButtonComponent() ...buttonProps(\"back\") />\n </Container>\n }\n\n </Container>\n </Container>\n\n <Container margin={joystickMargin()} alignItems=\"flex-end\">\n @if (showJoystick()) {\n <joystickComponent() ...joystickProps() />\n }\n </Container>\n</Container>\n\n<script>\n import { Button, Joystick, signal, mount, computed } from 'canvasengine'\n import { inject } from '../../../core/inject'\n\n const { data } = defineProps()\n const controlsInstance = signal(null)\n const options = computed(() => data?.() || {})\n const layout = computed(() => options().layout || {})\n const components = computed(() => options().components || {})\n const buttons = computed(() => options().buttons || {})\n const joystick = computed(() => options().joystick)\n\n const readButtonOption = (name) => buttons()[name]\n const buttonEnabled = (name, defaultValue) => {\n const option = readButtonOption(name)\n if (typeof option === \"boolean\") return option\n return option?.enabled ?? defaultValue\n }\n\n const showActionButton = computed(() => buttonEnabled(\"action\", true))\n const showBackButton = computed(() => buttonEnabled(\"back\", true))\n const showDashButton = computed(() => buttonEnabled(\"dash\", false))\n const showJoystick = computed(() => joystick() !== false)\n const joystickSide = computed(() => layout().joystickSide || \"right\")\n const rootDirection = computed(() => joystickSide() === \"left\" ? \"row-reverse\" : \"row\")\n const layoutGap = computed(() => layout().gap ?? 14)\n const buttonsMargin = computed(() => layout().buttonsMargin ?? layout().margin ?? 50)\n const joystickMargin = computed(() => (\n layout().joystickMargin\n ?? layout().margin\n ?? (joystickSide() === \"right\" ? [30, 54, 30, 30] : [30, 30, 30, 54])\n ))\n\n function readObjectOption(option) {\n return typeof option === \"object\" && option ? option : {}\n }\n\n function resolveButtonComponent(name) {\n const option = readObjectOption(readButtonOption(name))\n return option.component || components().buttons?.[name] || Button\n }\n\n const joystickComponent = computed(() => joystick()?.component || components().joystick || Joystick)\n const actionButtonComponent = computed(() => resolveButtonComponent(\"action\"))\n const backButtonComponent = computed(() => resolveButtonComponent(\"back\"))\n const dashButtonComponent = computed(() => resolveButtonComponent(\"dash\"))\n let activeJoystickControl = null\n let activeJoystickPower = 0\n let joystickRepeatTimer = null\n\n const baseButtonTextStyle = {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n\n const actionButtonStyle = {\n backgroundColor: {\n normal: \"#f7fbff\",\n hover: \"#ffffff\",\n pressed: \"#8fd4ff\",\n disabled: \"#7f8c8d\"\n },\n text: {\n ...baseButtonTextStyle,\n color: \"#14253a\"\n },\n border: {\n color: \"#ffffff\",\n width: 2\n }\n }\n\n const backButtonStyle = {\n backgroundColor: {\n normal: \"#243041\",\n hover: \"#2f4059\",\n pressed: \"#152132\",\n disabled: \"#7f8c8d\"\n },\n text: baseButtonTextStyle,\n border: {\n color: \"#ffffff\",\n width: 1\n }\n }\n\n const dashButtonStyle = {\n backgroundColor: {\n normal: \"#243041\",\n hover: \"#2f4059\",\n pressed: \"#152132\",\n disabled: \"#7f8c8d\"\n },\n text: {\n ...baseButtonTextStyle,\n fontSize: 20\n },\n border: {\n color: \"#ffffff\",\n width: 1\n }\n }\n\n const defaultButtonProps = {\n action: {\n shape: \"circle\",\n text: \"A\",\n width: 68,\n height: 68,\n controls: controlsInstance,\n controlName: \"action\",\n style: actionButtonStyle,\n alpha: 0.84\n },\n back: {\n shape: \"circle\",\n text: \"B\",\n width: 56,\n height: 56,\n controls: controlsInstance,\n controlName: \"back\",\n style: backButtonStyle,\n alpha: 0.78\n },\n dash: {\n shape: \"circle\",\n text: \"R\",\n width: 56,\n height: 56,\n controls: controlsInstance,\n controlName: \"dash\",\n style: dashButtonStyle,\n alpha: 0.78\n }\n }\n\n const buttonProps = (name) => {\n const option = readObjectOption(readButtonOption(name))\n const { enabled, component, container, ...props } = option\n const defaultProps = defaultButtonProps[name]\n return {\n ...defaultProps,\n ...props,\n defaultProps\n }\n }\n\n const buttonContainerProps = (name) => {\n const props = buttonProps(name)\n return {\n width: props.width,\n height: props.height,\n ...readObjectOption(readButtonOption(name)).container\n }\n }\n\n const joystickProps = () => {\n const joystickOptions = readObjectOption(joystick())\n const { component, moveInterval, threshold, ...props } = joystickOptions\n const defaultProps = {\n outerColor: \"#d7e7ff\",\n innerColor: \"#ffffff\",\n scale: 0.82,\n outerScale: { x: 0.86, y: 0.86 },\n innerScale: { x: 0.88, y: 0.88 },\n onStart: onJoystickStart,\n onChange: onJoystickChange,\n onEnd: onJoystickEnd\n }\n return {\n ...defaultProps,\n ...props,\n defaultProps\n }\n }\n\n const applyJoystickOptions = (control) => {\n const joystickOptions = joystick()\n if (!control || !joystickOptions || joystickOptions === false) return\n control.joystick?.updateJoystickConfig?.({\n ...control.joystick?.getJoystickConfig?.(),\n ...(typeof joystickOptions.moveInterval === \"number\" ? { moveInterval: joystickOptions.moveInterval } : {}),\n ...(typeof joystickOptions.threshold === \"number\" ? { threshold: joystickOptions.threshold } : {})\n })\n }\n\n const getJoystickThreshold = () => {\n const joystickOptions = joystick()\n if (joystickOptions && joystickOptions !== false && typeof joystickOptions.threshold === \"number\") {\n return joystickOptions.threshold\n }\n return controlsInstance()?.joystick?.getJoystickConfig?.()?.threshold ?? 0.1\n }\n\n const getJoystickMoveInterval = () => {\n const joystickOptions = joystick()\n if (joystickOptions && joystickOptions !== false && typeof joystickOptions.moveInterval === \"number\") {\n return joystickOptions.moveInterval\n }\n return controlsInstance()?.joystick?.getJoystickConfig?.()?.moveInterval ?? 50\n }\n\n const controlForAxis = (negativeControl, positiveControl, negativeAngle, positiveAngle, angle) => {\n const distanceToNegative = Math.abs(angle - negativeAngle)\n const distanceToPositive = Math.abs(angle - positiveAngle)\n return distanceToNegative <= distanceToPositive ? negativeControl : positiveControl\n }\n\n const resolveJoystickControl = (event) => {\n const direction = event?.direction\n if (direction === \"top\") return \"up\"\n if (direction === \"bottom\") return \"down\"\n if (direction === \"left\") return \"left\"\n if (direction === \"right\") return \"right\"\n\n const angle = Number(event?.angle)\n if (!Number.isFinite(angle)) {\n if (direction === \"top_left\") return \"left\"\n if (direction === \"top_right\") return \"right\"\n if (direction === \"bottom_left\") return \"left\"\n if (direction === \"bottom_right\") return \"right\"\n return null\n }\n\n if (direction === \"top_left\") return controlForAxis(\"up\", \"left\", 90, 180, angle)\n if (direction === \"top_right\") return controlForAxis(\"right\", \"up\", 0, 90, angle)\n if (direction === \"bottom_left\") return controlForAxis(\"left\", \"down\", 180, 270, angle)\n if (direction === \"bottom_right\") return controlForAxis(\"right\", \"down\", 360, 270, angle)\n return null\n }\n\n const applyJoystickControl = (name, isDown, power = activeJoystickPower) => {\n const control = controlsInstance()\n const joystickControls = control?.joystick\n if (joystickControls?.applyControl) {\n return joystickControls.applyControl(name, isDown, { power })\n }\n const keyboard = control?.keyboard\n if (keyboard?.applyControl) return keyboard.applyControl(name, isDown)\n return control?.applyControl?.(name, isDown, { power })\n }\n\n const stopJoystickRepeat = () => {\n if (!joystickRepeatTimer) return\n clearInterval(joystickRepeatTimer)\n joystickRepeatTimer = null\n }\n\n const startJoystickRepeat = () => {\n if (!activeJoystickControl || joystickRepeatTimer) return\n joystickRepeatTimer = setInterval(() => {\n if (!activeJoystickControl) return\n applyJoystickControl(activeJoystickControl, true)\n }, getJoystickMoveInterval())\n }\n\n const releaseJoystickControl = () => {\n stopJoystickRepeat()\n if (!activeJoystickControl) return\n const previous = activeJoystickControl\n activeJoystickControl = null\n activeJoystickPower = 0\n applyJoystickControl(previous, false, 0)\n }\n\n const activateJoystickControl = (controlName, power = 0) => {\n if (!controlName) {\n releaseJoystickControl()\n return\n }\n activeJoystickPower = power\n if (activeJoystickControl === controlName) {\n startJoystickRepeat()\n return\n }\n releaseJoystickControl()\n activeJoystickControl = controlName\n applyJoystickControl(controlName, true, power)\n startJoystickRepeat()\n }\n\n const publishMobileDebug = (type, payload = {}) => {\n const target = typeof window !== \"undefined\" ? window : globalThis\n if (!target.__RPGJS_MOBILE_DEBUG__) return\n const event = {\n source: \"mobile-gui\",\n type,\n time: Date.now(),\n ...payload\n }\n target.__RPGJS_MOBILE_DEBUG_EVENTS__ = [\n ...(target.__RPGJS_MOBILE_DEBUG_EVENTS__ || []).slice(-199),\n event\n ]\n target.__RPGJS_MOBILE_DEBUG_LAST__ = event\n }\n\n const onJoystickStart = () => {\n publishMobileDebug(\"joystick:start\", {\n config: controlsInstance()?.joystick?.getJoystickConfig?.()\n })\n }\n\n const onJoystickChange = (event) => {\n const threshold = getJoystickThreshold()\n const controlName = event?.power >= threshold ? resolveJoystickControl(event) : null\n publishMobileDebug(\"joystick:change\", {\n direction: event?.direction,\n power: event?.power,\n angle: event?.angle,\n threshold,\n controlName,\n config: controlsInstance()?.joystick?.getJoystickConfig?.()\n })\n activateJoystickControl(controlName, event?.power ?? 0)\n }\n\n const onJoystickEnd = () => {\n publishMobileDebug(\"joystick:end\", {\n controlName: activeJoystickControl\n })\n releaseJoystickControl()\n }\n\n mount((element) => {\n const control = inject('KeyboardControls')\n controlsInstance.set(control)\n applyJoystickOptions(control)\n })\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mobile.ce.js","names":[],"sources":["../../../../src/components/gui/mobile/mobile.ce"],"sourcesContent":["<Container flexDirection={rootDirection()} justifyContent=\"space-between\" alignItems=\"flex-end\" width=\"100%\" height=\"100%\" onBeforeDestroy={releaseJoystickControl}>\n <Container justifyContent=\"flex-end\" alignItems=\"flex-end\" gap={layoutGap()} margin={buttonsMargin()}>\n <Container display=\"flex\" flexDirection=\"row\" alignItems=\"flex-end\" gap={layoutGap()}>\n @if (showDashButton()) {\n <Container ...buttonContainerProps(\"dash\")>\n <dashButtonComponent() ...buttonProps(\"dash\") />\n </Container>\n }\n\n @if (showActionButton()) {\n <Container ...buttonContainerProps(\"action\")>\n <actionButtonComponent() ...buttonProps(\"action\") />\n </Container>\n }\n\n @if (showBackButton()) {\n <Container ...buttonContainerProps(\"back\")>\n <backButtonComponent() ...buttonProps(\"back\") />\n </Container>\n }\n\n </Container>\n </Container>\n\n <Container margin={joystickMargin()} alignItems=\"flex-end\">\n @if (showJoystick()) {\n <joystickComponent() ...joystickProps() />\n }\n </Container>\n</Container>\n\n<script>\n import { Button, Joystick, signal, mount, computed } from 'canvasengine'\n import { inject } from '../../../core/inject'\n\n const { data } = defineProps()\n const controlsInstance = signal(null)\n const options = computed(() => data?.() || {})\n const layout = computed(() => options().layout || {})\n const components = computed(() => options().components || {})\n const buttons = computed(() => options().buttons || {})\n const joystick = computed(() => options().joystick)\n\n const readButtonOption = (name) => buttons()[name]\n const buttonEnabled = (name, defaultValue) => {\n const option = readButtonOption(name)\n if (typeof option === \"boolean\") return option\n return option?.enabled ?? defaultValue\n }\n\n const showActionButton = computed(() => buttonEnabled(\"action\", true))\n const showBackButton = computed(() => buttonEnabled(\"back\", true))\n const showDashButton = computed(() => buttonEnabled(\"dash\", false))\n const showJoystick = computed(() => joystick() !== false)\n const joystickSide = computed(() => layout().joystickSide || \"right\")\n const rootDirection = computed(() => joystickSide() === \"left\" ? \"row-reverse\" : \"row\")\n const layoutGap = computed(() => layout().gap ?? 14)\n const buttonsMargin = computed(() => layout().buttonsMargin ?? layout().margin ?? 50)\n const joystickMargin = computed(() => (\n layout().joystickMargin\n ?? layout().margin\n ?? (joystickSide() === \"right\" ? [30, 54, 30, 30] : [30, 30, 30, 54])\n ))\n\n function readObjectOption(option) {\n return typeof option === \"object\" && option ? option : {}\n }\n\n function resolveButtonComponent(name) {\n const option = readObjectOption(readButtonOption(name))\n return option.component || components().buttons?.[name] || Button\n }\n\n const joystickComponent = computed(() => joystick()?.component || components().joystick || Joystick)\n const actionButtonComponent = computed(() => resolveButtonComponent(\"action\"))\n const backButtonComponent = computed(() => resolveButtonComponent(\"back\"))\n const dashButtonComponent = computed(() => resolveButtonComponent(\"dash\"))\n let activeJoystickControl = null\n let activeJoystickPower = 0\n let joystickRepeatTimer = null\n\n const baseButtonTextStyle = {\n fontSize: 24,\n fontFamily: \"Arial Bold\",\n color: \"#ffffff\"\n }\n\n const actionButtonStyle = {\n backgroundColor: {\n normal: \"#f7fbff\",\n hover: \"#ffffff\",\n pressed: \"#8fd4ff\",\n disabled: \"#7f8c8d\"\n },\n text: {\n ...baseButtonTextStyle,\n color: \"#14253a\"\n },\n border: {\n color: \"#ffffff\",\n width: 2\n }\n }\n\n const backButtonStyle = {\n backgroundColor: {\n normal: \"#243041\",\n hover: \"#2f4059\",\n pressed: \"#152132\",\n disabled: \"#7f8c8d\"\n },\n text: baseButtonTextStyle,\n border: {\n color: \"#ffffff\",\n width: 1\n }\n }\n\n const dashButtonStyle = {\n backgroundColor: {\n normal: \"#243041\",\n hover: \"#2f4059\",\n pressed: \"#152132\",\n disabled: \"#7f8c8d\"\n },\n text: {\n ...baseButtonTextStyle,\n fontSize: 20\n },\n border: {\n color: \"#ffffff\",\n width: 1\n }\n }\n\n const defaultButtonProps = {\n action: {\n shape: \"circle\",\n text: \"A\",\n width: 68,\n height: 68,\n controls: controlsInstance,\n controlName: \"action\",\n style: actionButtonStyle,\n alpha: 0.84\n },\n back: {\n shape: \"circle\",\n text: \"B\",\n width: 56,\n height: 56,\n controls: controlsInstance,\n controlName: \"back\",\n style: backButtonStyle,\n alpha: 0.78\n },\n dash: {\n shape: \"circle\",\n text: \"R\",\n width: 56,\n height: 56,\n controls: controlsInstance,\n controlName: \"dash\",\n style: dashButtonStyle,\n alpha: 0.78\n }\n }\n\n const buttonProps = (name) => {\n const option = readObjectOption(readButtonOption(name))\n const { enabled, component, container, ...props } = option\n const defaultProps = defaultButtonProps[name]\n return {\n ...defaultProps,\n ...props,\n defaultProps\n }\n }\n\n const buttonContainerProps = (name) => {\n const props = buttonProps(name)\n return {\n width: props.width,\n height: props.height,\n ...readObjectOption(readButtonOption(name)).container\n }\n }\n\n const joystickProps = () => {\n const joystickOptions = readObjectOption(joystick())\n const { component, moveInterval, threshold, ...props } = joystickOptions\n const defaultProps = {\n outerColor: \"#d7e7ff\",\n innerColor: \"#ffffff\",\n scale: 0.82,\n outerScale: { x: 0.86, y: 0.86 },\n innerScale: { x: 0.88, y: 0.88 },\n onStart: onJoystickStart,\n onChange: onJoystickChange,\n onEnd: onJoystickEnd\n }\n return {\n ...defaultProps,\n ...props,\n defaultProps\n }\n }\n\n const applyJoystickOptions = (control) => {\n const joystickOptions = joystick()\n if (!control || !joystickOptions || joystickOptions === false) return\n control.joystick?.updateJoystickConfig?.({\n ...control.joystick?.getJoystickConfig?.(),\n ...(typeof joystickOptions.moveInterval === \"number\" ? { moveInterval: joystickOptions.moveInterval } : {}),\n ...(typeof joystickOptions.threshold === \"number\" ? { threshold: joystickOptions.threshold } : {})\n })\n }\n\n const getJoystickThreshold = () => {\n const joystickOptions = joystick()\n if (joystickOptions && joystickOptions !== false && typeof joystickOptions.threshold === \"number\") {\n return joystickOptions.threshold\n }\n return controlsInstance()?.joystick?.getJoystickConfig?.()?.threshold ?? 0.1\n }\n\n const getJoystickMoveInterval = () => {\n const joystickOptions = joystick()\n if (joystickOptions && joystickOptions !== false && typeof joystickOptions.moveInterval === \"number\") {\n return joystickOptions.moveInterval\n }\n return controlsInstance()?.joystick?.getJoystickConfig?.()?.moveInterval ?? 50\n }\n\n const controlForAxis = (negativeControl, positiveControl, negativeAngle, positiveAngle, angle) => {\n const distanceToNegative = Math.abs(angle - negativeAngle)\n const distanceToPositive = Math.abs(angle - positiveAngle)\n return distanceToNegative <= distanceToPositive ? negativeControl : positiveControl\n }\n\n const resolveJoystickControl = (event) => {\n const direction = event?.direction\n if (direction === \"top\") return \"up\"\n if (direction === \"bottom\") return \"down\"\n if (direction === \"left\") return \"left\"\n if (direction === \"right\") return \"right\"\n\n const angle = Number(event?.angle)\n if (!Number.isFinite(angle)) {\n if (direction === \"top_left\") return \"left\"\n if (direction === \"top_right\") return \"right\"\n if (direction === \"bottom_left\") return \"left\"\n if (direction === \"bottom_right\") return \"right\"\n return null\n }\n\n if (direction === \"top_left\") return controlForAxis(\"up\", \"left\", 90, 180, angle)\n if (direction === \"top_right\") return controlForAxis(\"right\", \"up\", 0, 90, angle)\n if (direction === \"bottom_left\") return controlForAxis(\"left\", \"down\", 180, 270, angle)\n if (direction === \"bottom_right\") return controlForAxis(\"right\", \"down\", 360, 270, angle)\n return null\n }\n\n const applyJoystickControl = (name, isDown, power = activeJoystickPower) => {\n const control = controlsInstance()\n const joystickControls = control?.joystick\n if (joystickControls?.applyControl) {\n return joystickControls.applyControl(name, isDown, { power })\n }\n const keyboard = control?.keyboard\n if (keyboard?.applyControl) return keyboard.applyControl(name, isDown)\n return control?.applyControl?.(name, isDown, { power })\n }\n\n const stopJoystickRepeat = () => {\n if (!joystickRepeatTimer) return\n clearInterval(joystickRepeatTimer)\n joystickRepeatTimer = null\n }\n\n const startJoystickRepeat = () => {\n if (!activeJoystickControl || joystickRepeatTimer) return\n joystickRepeatTimer = setInterval(() => {\n if (!activeJoystickControl) return\n applyJoystickControl(activeJoystickControl, true)\n }, getJoystickMoveInterval())\n }\n\n const releaseJoystickControl = () => {\n stopJoystickRepeat()\n if (!activeJoystickControl) return\n const previous = activeJoystickControl\n activeJoystickControl = null\n activeJoystickPower = 0\n applyJoystickControl(previous, false, 0)\n }\n\n const activateJoystickControl = (controlName, power = 0) => {\n if (!controlName) {\n releaseJoystickControl()\n return\n }\n activeJoystickPower = power\n if (activeJoystickControl === controlName) {\n startJoystickRepeat()\n return\n }\n releaseJoystickControl()\n activeJoystickControl = controlName\n applyJoystickControl(controlName, true, power)\n startJoystickRepeat()\n }\n\n const publishMobileDebug = (type, payload = {}) => {\n const target = typeof window !== \"undefined\" ? window : globalThis\n if (!target.__RPGJS_MOBILE_DEBUG__) return\n const event = {\n source: \"mobile-gui\",\n type,\n time: Date.now(),\n ...payload\n }\n target.__RPGJS_MOBILE_DEBUG_EVENTS__ = [\n ...(target.__RPGJS_MOBILE_DEBUG_EVENTS__ || []).slice(-199),\n event\n ]\n target.__RPGJS_MOBILE_DEBUG_LAST__ = event\n }\n\n const onJoystickStart = () => {\n publishMobileDebug(\"joystick:start\", {\n config: controlsInstance()?.joystick?.getJoystickConfig?.()\n })\n }\n\n const onJoystickChange = (event) => {\n const threshold = getJoystickThreshold()\n const controlName = event?.power >= threshold ? resolveJoystickControl(event) : null\n publishMobileDebug(\"joystick:change\", {\n direction: event?.direction,\n power: event?.power,\n angle: event?.angle,\n threshold,\n controlName,\n config: controlsInstance()?.joystick?.getJoystickConfig?.()\n })\n activateJoystickControl(controlName, event?.power ?? 0)\n }\n\n const onJoystickEnd = () => {\n publishMobileDebug(\"joystick:end\", {\n controlName: activeJoystickControl\n })\n releaseJoystickControl()\n }\n\n mount((element) => {\n const control = inject('KeyboardControls')\n controlsInstance.set(control)\n applyJoystickOptions(control)\n })\n</script>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notification.ce.js","names":[],"sources":["../../../../src/components/gui/notification/notification.ce"],"sourcesContent":["<DOMContainer\n width=\"100%\"\n height=\"100%\"\n zIndex={100}\n class=\"notification\"\n style=\"pointer-events: none !important;\"\n>\n <div class=\"rpg-ui-notifications\">\n @for ((notif,index) of notifications) {\n <div\n class=\"rpg-ui-notification\"\n data-type={notif.type || \"info\"}\n style={notificationStyle(notif)}\n >\n @if (notif.icon) {\n <div class=\"rpg-ui-notification-icon\">\n <DOMSprite sheet={iconSheet(notif.icon)} />\n </div>\n }\n <div class=\"rpg-ui-notification-message\">{notif.message}</div>\n </div>\n }\n </div>\n</DOMContainer>\n\n<style>\n .notification {\n pointer-events: none !important;\n }\n</style>\n\n<script>\n import { effect, computed } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const notifications = computed(() => engine.notificationManager.stack());\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n });\n\n effect(() => {\n const list = notifications();\n const rowHeight = 68;\n list.forEach((notif, index) => {\n notif.layoutY.set(index * rowHeight);\n });\n });\n\n const notificationStyle = (notif) => ({\n opacity: notif.opacity(),\n transform: `translateY(${notif.layoutY() + notif.offset()}px)`\n });\n</script>\n"],"mappings":";;;;AAUA,IAAI,OAAO,
|
|
1
|
+
{"version":3,"file":"notification.ce.js","names":[],"sources":["../../../../src/components/gui/notification/notification.ce"],"sourcesContent":["<DOMContainer\n width=\"100%\"\n height=\"100%\"\n zIndex={100}\n class=\"notification\"\n style=\"pointer-events: none !important;\"\n>\n <div class=\"rpg-ui-notifications\">\n @for ((notif,index) of notifications) {\n <div\n class=\"rpg-ui-notification\"\n data-type={notif.type || \"info\"}\n style={notificationStyle(notif)}\n >\n @if (notif.icon) {\n <div class=\"rpg-ui-notification-icon\">\n <DOMSprite sheet={iconSheet(notif.icon)} />\n </div>\n }\n <div class=\"rpg-ui-notification-message\">{notif.message}</div>\n </div>\n }\n </div>\n</DOMContainer>\n\n<style>\n .notification {\n pointer-events: none !important;\n }\n</style>\n\n<script>\n import { effect, computed } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n\n const engine = inject(RpgClientEngine);\n const notifications = computed(() => engine.notificationManager.stack());\n\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n });\n\n effect(() => {\n const list = notifications();\n const rowHeight = 68;\n list.forEach((notif, index) => {\n notif.layoutY.set(index * rowHeight);\n });\n });\n\n const notificationStyle = (notif) => ({\n opacity: notif.opacity(),\n transform: `translateY(${notif.layoutY() + notif.offset()}px)`\n });\n</script>\n"],"mappings":";;;;AAUA,IAAI,OAAO,aAAa,aAAa;CACnC,IAAI,eAAe,SAAS,eAAe,0GAA0G;CACrJ,IAAI,CAAC,cAAc;EACjB,eAAe,SAAS,cAAc,OAAO;EAC7C,aAAa,KAAK;EAClB,SAAS,KAAK,YAAY,YAAY;CACxC;CACA,aAAa,cAAc;AAC7B;AAEM,SAAS,UAAU,SAAS;CACX,SAAS,OAAO;CACX,eAAe,OAAO;CACtB,eAAe,OAAO;CAC1C,MAAM,SAAS,OAAO,eAAe;CAC7C,MAAM,gBAAgB,eAAe,OAAO,oBAAoB,MAAM,CAAC;CACvE,MAAM,aAAa,YAAY;EAC3B,YAAY,OAAO,eAAe,MAAM;EACxC,SAAS;CACb;CACA,aAAa;EACT,MAAM,OAAO,cAAc;EAC3B,MAAM,YAAY;EAClB,KAAK,SAAS,OAAO,UAAU;GAC3B,MAAM,QAAQ,IAAI,QAAQ,SAAS;EACvC,CAAC;CACL,CAAC;CACD,MAAM,qBAAqB,WAAW;EAClC,SAAS,MAAM,QAAQ;EACvB,WAAW,cAAc,MAAM,QAAQ,IAAI,MAAM,OAAO,EAAE;CAC9D;CAEQ,OADY,EAAE,cAAc;EAAE,OAAO;EAAQ,QAAQ;EAAQ,QAAQ;EAAK,OAAO;GAAE,OAAO;GAAgB,OAAO;EAAmC;CAAE,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,uBAAuB;CAAE,GAAG,KAAK,gBAAgB,OAAO,UAAU,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO;GAAE,OAAO;GAAuB,aAAa,eAAe,MAAM,QAAQ,MAAM;GAAG,OAAO,eAAe,kBAAkB,KAAK,CAAC;EAAE;CAAE,GAAG,CAAC,KAAK,MAAM,YAAY,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,2BAA2B;CAAE,GAAG,EAAE,WAAW,EAAE,OAAO,eAAe,UAAU,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,YAAY;EAAE,SAAS;EAAO,OAAO,EAAE,OAAO,8BAA8B;EAAG,aAAa,MAAM;CAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1sB;AACb;AAEA,IAAM,iBAAiB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save-load.ce.js","names":[],"sources":["../../../src/components/gui/save-load.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-save-load-layer\" click={closeSaveLoadFromPointer}>\n <button class=\"rpg-ui-close-button\" type=\"button\" title=\"Close\" aria-label=\"Close save menu\" click={closeSaveLoadFromPointer}>x</button>\n <div class=\"rpg-ui-save-load rpg-anim-fade-in\" click={stopEvent}>\n <div class=\"rpg-ui-save-load-header\">\n <div class=\"rpg-ui-save-load-title\">{title()}</div>\n <div class=\"rpg-ui-save-load-subtitle\">{subtitle()}</div>\n </div>\n <Navigation tabindex={selectedSlot} controls={controls}>\n <div class=\"rpg-ui-save-load-list\">\n @for ((item,displayIndex) of displaySlots) {\n <div\n class=\"rpg-ui-save-load-slot\"\n class={{active: selectedSlot() === displayIndex}}\n tabindex={displayIndex}\n data-slot-index={displayIndex}\n click={selectSlot(displayIndex)}\n >\n <div class=\"rpg-ui-save-load-slot-index\">{item.label}</div>\n @if (item.slot) {\n <div class=\"rpg-ui-save-load-slot-meta\">\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.level\")}: {item.slot.level ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.exp\")}: {item.slot.exp ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.map\")}: {item.slot.map ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.date\")}: {item.slot.date ?? \"-\"}</div>\n </div>\n }\n @else {\n <div class=\"rpg-ui-save-load-slot-empty\">{t(\"rpg.save.empty-slot\")}</div>\n }\n </div>\n }\n </div>\n </Navigation>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, effect, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../core/inject\";\n import { RpgClientEngine } from \"../../RpgClientEngine\";\n import { SaveClientService } from \"../../services/save\";\n import { PrebuiltGui } from \"@rpgjs/common\";\n import { RpgGui } from \"../../Gui/Gui\";\n import { getKeyboardControlBind } from \"../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const saveClient = inject(SaveClientService);\n const gui = inject(RpgGui);\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSlot = signal(0);\n const DEFAULT_SLOTS = 4;\n const defaultSlots = () => Array.from({ length: DEFAULT_SLOTS }, () => null);\n const localSlots = signal(defaultSlots());\n\n const { data, onFinish } = defineProps();\n\n const title = computed(() => data().mode === \"save\" ? t(\"rpg.save.title\") : t(\"rpg.load.title\"));\n const subtitle = computed(() => data().mode === \"save\"\n ? t(\"rpg.save.subtitle\")\n : t(\"rpg.load.subtitle\")\n );\n\n const slotsValue = computed(() => localSlots());\n const displaySlots = computed(() => {\n const slots = slotsValue();\n const items = slots.map((slot, index) => ({\n kind: \"slot\",\n slot,\n slotIndex: index,\n label: t(\"rpg.save.slot\", { index: index + 1 }),\n readonly: false\n }));\n if (!data().showAutoSlot) return items;\n const index = typeof data().autoSlotIndex === \"number\" ? data().autoSlotIndex : 0;\n const autoSlot = slots[index] ?? null;\n const readonly = data().mode === \"save\";\n return [\n {\n kind: \"auto\",\n slot: autoSlot,\n slotIndex: index,\n label: data().autoSlotLabel || t(\"rpg.save.auto\"),\n readonly\n },\n ...items\n ];\n });\n const nav = createTabindexNavigator(selectedSlot, { count: () => displaySlots().length }, \"wrap\");\n\n const canSelect = (item) => {\n if (item.readonly) return false;\n if (data().mode === \"load\" && !item.slot) return false;\n return true;\n };\n\n const normalizeSlotValue = (value) => {\n if (!value) return null;\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }\n return value;\n };\n\n const normalizeSlots = (list) => {\n if (Array.isArray(list)) {\n const length = Math.max(list.length, DEFAULT_SLOTS);\n return Array.from({ length }, (_, index) => normalizeSlotValue(list[index]));\n }\n if (!list || typeof list !== \"object\") {\n return defaultSlots();\n }\n const keys = Object.keys(list).filter((key) => /^\\d+$/.test(key));\n const indices = keys.map((key) => Number(key)).filter((index) => index >= 0);\n const maxIndex = indices.length ? Math.max(...indices) : -1;\n const length = Math.max(maxIndex + 1, DEFAULT_SLOTS);\n const slots = Array.from({ length }, () => null);\n keys.forEach((key) => {\n const index = Number(key);\n if (index < 0 || index >= length) return;\n slots[index] = normalizeSlotValue(list[key]);\n });\n return slots;\n };\n\n const hasProvidedSlots = (list) => {\n if (Array.isArray(list)) return list.length > 0;\n return !!(list && typeof list === \"object\" && Object.keys(list).length > 0);\n };\n\n const refreshSlots = async () => {\n try {\n const list = await saveClient.listSlots();\n localSlots.set(normalizeSlots(list));\n } catch (err) {\n localSlots.set(defaultSlots());\n }\n };\n\n const triggerSelect = async (displayIndex) => {\n const list = displaySlots();\n const item = list[displayIndex];\n if (!item) return;\n if (!canSelect(item)) return;\n const action = data().mode === \"save\" ? \"save\" : \"load\";\n if (action === \"save\") {\n await saveClient.saveSlot(item.slotIndex);\n await refreshSlots();\n }\n if (action === \"load\") {\n await saveClient.loadSlot(item.slotIndex);\n }\n setTimeout(() => {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n gui.hide(PrebuiltGui.TitleScreen);\n }, 50);\n\n };\n\n function selectSlot(index) {\n return function() {\n selectedSlot.set(index);\n triggerSelect(index);\n }\n }\n\n const stopEvent = (event) => {\n event?.stopPropagation?.();\n };\n\n const closeSaveLoad = () => {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n };\n\n const closeSaveLoadFromPointer = (event) => {\n stopEvent(event);\n closeSaveLoad();\n };\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n triggerSelect(selectedSlot());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n closeSaveLoad();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n mount((element) => {\n refreshSlots();\n });\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"save-load.ce.js","names":[],"sources":["../../../src/components/gui/save-load.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-ui-save-load-layer\" click={closeSaveLoadFromPointer}>\n <button class=\"rpg-ui-close-button\" type=\"button\" title=\"Close\" aria-label=\"Close save menu\" click={closeSaveLoadFromPointer}>x</button>\n <div class=\"rpg-ui-save-load rpg-anim-fade-in\" click={stopEvent}>\n <div class=\"rpg-ui-save-load-header\">\n <div class=\"rpg-ui-save-load-title\">{title()}</div>\n <div class=\"rpg-ui-save-load-subtitle\">{subtitle()}</div>\n </div>\n <Navigation tabindex={selectedSlot} controls={controls}>\n <div class=\"rpg-ui-save-load-list\">\n @for ((item,displayIndex) of displaySlots) {\n <div\n class=\"rpg-ui-save-load-slot\"\n class={{active: selectedSlot() === displayIndex}}\n tabindex={displayIndex}\n data-slot-index={displayIndex}\n click={selectSlot(displayIndex)}\n >\n <div class=\"rpg-ui-save-load-slot-index\">{item.label}</div>\n @if (item.slot) {\n <div class=\"rpg-ui-save-load-slot-meta\">\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.level\")}: {item.slot.level ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.exp\")}: {item.slot.exp ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.map\")}: {item.slot.map ?? \"-\"}</div>\n <div class=\"rpg-ui-save-load-slot-line\">{t(\"rpg.save.date\")}: {item.slot.date ?? \"-\"}</div>\n </div>\n }\n @else {\n <div class=\"rpg-ui-save-load-slot-empty\">{t(\"rpg.save.empty-slot\")}</div>\n }\n </div>\n }\n </div>\n </Navigation>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { signal, computed, effect, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../core/inject\";\n import { RpgClientEngine } from \"../../RpgClientEngine\";\n import { SaveClientService } from \"../../services/save\";\n import { PrebuiltGui } from \"@rpgjs/common\";\n import { RpgGui } from \"../../Gui/Gui\";\n import { getKeyboardControlBind } from \"../../services/actionInput\";\n\n const engine = inject(RpgClientEngine);\n const { t } = engine.i18n();\n const saveClient = inject(SaveClientService);\n const gui = inject(RpgGui);\n const keyboardControls = engine.globalConfig.keyboardControls;\n\n const selectedSlot = signal(0);\n const DEFAULT_SLOTS = 4;\n const defaultSlots = () => Array.from({ length: DEFAULT_SLOTS }, () => null);\n const localSlots = signal(defaultSlots());\n\n const { data, onFinish } = defineProps();\n\n const title = computed(() => data().mode === \"save\" ? t(\"rpg.save.title\") : t(\"rpg.load.title\"));\n const subtitle = computed(() => data().mode === \"save\"\n ? t(\"rpg.save.subtitle\")\n : t(\"rpg.load.subtitle\")\n );\n\n const slotsValue = computed(() => localSlots());\n const displaySlots = computed(() => {\n const slots = slotsValue();\n const items = slots.map((slot, index) => ({\n kind: \"slot\",\n slot,\n slotIndex: index,\n label: t(\"rpg.save.slot\", { index: index + 1 }),\n readonly: false\n }));\n if (!data().showAutoSlot) return items;\n const index = typeof data().autoSlotIndex === \"number\" ? data().autoSlotIndex : 0;\n const autoSlot = slots[index] ?? null;\n const readonly = data().mode === \"save\";\n return [\n {\n kind: \"auto\",\n slot: autoSlot,\n slotIndex: index,\n label: data().autoSlotLabel || t(\"rpg.save.auto\"),\n readonly\n },\n ...items\n ];\n });\n const nav = createTabindexNavigator(selectedSlot, { count: () => displaySlots().length }, \"wrap\");\n\n const canSelect = (item) => {\n if (item.readonly) return false;\n if (data().mode === \"load\" && !item.slot) return false;\n return true;\n };\n\n const normalizeSlotValue = (value) => {\n if (!value) return null;\n if (typeof value === \"string\") {\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }\n return value;\n };\n\n const normalizeSlots = (list) => {\n if (Array.isArray(list)) {\n const length = Math.max(list.length, DEFAULT_SLOTS);\n return Array.from({ length }, (_, index) => normalizeSlotValue(list[index]));\n }\n if (!list || typeof list !== \"object\") {\n return defaultSlots();\n }\n const keys = Object.keys(list).filter((key) => /^\\d+$/.test(key));\n const indices = keys.map((key) => Number(key)).filter((index) => index >= 0);\n const maxIndex = indices.length ? Math.max(...indices) : -1;\n const length = Math.max(maxIndex + 1, DEFAULT_SLOTS);\n const slots = Array.from({ length }, () => null);\n keys.forEach((key) => {\n const index = Number(key);\n if (index < 0 || index >= length) return;\n slots[index] = normalizeSlotValue(list[key]);\n });\n return slots;\n };\n\n const hasProvidedSlots = (list) => {\n if (Array.isArray(list)) return list.length > 0;\n return !!(list && typeof list === \"object\" && Object.keys(list).length > 0);\n };\n\n const refreshSlots = async () => {\n try {\n const list = await saveClient.listSlots();\n localSlots.set(normalizeSlots(list));\n } catch (err) {\n localSlots.set(defaultSlots());\n }\n };\n\n const triggerSelect = async (displayIndex) => {\n const list = displaySlots();\n const item = list[displayIndex];\n if (!item) return;\n if (!canSelect(item)) return;\n const action = data().mode === \"save\" ? \"save\" : \"load\";\n if (action === \"save\") {\n await saveClient.saveSlot(item.slotIndex);\n await refreshSlots();\n }\n if (action === \"load\") {\n await saveClient.loadSlot(item.slotIndex);\n }\n setTimeout(() => {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n gui.hide(PrebuiltGui.TitleScreen);\n }, 50);\n\n };\n\n function selectSlot(index) {\n return function() {\n selectedSlot.set(index);\n triggerSelect(index);\n }\n }\n\n const stopEvent = (event) => {\n event?.stopPropagation?.();\n };\n\n const closeSaveLoad = () => {\n if (onFinish) onFinish();\n gui.hide(PrebuiltGui.Save);\n };\n\n const closeSaveLoadFromPointer = (event) => {\n stopEvent(event);\n closeSaveLoad();\n };\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n nav.next(1);\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n triggerSelect(selectedSlot());\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n closeSaveLoad();\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n mount((element) => {\n refreshSlots();\n });\n</script>\n"],"mappings":"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"}
|
|
@@ -202,7 +202,8 @@ function component($$props) {
|
|
|
202
202
|
quantityDialogOpen.set(false);
|
|
203
203
|
return;
|
|
204
204
|
}
|
|
205
|
-
|
|
205
|
+
const action = tradeMode() === "buy" ? "buyItem" : "sellItem";
|
|
206
|
+
onInteraction(action, {
|
|
206
207
|
id: item.id,
|
|
207
208
|
nb: quantity()
|
|
208
209
|
});
|
|
@@ -282,7 +283,8 @@ function component($$props) {
|
|
|
282
283
|
quantityDialogOpen.set(false);
|
|
283
284
|
return;
|
|
284
285
|
}
|
|
285
|
-
|
|
286
|
+
const action = tradeMode() === "buy" ? "buyItem" : "sellItem";
|
|
287
|
+
onInteraction(action, {
|
|
286
288
|
id: item.id,
|
|
287
289
|
nb: quantity()
|
|
288
290
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shop.ce.js","names":[],"sources":["../../../../src/components/gui/shop/shop.ce"],"sourcesContent":[" <DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-shop-layer\" click={closeShopFromPointer}>\n <button class=\"rpg-ui-close-button\" type=\"button\" title=\"Close\" aria-label=\"Close shop\" click={closeShopFromPointer}>x</button>\n <div class=\"rpg-shop-container rpg-anim-fade-in\" click={stopEvent}>\n <div class=\"rpg-shop-header\">\n <div class=\"rpg-shop-merchant\">\n <div>\n @if (hasFace) {\n <div class=\"rpg-shop-merchant-avatar\">\n <DOMSprite \n sheet={faceSheet(face().id, face().expression)} \n width=\"50px\"\n height=\"50px\"\n objectFit=\"contain\"\n /> \n </div>\n }\n </div>\n <div class=\"rpg-shop-merchant-info\">\n <p>{{ shopMessage() }}</p>\n </div>\n </div>\n <div class=\"rpg-shop-gold\">\n {{ gold() }} {{ goldTerm }}\n </div>\n </div>\n\n <div class=\"rpg-shop-body\">\n <div class=\"rpg-shop-left\">\n @if (tradeView() === 'mode') {\n <div class=\"rpg-shop-content rpg-shop-content-mode\">\n <div class=\"rpg-shop-details rpg-shop-details-mode\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">🛒</div>\n <h2 style=\"margin: 0;\">{t(\"rpg.shop.choose-action\")}</h2>\n </div>\n <div class=\"rpg-shop-trade\">\n <Navigation tabindex={selectedModeIndex} controls={modeControls}>\n <div class=\"rpg-shop-tabs rpg-shop-trade-tabs\">\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 0}}\n click={selectMode('buy')}\n >{t(\"rpg.shop.buy\")}</div>\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 1}}\n click={selectMode('sell')}\n >{t(\"rpg.shop.sell\")}</div>\n </div>\n </Navigation>\n </div>\n </div>\n </div>\n }\n @else {\n <div>\n <Navigation tabindex={selectedTab} controls={tabControls}> \n <div class=\"rpg-shop-tabs\">\n @for ((tab,index) of tabs) {\n <div \n class=\"rpg-shop-tab\" \n class={{active: selectedTab() === index}} \n tabindex={index} \n click={selectTab(index)}\n >{{ tab.label }}</div>\n }\n </div>\n </Navigation>\n\n <div class=\"rpg-shop-content\">\n <div class=\"rpg-shop-grid\">\n <Navigation tabindex={selectedItem} controls={itemControls}> \n @for ((item,index) of filteredItems) { \n <div class=\"rpg-shop-card\" class={{disabled: isItemDisabled(item), selected: selectedItem() === index}} tabindex={index} click={selectItem(index)}>\n <div class=\"rpg-shop-card-icon\">\n @if (item.icon) {\n <DOMSprite \n sheet={iconSheet(item.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <div class=\"rpg-shop-card-name\">{{ item.name }}</div>\n <div class=\"rpg-shop-card-price\">{{ item.price }} {{ goldTerm }}</div>\n @if (item.quantity !== undefined) {\n <div class=\"rpg-shop-card-qty\">x{{ item.quantity }}</div>\n }\n @if (item.equipped) {\n <div class=\"rpg-shop-card-tag\">{t(\"rpg.shop.equipped\")}</div>\n }\n </div>\n }\n </Navigation>\n </div>\n\n <div class=\"rpg-shop-details\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">\n <DOMSprite \n sheet={iconSheet(currentItem()?.icon)} \n playing=\"default\" \n width=\"80px\"\n height=\"80px\"\n objectFit=\"contain\"\n />\n </div>\n <h2 style=\"margin: 0;\">{{ currentItem()?.name || \"\" }}</h2>\n <p style=\"color: #ffd700; font-weight: bold; margin: 8px 0;\">{{ currentItem()?.price ?? 0 }} {{ goldTerm }}</p>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-details-qty\">{t(\"rpg.shop.qty\")}: x{{ currentItem()?.quantity }}</div>\n }\n </div>\n <div>\n @if (currentItem()?.equipped) {\n <div class=\"rpg-shop-equipped\">{t(\"rpg.shop.already-equipped\")}</div>\n }\n </div>\n <div class=\"rpg-shop-details-desc\">\n {{ currentItem()?.description || \"\" }}\n </div>\n <div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-shop-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-shop-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-shop-stat-key\">{{ stat.label }}</div>\n <div class=\"rpg-shop-stat-value\">\n {{ stat.delta > 0 ? '+' : '' }}{{ stat.delta }}\n </div>\n @if (stat.current !== undefined) {\n <div class=\"rpg-shop-stat-current\">{{ stat.current }} → {{ stat.next }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n <button class=\"rpg-shop-btn\" click={backToMode()}>{t(\"rpg.shop.back\")}</button>\n </div>\n </div>\n </div>\n }\n @if (quantityDialogOpen) {\n <div class=\"rpg-shop-modal\" click={closeQuantityDialogFromPointer}>\n <div class=\"rpg-shop-modal-card\" click={stopEvent}>\n <div class=\"rpg-shop-modal-title\">{{ actionLabel }}</div>\n <div class=\"rpg-shop-modal-item\">{{ currentItem()?.name || \"\" }}</div>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-modal-qty\">{t(\"rpg.shop.available\")}: x{{ currentItem()?.quantity }}</div>\n }\n <div class=\"rpg-shop-quantity\">\n <div class=\"rpg-shop-quantity-label\">{t(\"rpg.shop.quantity\")}</div>\n <div class=\"rpg-shop-quantity-controls\">\n <button class=\"rpg-shop-btn\" click={changeQuantity(-1)}>-</button>\n <div class=\"rpg-shop-quantity-value\">{{ quantity }}</div>\n <button class=\"rpg-shop-btn\" click={changeQuantity(1)}>+</button>\n </div>\n </div>\n <div class=\"rpg-shop-modal-total\">\n <span>{t(\"rpg.shop.total\")}</span>\n <span>{{ totalPrice() }} {{ goldTerm }}</span>\n </div>\n <div class=\"rpg-shop-modal-actions\">\n <button class=\"rpg-shop-btn rpg-shop-btn-secondary\" click={closeQuantityDialog()}>{t(\"rpg.menu.cancel\")}</button>\n <button class=\"rpg-shop-btn\" click={confirmTrade()}>\n {{ actionLabel() }} x{{ quantity() }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </DOMContainer>\n\n<script>\n import { mount, 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 { t } = engine.i18n()\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n })\n const goldTerm = engine.globalConfig.goldTerm || 'G'\n\n const selectedItem = signal(0)\n const selectedTab = signal(0)\n const tradeMode = signal('buy')\n const tradeView = signal('mode')\n const selectedModeIndex = signal(0)\n const quantity = signal(1)\n const quantityDialogOpen = signal(false)\n const defaultMessage = t(\"rpg.shop.default-message\")\n const tabs = [\n { id: 'item', label: t(\"rpg.menu.items\") },\n { id: 'weapon', label: t(\"rpg.menu.weapons\") },\n { id: 'armor', label: t(\"rpg.menu.armor\") }\n ]\n\n const { data, onInteraction , onFinish } = defineProps()\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value\n const guiData = computed(() => resolveProp(data) || {})\n const shopMessage = computed(() => {\n const message = resolveProp(guiData().message)\n return message ? String(message) : defaultMessage\n })\n const face = computed(() => resolveProp(guiData().face))\n const hasFace = computed(() => {\n const value = face()\n return value && value.id\n })\n const buyItems = computed(() => guiData().items || [])\n const sellItems = computed(() => guiData().sellItems || [])\n const activeItems = computed(() => tradeMode() === 'buy' ? buyItems() : sellItems())\n const filteredItems = computed(() => {\n const tab = tabs[selectedTab()]\n const items = activeItems()\n if (!tab) return []\n return items.filter((item) => item?.type === tab.id)\n })\n const currentItem = computed(() => filteredItems()[selectedItem()])\n const gold = computed(() => currentPlayer()._gold())\n const actionLabel = computed(() => tradeMode() === 'buy' ? t(\"rpg.shop.buy\") : t(\"rpg.shop.sell\"))\n const faceSheet = (graphicId, animationName) => ({\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName || \"default\"\n })\n const maxQuantity = computed(() => {\n const item = currentItem()\n if (!item) return 0\n const price = item?.price || 0\n if (price <= 0) return 0\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return Math.max(0, qty)\n }\n return Math.max(1, Math.floor(gold() / price))\n })\n const totalPrice = computed(() => {\n const price = currentItem()?.price || 0\n return price * quantity()\n })\n const displayStats = computed(() => {\n const stats = currentItem()?.stats || {}\n const params = guiData().playerParams || {}\n const order = ['atk', 'def', 'pdef', 'sdef', 'str', 'dex', 'int', 'agi', 'maxHp', 'maxSp']\n const labels = {\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 const orderedKeys = order.filter((key) => stats[key] !== undefined)\n const extraKeys = Object.keys(stats).filter((key) => !order.includes(key))\n const keys = orderedKeys.concat(extraKeys)\n const list = []\n for (const key of keys) {\n const delta = stats[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: labels[key] || key.toUpperCase(),\n delta,\n current,\n next\n })\n }\n return list\n })\n const nav = createTabindexNavigator(selectedItem, { count: () => filteredItems().length }, 'wrap')\n const navTab = createTabindexNavigator(selectedTab, { count: () => tabs.length }, 'wrap')\n const navMode = createTabindexNavigator(selectedModeIndex, { count: () => 2 }, 'wrap')\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index)\n quantity.set(1)\n if (!isItemDisabled(filteredItems()[index])) {\n quantityDialogOpen.set(true)\n }\n }\n }\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index)\n selectedItem.set(0)\n }\n }\n\n function selectMode(mode) {\n return function() {\n tradeMode.set(mode)\n selectedModeIndex.set(mode === 'buy' ? 0 : 1)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n }\n\n function isItemDisabled(item) {\n if (!item) return true\n const price = item?.price || 0\n if (price <= 0) return true\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return qty <= 0\n }\n return gold() < price\n }\n\n function backToMode() {\n return function() {\n tradeView.set('mode')\n }\n }\n\n function changeQuantity(delta) {\n return function() {\n const limit = maxQuantity()\n if (limit <= 0) return\n const nextValue = Math.max(1, Math.min(limit, quantity() + delta))\n if (nextValue !== quantity()) {\n quantity.set(nextValue)\n }\n }\n }\n\n function closeQuantityDialog() {\n return function() {\n quantityDialogOpen.set(false)\n }\n }\n\n const stopEvent = (event) => {\n event?.stopPropagation?.()\n }\n\n const closeQuantityDialogFromPointer = (event) => {\n stopEvent(event)\n quantityDialogOpen.set(false)\n }\n\n const closeShop = () => {\n if (quantityDialogOpen()) {\n quantityDialogOpen.set(false)\n return\n }\n onFinish()\n }\n\n const closeShopFromPointer = (event) => {\n stopEvent(event)\n closeShop()\n }\n\n function confirmTrade() {\n return function() {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n }\n }\n\n effect(() => {\n const count = filteredItems().length\n if (selectedItem() >= count) {\n selectedItem.set(Math.max(0, count - 1))\n }\n })\n\n const modeControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n navMode.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n navMode.next(1)\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n const mode = selectedModeIndex() === 0 ? 'buy' : 'sell'\n tradeMode.set(mode)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n onFinish()\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const itemControls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(1)()\n return\n }\n nav.next(-1)\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(-1)()\n return\n }\n nav.next(1)\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (quantityDialogOpen()) {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n return\n }\n const item = currentItem()\n if (!isItemDisabled(item)) {\n quantityDialogOpen.set(true)\n }\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (quantityDialogOpen()) {\n quantityDialogOpen.set(false)\n return\n }\n tradeView.set('mode')\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const tabControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(1)\n }\n },\n gamepad: {\n enabled: true\n }\n })\n</script>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shop.ce.js","names":[],"sources":["../../../../src/components/gui/shop/shop.ce"],"sourcesContent":[" <DOMContainer width=\"100%\" height=\"100%\">\n <div class=\"rpg-shop-layer\" click={closeShopFromPointer}>\n <button class=\"rpg-ui-close-button\" type=\"button\" title=\"Close\" aria-label=\"Close shop\" click={closeShopFromPointer}>x</button>\n <div class=\"rpg-shop-container rpg-anim-fade-in\" click={stopEvent}>\n <div class=\"rpg-shop-header\">\n <div class=\"rpg-shop-merchant\">\n <div>\n @if (hasFace) {\n <div class=\"rpg-shop-merchant-avatar\">\n <DOMSprite \n sheet={faceSheet(face().id, face().expression)} \n width=\"50px\"\n height=\"50px\"\n objectFit=\"contain\"\n /> \n </div>\n }\n </div>\n <div class=\"rpg-shop-merchant-info\">\n <p>{{ shopMessage() }}</p>\n </div>\n </div>\n <div class=\"rpg-shop-gold\">\n {{ gold() }} {{ goldTerm }}\n </div>\n </div>\n\n <div class=\"rpg-shop-body\">\n <div class=\"rpg-shop-left\">\n @if (tradeView() === 'mode') {\n <div class=\"rpg-shop-content rpg-shop-content-mode\">\n <div class=\"rpg-shop-details rpg-shop-details-mode\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">🛒</div>\n <h2 style=\"margin: 0;\">{t(\"rpg.shop.choose-action\")}</h2>\n </div>\n <div class=\"rpg-shop-trade\">\n <Navigation tabindex={selectedModeIndex} controls={modeControls}>\n <div class=\"rpg-shop-tabs rpg-shop-trade-tabs\">\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 0}}\n click={selectMode('buy')}\n >{t(\"rpg.shop.buy\")}</div>\n <div\n class=\"rpg-shop-tab\"\n class={{active: selectedModeIndex() === 1}}\n click={selectMode('sell')}\n >{t(\"rpg.shop.sell\")}</div>\n </div>\n </Navigation>\n </div>\n </div>\n </div>\n }\n @else {\n <div>\n <Navigation tabindex={selectedTab} controls={tabControls}> \n <div class=\"rpg-shop-tabs\">\n @for ((tab,index) of tabs) {\n <div \n class=\"rpg-shop-tab\" \n class={{active: selectedTab() === index}} \n tabindex={index} \n click={selectTab(index)}\n >{{ tab.label }}</div>\n }\n </div>\n </Navigation>\n\n <div class=\"rpg-shop-content\">\n <div class=\"rpg-shop-grid\">\n <Navigation tabindex={selectedItem} controls={itemControls}> \n @for ((item,index) of filteredItems) { \n <div class=\"rpg-shop-card\" class={{disabled: isItemDisabled(item), selected: selectedItem() === index}} tabindex={index} click={selectItem(index)}>\n <div class=\"rpg-shop-card-icon\">\n @if (item.icon) {\n <DOMSprite \n sheet={iconSheet(item.icon)} \n playing=\"default\" \n width=\"48px\"\n height=\"48px\"\n objectFit=\"contain\"\n />\n }\n </div>\n <div class=\"rpg-shop-card-name\">{{ item.name }}</div>\n <div class=\"rpg-shop-card-price\">{{ item.price }} {{ goldTerm }}</div>\n @if (item.quantity !== undefined) {\n <div class=\"rpg-shop-card-qty\">x{{ item.quantity }}</div>\n }\n @if (item.equipped) {\n <div class=\"rpg-shop-card-tag\">{t(\"rpg.shop.equipped\")}</div>\n }\n </div>\n }\n </Navigation>\n </div>\n\n <div class=\"rpg-shop-details\">\n <div class=\"rpg-shop-details-header\">\n <div class=\"rpg-shop-details-icon\">\n <DOMSprite \n sheet={iconSheet(currentItem()?.icon)} \n playing=\"default\" \n width=\"80px\"\n height=\"80px\"\n objectFit=\"contain\"\n />\n </div>\n <h2 style=\"margin: 0;\">{{ currentItem()?.name || \"\" }}</h2>\n <p style=\"color: #ffd700; font-weight: bold; margin: 8px 0;\">{{ currentItem()?.price ?? 0 }} {{ goldTerm }}</p>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-details-qty\">{t(\"rpg.shop.qty\")}: x{{ currentItem()?.quantity }}</div>\n }\n </div>\n <div>\n @if (currentItem()?.equipped) {\n <div class=\"rpg-shop-equipped\">{t(\"rpg.shop.already-equipped\")}</div>\n }\n </div>\n <div class=\"rpg-shop-details-desc\">\n {{ currentItem()?.description || \"\" }}\n </div>\n <div>\n @if (displayStats().length > 0) {\n <div class=\"rpg-shop-stats\">\n @for ((stat,index) of displayStats) {\n <div class=\"rpg-shop-stat\" class={{positive: stat.delta > 0, negative: stat.delta < 0}}>\n <div class=\"rpg-shop-stat-key\">{{ stat.label }}</div>\n <div class=\"rpg-shop-stat-value\">\n {{ stat.delta > 0 ? '+' : '' }}{{ stat.delta }}\n </div>\n @if (stat.current !== undefined) {\n <div class=\"rpg-shop-stat-current\">{{ stat.current }} → {{ stat.next }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n <button class=\"rpg-shop-btn\" click={backToMode()}>{t(\"rpg.shop.back\")}</button>\n </div>\n </div>\n </div>\n }\n @if (quantityDialogOpen) {\n <div class=\"rpg-shop-modal\" click={closeQuantityDialogFromPointer}>\n <div class=\"rpg-shop-modal-card\" click={stopEvent}>\n <div class=\"rpg-shop-modal-title\">{{ actionLabel }}</div>\n <div class=\"rpg-shop-modal-item\">{{ currentItem()?.name || \"\" }}</div>\n @if (currentItem()?.quantity !== undefined) {\n <div class=\"rpg-shop-modal-qty\">{t(\"rpg.shop.available\")}: x{{ currentItem()?.quantity }}</div>\n }\n <div class=\"rpg-shop-quantity\">\n <div class=\"rpg-shop-quantity-label\">{t(\"rpg.shop.quantity\")}</div>\n <div class=\"rpg-shop-quantity-controls\">\n <button class=\"rpg-shop-btn\" click={changeQuantity(-1)}>-</button>\n <div class=\"rpg-shop-quantity-value\">{{ quantity }}</div>\n <button class=\"rpg-shop-btn\" click={changeQuantity(1)}>+</button>\n </div>\n </div>\n <div class=\"rpg-shop-modal-total\">\n <span>{t(\"rpg.shop.total\")}</span>\n <span>{{ totalPrice() }} {{ goldTerm }}</span>\n </div>\n <div class=\"rpg-shop-modal-actions\">\n <button class=\"rpg-shop-btn rpg-shop-btn-secondary\" click={closeQuantityDialog()}>{t(\"rpg.menu.cancel\")}</button>\n <button class=\"rpg-shop-btn\" click={confirmTrade()}>\n {{ actionLabel() }} x{{ quantity() }}\n </button>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </DOMContainer>\n\n<script>\n import { mount, 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 { t } = engine.i18n()\n const currentPlayer = engine.scene.currentPlayer\n const keyboardControls = engine.globalConfig.keyboardControls\n const iconSheet = (iconId) => ({\n definition: engine.getSpriteSheet(iconId),\n playing: \"default\"\n })\n const goldTerm = engine.globalConfig.goldTerm || 'G'\n\n const selectedItem = signal(0)\n const selectedTab = signal(0)\n const tradeMode = signal('buy')\n const tradeView = signal('mode')\n const selectedModeIndex = signal(0)\n const quantity = signal(1)\n const quantityDialogOpen = signal(false)\n const defaultMessage = t(\"rpg.shop.default-message\")\n const tabs = [\n { id: 'item', label: t(\"rpg.menu.items\") },\n { id: 'weapon', label: t(\"rpg.menu.weapons\") },\n { id: 'armor', label: t(\"rpg.menu.armor\") }\n ]\n\n const { data, onInteraction , onFinish } = defineProps()\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value\n const guiData = computed(() => resolveProp(data) || {})\n const shopMessage = computed(() => {\n const message = resolveProp(guiData().message)\n return message ? String(message) : defaultMessage\n })\n const face = computed(() => resolveProp(guiData().face))\n const hasFace = computed(() => {\n const value = face()\n return value && value.id\n })\n const buyItems = computed(() => guiData().items || [])\n const sellItems = computed(() => guiData().sellItems || [])\n const activeItems = computed(() => tradeMode() === 'buy' ? buyItems() : sellItems())\n const filteredItems = computed(() => {\n const tab = tabs[selectedTab()]\n const items = activeItems()\n if (!tab) return []\n return items.filter((item) => item?.type === tab.id)\n })\n const currentItem = computed(() => filteredItems()[selectedItem()])\n const gold = computed(() => currentPlayer()._gold())\n const actionLabel = computed(() => tradeMode() === 'buy' ? t(\"rpg.shop.buy\") : t(\"rpg.shop.sell\"))\n const faceSheet = (graphicId, animationName) => ({\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName || \"default\"\n })\n const maxQuantity = computed(() => {\n const item = currentItem()\n if (!item) return 0\n const price = item?.price || 0\n if (price <= 0) return 0\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return Math.max(0, qty)\n }\n return Math.max(1, Math.floor(gold() / price))\n })\n const totalPrice = computed(() => {\n const price = currentItem()?.price || 0\n return price * quantity()\n })\n const displayStats = computed(() => {\n const stats = currentItem()?.stats || {}\n const params = guiData().playerParams || {}\n const order = ['atk', 'def', 'pdef', 'sdef', 'str', 'dex', 'int', 'agi', 'maxHp', 'maxSp']\n const labels = {\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 const orderedKeys = order.filter((key) => stats[key] !== undefined)\n const extraKeys = Object.keys(stats).filter((key) => !order.includes(key))\n const keys = orderedKeys.concat(extraKeys)\n const list = []\n for (const key of keys) {\n const delta = stats[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: labels[key] || key.toUpperCase(),\n delta,\n current,\n next\n })\n }\n return list\n })\n const nav = createTabindexNavigator(selectedItem, { count: () => filteredItems().length }, 'wrap')\n const navTab = createTabindexNavigator(selectedTab, { count: () => tabs.length }, 'wrap')\n const navMode = createTabindexNavigator(selectedModeIndex, { count: () => 2 }, 'wrap')\n\n function selectItem(index) {\n return function() {\n selectedItem.set(index)\n quantity.set(1)\n if (!isItemDisabled(filteredItems()[index])) {\n quantityDialogOpen.set(true)\n }\n }\n }\n\n function selectTab(index) {\n return function() {\n selectedTab.set(index)\n selectedItem.set(0)\n }\n }\n\n function selectMode(mode) {\n return function() {\n tradeMode.set(mode)\n selectedModeIndex.set(mode === 'buy' ? 0 : 1)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n }\n\n function isItemDisabled(item) {\n if (!item) return true\n const price = item?.price || 0\n if (price <= 0) return true\n if (tradeMode() === 'sell') {\n const qty = item?.quantity ?? 0\n return qty <= 0\n }\n return gold() < price\n }\n\n function backToMode() {\n return function() {\n tradeView.set('mode')\n }\n }\n\n function changeQuantity(delta) {\n return function() {\n const limit = maxQuantity()\n if (limit <= 0) return\n const nextValue = Math.max(1, Math.min(limit, quantity() + delta))\n if (nextValue !== quantity()) {\n quantity.set(nextValue)\n }\n }\n }\n\n function closeQuantityDialog() {\n return function() {\n quantityDialogOpen.set(false)\n }\n }\n\n const stopEvent = (event) => {\n event?.stopPropagation?.()\n }\n\n const closeQuantityDialogFromPointer = (event) => {\n stopEvent(event)\n quantityDialogOpen.set(false)\n }\n\n const closeShop = () => {\n if (quantityDialogOpen()) {\n quantityDialogOpen.set(false)\n return\n }\n onFinish()\n }\n\n const closeShopFromPointer = (event) => {\n stopEvent(event)\n closeShop()\n }\n\n function confirmTrade() {\n return function() {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n }\n }\n\n effect(() => {\n const count = filteredItems().length\n if (selectedItem() >= count) {\n selectedItem.set(Math.max(0, count - 1))\n }\n })\n\n const modeControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n navMode.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n navMode.next(1)\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n const mode = selectedModeIndex() === 0 ? 'buy' : 'sell'\n tradeMode.set(mode)\n selectedItem.set(0)\n quantity.set(1)\n tradeView.set('items')\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n onFinish()\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const itemControls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(1)()\n return\n }\n nav.next(-1)\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) {\n changeQuantity(-1)()\n return\n }\n nav.next(1)\n }\n },\n action: {\n bind: getKeyboardControlBind(keyboardControls.action),\n keyDown() {\n if (quantityDialogOpen()) {\n const item = currentItem()\n if (!item || isItemDisabled(item)) {\n quantityDialogOpen.set(false)\n return\n }\n const action = tradeMode() === 'buy' ? 'buyItem' : 'sellItem'\n onInteraction(action, { id: item.id, nb: quantity() })\n quantityDialogOpen.set(false)\n return\n }\n const item = currentItem()\n if (!isItemDisabled(item)) {\n quantityDialogOpen.set(true)\n }\n }\n },\n escape: {\n bind: keyboardControls.escape,\n keyDown() {\n if (quantityDialogOpen()) {\n quantityDialogOpen.set(false)\n return\n }\n tradeView.set('mode')\n }\n },\n gamepad: {\n enabled: true\n }\n });\n\n const tabControls = signal({\n left: {\n repeat: true,\n bind: keyboardControls.left,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(-1)\n }\n },\n right: {\n repeat: true,\n bind: keyboardControls.right,\n throttle: 150,\n keyDown() {\n if (quantityDialogOpen()) return\n navTab.next(1)\n }\n },\n gamepad: {\n enabled: true\n }\n })\n</script>\n"],"mappings":"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"}
|