@rpgjs/client 5.0.0-alpha.31 → 5.0.0-alpha.32

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.
@@ -27,7 +27,7 @@ var sp = getEntityProp(currentPlayer, "sp");
27
27
  var spMax = getEntityProp(currentPlayer, "params.maxSp");
28
28
  var percentSp = computed(function () { return (sp() / spMax() * 100) + '%'; });
29
29
  var level = getEntityProp(currentPlayer, "level");
30
- let $this = h(DOMContainer, null, h(DOMElement, { element: "div", attrs: { class: 'rpg-hud' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-avatar' } }, [cond(hasFace(), () => h(DOMElement, { element: "div", attrs: { class: 'rpg-avatar-face' } }, h(DOMSprite, { sheet: computed(() => faceSheet(face())) }))), h(DOMElement, { element: "div", attrs: { class: 'rpg-avatar-level' }, textContent: computed(() => level()) })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-status-bars' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-container' } }, [h(DOMElement, { element: "span", attrs: { class: 'rpg-bar-text' }, textContent: computed(() => 'HP ' + hp() + '/' + hpMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-fill health', style: { width: percentHp } } })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-container' } }, [h(DOMElement, { element: "span", attrs: { class: 'rpg-bar-text' }, textContent: computed(() => 'SP ' + sp() + '/' + spMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-fill mana', style: { width: percentSp } } })])])]));
30
+ let $this = h(DOMContainer, null, h(DOMElement, { element: "div", attrs: { class: 'rpg-hud' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-avatar' } }, [cond(hasFace(), () => h(DOMElement, { element: "div", attrs: { class: 'rpg-avatar-face' } }, h(DOMSprite, { sheet: computed(() => faceSheet(face())), width: 64, height: 64, objectFit: 'contain' }))), h(DOMElement, { element: "div", attrs: { class: 'rpg-avatar-level' }, textContent: computed(() => level()) })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-status-bars' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-container' } }, [h(DOMElement, { element: "span", attrs: { class: 'rpg-bar-text' }, textContent: computed(() => 'HP ' + hp() + '/' + hpMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-fill health', style: { width: percentHp } } })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-container' } }, [h(DOMElement, { element: "span", attrs: { class: 'rpg-bar-text' }, textContent: computed(() => 'SP ' + sp() + '/' + spMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-bar-fill mana', style: { width: percentSp } } })])])]));
31
31
  return $this
32
32
  }
33
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"hud.ce.js","sources":["../../../../src/components/gui/hud/hud.ce"],"sourcesContent":["<DOMContainer>\n <div class=\"rpg-hud\">\n <div class=\"rpg-avatar\">\n @if (hasFace()) {\n <div class=\"rpg-avatar-face\">\n <DOMSprite sheet={faceSheet(face())} />\n </div>\n }\n <div class=\"rpg-avatar-level\">{{ level() }}</div>\n </div>\n <div class=\"rpg-status-bars\">\n <div class=\"rpg-bar-container\">\n <span class=\"rpg-bar-text\">HP {{ hp() }}/{{ hpMax() }}</span>\n <div class=\"rpg-bar-fill health\" style={{width: percentHp}}></div>\n </div>\n <div class=\"rpg-bar-container\">\n <span class=\"rpg-bar-text\">SP {{ sp() }}/{{ spMax() }}</span>\n <div class=\"rpg-bar-fill mana\" style={{width: percentSp}}></div>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { computed } from \"canvasengine\";\n import { getEntityProp } from \"../../../utils/getEntityProp\";\n\n const engine = inject(RpgClientEngine)\n const currentPlayer = engine.scene.currentPlayer\n const { data } = defineProps();\n const { faceset } = data();\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const face = computed(() => resolveProp(data().faceset));\n\n const hasFace = computed(() => {\n const value = face();\n return !!(value && value.id);\n });\n const faceSheet = (faceValue) => ({\n definition: engine.getSpriteSheet(faceValue.id),\n playing: faceValue.expression || \"default\",\n });\n const hp = getEntityProp(currentPlayer, \"hp\")\n const hpMax = getEntityProp(currentPlayer, \"params.maxHp\")\n const percentHp = computed(() => (hp() / hpMax() * 100) + '%')\n\n const sp = getEntityProp(currentPlayer, \"sp\")\n const spMax = getEntityProp(currentPlayer, \"params.maxSp\")\n const percentSp = computed(() => (sp() / spMax() * 100) + '%')\n\n const level = getEntityProp(currentPlayer, \"level\")\n</script>\n \n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hud.ce.js","sources":["../../../../src/components/gui/hud/hud.ce"],"sourcesContent":["<DOMContainer>\n <div class=\"rpg-hud\">\n <div class=\"rpg-avatar\">\n @if (hasFace()) {\n <div class=\"rpg-avatar-face\">\n <DOMSprite \n sheet={faceSheet(face())} \n width={64} \n height={64} \n objectFit=\"contain\" \n />\n </div>\n }\n <div class=\"rpg-avatar-level\">{{ level() }}</div>\n </div>\n <div class=\"rpg-status-bars\">\n <div class=\"rpg-bar-container\">\n <span class=\"rpg-bar-text\">HP {{ hp() }}/{{ hpMax() }}</span>\n <div class=\"rpg-bar-fill health\" style={{width: percentHp}}></div>\n </div>\n <div class=\"rpg-bar-container\">\n <span class=\"rpg-bar-text\">SP {{ sp() }}/{{ spMax() }}</span>\n <div class=\"rpg-bar-fill mana\" style={{width: percentSp}}></div>\n </div>\n </div>\n </div>\n</DOMContainer>\n\n<script>\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\n import { computed } from \"canvasengine\";\n import { getEntityProp } from \"../../../utils/getEntityProp\";\n\n const engine = inject(RpgClientEngine)\n const currentPlayer = engine.scene.currentPlayer\n const { data } = defineProps();\n const { faceset } = data();\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n const face = computed(() => resolveProp(data().faceset));\n\n const hasFace = computed(() => {\n const value = face();\n return !!(value && value.id);\n });\n const faceSheet = (faceValue) => ({\n definition: engine.getSpriteSheet(faceValue.id),\n playing: faceValue.expression || \"default\",\n });\n const hp = getEntityProp(currentPlayer, \"hp\")\n const hpMax = getEntityProp(currentPlayer, \"params.maxHp\")\n const percentHp = computed(() => (hp() / hpMax() * 100) + '%')\n\n const sp = getEntityProp(currentPlayer, \"sp\")\n const spMax = getEntityProp(currentPlayer, \"params.maxSp\")\n const percentSp = computed(() => (sp() / spMax() * 100) + '%')\n\n const level = getEntityProp(currentPlayer, \"level\")\n</script>\n \n"],"names":[],"mappings":"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"}
@@ -116,6 +116,7 @@ var spMax = getEntityProp(currentPlayer, "params.maxSp");
116
116
  var level = getEntityProp(currentPlayer, "level");
117
117
  var exp = getEntityProp(currentPlayer, "exp");
118
118
  var gold = getEntityProp(currentPlayer, "gold");
119
+ var expForNextlevel = computed(function () { return data().expForNextlevel || 0; });
119
120
  var hpPercent = computed(function () {
120
121
  var max = hpMax() || 1;
121
122
  return "".concat(Math.max(0, Math.min(100, (hp() / max) * 100)), "%");
@@ -125,7 +126,7 @@ var spPercent = computed(function () {
125
126
  return "".concat(Math.max(0, Math.min(100, (sp() / max) * 100)), "%");
126
127
  });
127
128
  var expPercent = computed(function () {
128
- var max = exp() || 1;
129
+ var max = expForNextlevel() || 1;
129
130
  return "".concat(Math.max(0, Math.min(100, (exp() / max) * 100)), "%");
130
131
  });
131
132
  var paramsList = computed(function () {
@@ -199,7 +200,7 @@ mount(function (element) {
199
200
  });
200
201
  };
201
202
  });
202
- let $this = h(DOMContainer, { width: '100%', height: '100%', controls: menuControls }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu rpg-anim-fade-in' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-layout' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-left rpg-ui-menu rpg-ui-panel' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-menu-header' }, textContent: 'Menu' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-list' } }, loop(menuEntries(), (entry, index) => h(DOMElement, { element: "div", attrs: { class: ['rpg-ui-menu-item', computed(() => ({ disabled: isMenuDisabled(entry) }))], 'data-selected': computed(() => selectedMenu() === index ? "true" : "false"), tabindex: index, click: selectMenu(index) }, textContent: entry.label })))]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-right' } }, [cond(computed(() => view() === "menu"), () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-panel' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-section-title' }, textContent: 'Status' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-card' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: 'Level' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-value' }, textContent: computed(() => level()) })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: 'Gold' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-value' }, textContent: computed(() => gold()) })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: computed(() => 'HP ' + hp() + '/' + hpMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar' } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar-fill hp', style: { width: hpPercent } } }))]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: computed(() => 'SP ' + sp() + '/' + spMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar' } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar-fill sp', style: { width: spPercent } } }))]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block', style: { gridColumn: "span 2" } } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: computed(() => 'EXP ' + exp()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar' } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar-fill exp', style: { width: expPercent } } }))])]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-section-title' }, textContent: 'Parameters' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-params' } }, loop(paramsList, (param, index) => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-param' } }, [h(DOMElement, { element: "span", textContent: param.label }), h(DOMElement, { element: "span", textContent: param.value })])))])), cond(computed(() => view() === "items"), () => h(component$1, { data: data, onInteraction: onInteraction, onBack: goBack })), cond(computed(() => view() === "skills"), () => h(component$2, { data: data, onBack: goBack })), cond(computed(() => view() === "equip"), () => h(component$3, { data: data, onInteraction: onInteraction, onBack: goBack })), cond(computed(() => view() === "options"), () => h(component$4, { onBack: goBack })), cond(computed(() => view() === "exit"), () => h(component$5, { onConfirm: confirmExit, onBack: goBack }))])]), cond(saveOverlay, () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-overlay' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-overlay-backdrop' } }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-overlay-content' } }, h(component$6, { data: saveLoadData, onFinish: closeSaveOverlay }))]))]));
203
+ let $this = h(DOMContainer, { width: '100%', height: '100%', controls: menuControls }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu rpg-anim-fade-in' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-layout' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-left rpg-ui-menu rpg-ui-panel' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-menu-header' }, textContent: 'Menu' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-list' } }, loop(menuEntries(), (entry, index) => h(DOMElement, { element: "div", attrs: { class: ['rpg-ui-menu-item', computed(() => ({ disabled: isMenuDisabled(entry) }))], 'data-selected': computed(() => selectedMenu() === index ? "true" : "false"), tabindex: index, click: selectMenu(index) }, textContent: entry.label })))]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-right' } }, [cond(computed(() => view() === "menu"), () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-panel' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-section-title' }, textContent: 'Status' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-card' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: 'Level' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-value' }, textContent: computed(() => level()) })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: 'Gold' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-value' }, textContent: computed(() => gold()) })]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: computed(() => 'HP ' + hp() + '/' + hpMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar' } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar-fill hp', style: { width: hpPercent } } }))]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: computed(() => 'SP ' + sp() + '/' + spMax()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar' } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar-fill sp', style: { width: spPercent } } }))]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-block', style: { gridColumn: "span 2" } } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-label' }, textContent: computed(() => 'EXP ' + exp() + '/' + expForNextlevel()) }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar' } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-status-bar-fill exp', style: { width: expPercent } } }))])]), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-section-title' }, textContent: 'Parameters' }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-params' } }, loop(paramsList, (param, index) => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-param' } }, [h(DOMElement, { element: "span", textContent: param.label }), h(DOMElement, { element: "span", textContent: param.value })])))])), cond(computed(() => view() === "items"), () => h(component$1, { data: data, onInteraction: onInteraction, onBack: goBack })), cond(computed(() => view() === "skills"), () => h(component$2, { data: data, onBack: goBack })), cond(computed(() => view() === "equip"), () => h(component$3, { data: data, onInteraction: onInteraction, onBack: goBack })), cond(computed(() => view() === "options"), () => h(component$4, { onBack: goBack })), cond(computed(() => view() === "exit"), () => h(component$5, { onConfirm: confirmExit, onBack: goBack }))])]), cond(saveOverlay, () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-overlay' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-overlay-backdrop' } }), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-main-menu-overlay-content' } }, h(component$6, { data: saveLoadData, onFinish: closeSaveOverlay }))]))]));
203
204
  return $this
204
205
  }
205
206
 
@@ -1 +1 @@
1
- {"version":3,"file":"main-menu.ce.js","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\">\n <div class=\"rpg-ui-main-menu-layout\">\n <div class=\"rpg-ui-main-menu-left rpg-ui-menu rpg-ui-panel\">\n <div class=\"rpg-ui-menu-header\">Menu</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\">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\">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\">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()}</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\">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\"></div>\n <div class=\"rpg-ui-main-menu-overlay-content\">\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\n const engine = inject(RpgClientEngine);\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: \"Items\" },\n { id: \"skills\", label: \"Skills\" },\n { id: \"equip\", label: \"Equip\" },\n { id: \"options\", label: \"Options\" },\n { id: \"save\", label: \"Save\" },\n { id: \"exit\", label: \"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 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 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 = exp() || 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: 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 engine.gamePause.set(true);\n return () => {\n delay(() => {\n engine.stopProcessingInput = false;\n engine.gamePause.set(false);\n });\n }\n });\n</script>\n"],"names":["ItemsMenu","SkillsMenu","EquipMenu","OptionsMenu","ExitMenu","SaveLoadComponent"],"mappings":"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"}
1
+ {"version":3,"file":"main-menu.ce.js","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\">\n <div class=\"rpg-ui-main-menu-layout\">\n <div class=\"rpg-ui-main-menu-left rpg-ui-menu rpg-ui-panel\">\n <div class=\"rpg-ui-menu-header\">Menu</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\">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\">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\">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\">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\"></div>\n <div class=\"rpg-ui-main-menu-overlay-content\">\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\n const engine = inject(RpgClientEngine);\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: \"Items\" },\n { id: \"skills\", label: \"Skills\" },\n { id: \"equip\", label: \"Equip\" },\n { id: \"options\", label: \"Options\" },\n { id: \"save\", label: \"Save\" },\n { id: \"exit\", label: \"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 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: 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 engine.gamePause.set(true);\n return () => {\n delay(() => {\n engine.stopProcessingInput = false;\n engine.gamePause.set(false);\n });\n }\n });\n</script>\n"],"names":["ItemsMenu","SkillsMenu","EquipMenu","OptionsMenu","ExitMenu","SaveLoadComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpgjs/client",
3
- "version": "5.0.0-alpha.31",
3
+ "version": "5.0.0-alpha.32",
4
4
  "description": "RPGJS is a framework for creating RPG/MMORPG games",
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -22,10 +22,10 @@
22
22
  "pixi.js": "^8.9.2"
23
23
  },
24
24
  "dependencies": {
25
- "@rpgjs/ui-css": "5.0.0-alpha.31",
26
- "@rpgjs/client": "5.0.0-alpha.31",
27
- "@rpgjs/common": "5.0.0-alpha.31",
28
- "@rpgjs/server": "5.0.0-alpha.31",
25
+ "@rpgjs/ui-css": "5.0.0-alpha.32",
26
+ "@rpgjs/client": "5.0.0-alpha.32",
27
+ "@rpgjs/common": "5.0.0-alpha.32",
28
+ "@rpgjs/server": "5.0.0-alpha.32",
29
29
  "@signe/di": "^2.8.2",
30
30
  "@signe/room": "^2.8.2",
31
31
  "@signe/sync": "^2.8.2",
@@ -3,7 +3,12 @@
3
3
  <div class="rpg-avatar">
4
4
  @if (hasFace()) {
5
5
  <div class="rpg-avatar-face">
6
- <DOMSprite sheet={faceSheet(face())} />
6
+ <DOMSprite
7
+ sheet={faceSheet(face())}
8
+ width={64}
9
+ height={64}
10
+ objectFit="contain"
11
+ />
7
12
  </div>
8
13
  }
9
14
  <div class="rpg-avatar-level">{{ level() }}</div>
@@ -41,7 +41,7 @@
41
41
  </div>
42
42
  </div>
43
43
  <div class="rpg-ui-main-menu-status-block" style={{gridColumn: "span 2"}}>
44
- <div class="rpg-ui-main-menu-status-label">EXP {exp()}</div>
44
+ <div class="rpg-ui-main-menu-status-label">EXP {exp()}/{expForNextlevel()}</div>
45
45
  <div class="rpg-ui-main-menu-status-bar">
46
46
  <div class="rpg-ui-main-menu-status-bar-fill exp" style={{width: expPercent}}></div>
47
47
  </div>
@@ -211,6 +211,7 @@
211
211
  const level = getEntityProp(currentPlayer, "level");
212
212
  const exp = getEntityProp(currentPlayer, "exp");
213
213
  const gold = getEntityProp(currentPlayer, "gold");
214
+ const expForNextlevel = computed(() => data().expForNextlevel || 0);
214
215
  const hpPercent = computed(() => {
215
216
  const max = hpMax() || 1;
216
217
  return `${Math.max(0, Math.min(100, (hp() / max) * 100))}%`;
@@ -220,7 +221,7 @@
220
221
  return `${Math.max(0, Math.min(100, (sp() / max) * 100))}%`;
221
222
  });
222
223
  const expPercent = computed(() => {
223
- const max = exp() || 1;
224
+ const max = expForNextlevel() || 1;
224
225
  return `${Math.max(0, Math.min(100, (exp() / max) * 100))}%`;
225
226
  });
226
227