@rpgjs/client 5.0.0-alpha.43 → 5.0.0-alpha.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/Game/AnimationManager.js +25 -24
  2. package/dist/Game/AnimationManager.js.map +1 -1
  3. package/dist/Game/Event.js +11 -10
  4. package/dist/Game/Event.js.map +1 -1
  5. package/dist/Game/Map.js +78 -94
  6. package/dist/Game/Map.js.map +1 -1
  7. package/dist/Game/Object.js +182 -216
  8. package/dist/Game/Object.js.map +1 -1
  9. package/dist/Game/Player.js +11 -10
  10. package/dist/Game/Player.js.map +1 -1
  11. package/dist/Gui/Gui.js +440 -473
  12. package/dist/Gui/Gui.js.map +1 -1
  13. package/dist/Gui/NotificationManager.js +48 -50
  14. package/dist/Gui/NotificationManager.js.map +1 -1
  15. package/dist/Resource.js +132 -113
  16. package/dist/Resource.js.map +1 -1
  17. package/dist/RpgClientEngine.js +1333 -1486
  18. package/dist/RpgClientEngine.js.map +1 -1
  19. package/dist/Sound.js +162 -92
  20. package/dist/Sound.js.map +1 -1
  21. package/dist/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorate.js +9 -0
  22. package/dist/_virtual/_@oxc-project_runtime@0.115.0/helpers/decorateMetadata.js +6 -0
  23. package/dist/components/animations/animation.ce.js +22 -19
  24. package/dist/components/animations/animation.ce.js.map +1 -1
  25. package/dist/components/animations/hit.ce.js +67 -68
  26. package/dist/components/animations/hit.ce.js.map +1 -1
  27. package/dist/components/animations/index.js +9 -8
  28. package/dist/components/animations/index.js.map +1 -1
  29. package/dist/components/character.ce.js +390 -314
  30. package/dist/components/character.ce.js.map +1 -1
  31. package/dist/components/dynamics/parse-value.js +42 -52
  32. package/dist/components/dynamics/parse-value.js.map +1 -1
  33. package/dist/components/dynamics/text.ce.js +71 -139
  34. package/dist/components/dynamics/text.ce.js.map +1 -1
  35. package/dist/components/gui/box.ce.js +26 -25
  36. package/dist/components/gui/box.ce.js.map +1 -1
  37. package/dist/components/gui/dialogbox/index.ce.js +202 -149
  38. package/dist/components/gui/dialogbox/index.ce.js.map +1 -1
  39. package/dist/components/gui/gameover.ce.js +190 -138
  40. package/dist/components/gui/gameover.ce.js.map +1 -1
  41. package/dist/components/gui/hud/hud.ce.js +90 -33
  42. package/dist/components/gui/hud/hud.ce.js.map +1 -1
  43. package/dist/components/gui/index.js +14 -0
  44. package/dist/components/gui/menu/equip-menu.ce.js +478 -346
  45. package/dist/components/gui/menu/equip-menu.ce.js.map +1 -1
  46. package/dist/components/gui/menu/exit-menu.ce.js +52 -33
  47. package/dist/components/gui/menu/exit-menu.ce.js.map +1 -1
  48. package/dist/components/gui/menu/items-menu.ce.js +341 -226
  49. package/dist/components/gui/menu/items-menu.ce.js.map +1 -1
  50. package/dist/components/gui/menu/main-menu.ce.js +414 -205
  51. package/dist/components/gui/menu/main-menu.ce.js.map +1 -1
  52. package/dist/components/gui/menu/options-menu.ce.js +46 -26
  53. package/dist/components/gui/menu/options-menu.ce.js.map +1 -1
  54. package/dist/components/gui/menu/skills-menu.ce.js +104 -50
  55. package/dist/components/gui/menu/skills-menu.ce.js.map +1 -1
  56. package/dist/components/gui/mobile/index.js +18 -21
  57. package/dist/components/gui/mobile/index.js.map +1 -1
  58. package/dist/components/gui/mobile/mobile.ce.js +76 -15
  59. package/dist/components/gui/mobile/mobile.ce.js.map +1 -1
  60. package/dist/components/gui/notification/notification.ce.js +62 -36
  61. package/dist/components/gui/notification/notification.ce.js.map +1 -1
  62. package/dist/components/gui/save-load.ce.js +386 -239
  63. package/dist/components/gui/save-load.ce.js.map +1 -1
  64. package/dist/components/gui/shop/shop.ce.js +649 -319
  65. package/dist/components/gui/shop/shop.ce.js.map +1 -1
  66. package/dist/components/gui/title-screen.ce.js +187 -145
  67. package/dist/components/gui/title-screen.ce.js.map +1 -1
  68. package/dist/components/index.js +4 -0
  69. package/dist/components/prebuilt/hp-bar.ce.js +114 -104
  70. package/dist/components/prebuilt/hp-bar.ce.js.map +1 -1
  71. package/dist/components/prebuilt/index.js +2 -0
  72. package/dist/components/prebuilt/light-halo.ce.js +92 -74
  73. package/dist/components/prebuilt/light-halo.ce.js.map +1 -1
  74. package/dist/components/scenes/canvas.ce.js +58 -42
  75. package/dist/components/scenes/canvas.ce.js.map +1 -1
  76. package/dist/components/scenes/draw-map.ce.js +87 -64
  77. package/dist/components/scenes/draw-map.ce.js.map +1 -1
  78. package/dist/components/scenes/event-layer.ce.js +26 -16
  79. package/dist/components/scenes/event-layer.ce.js.map +1 -1
  80. package/dist/core/inject.js +11 -10
  81. package/dist/core/inject.js.map +1 -1
  82. package/dist/core/setup.js +13 -13
  83. package/dist/core/setup.js.map +1 -1
  84. package/dist/index.js +44 -41
  85. package/dist/module.js +169 -168
  86. package/dist/module.js.map +1 -1
  87. package/dist/node_modules/.pnpm/@signe_di@2.8.3/node_modules/@signe/di/dist/index.js +209 -298
  88. package/dist/node_modules/.pnpm/@signe_di@2.8.3/node_modules/@signe/di/dist/index.js.map +1 -1
  89. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js +430 -507
  90. package/dist/node_modules/.pnpm/@signe_reactive@2.8.3/node_modules/@signe/reactive/dist/index.js.map +1 -1
  91. package/dist/node_modules/.pnpm/@signe_room@2.8.3/node_modules/@signe/room/dist/index.js +2062 -2571
  92. package/dist/node_modules/.pnpm/@signe_room@2.8.3/node_modules/@signe/room/dist/index.js.map +1 -1
  93. package/dist/node_modules/.pnpm/@signe_sync@2.8.3/node_modules/@signe/sync/dist/chunk-7QVYU63E.js +8 -3
  94. package/dist/node_modules/.pnpm/@signe_sync@2.8.3/node_modules/@signe/sync/dist/chunk-7QVYU63E.js.map +1 -1
  95. package/dist/node_modules/.pnpm/@signe_sync@2.8.3/node_modules/@signe/sync/dist/client/index.js +78 -101
  96. package/dist/node_modules/.pnpm/@signe_sync@2.8.3/node_modules/@signe/sync/dist/client/index.js.map +1 -1
  97. package/dist/node_modules/.pnpm/@signe_sync@2.8.3/node_modules/@signe/sync/dist/index.js +264 -401
  98. package/dist/node_modules/.pnpm/@signe_sync@2.8.3/node_modules/@signe/sync/dist/index.js.map +1 -1
  99. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js +9 -7
  100. package/dist/node_modules/.pnpm/dset@3.1.4/node_modules/dset/dist/index.js.map +1 -1
  101. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js +106 -165
  102. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-HAC622V3.js.map +1 -1
  103. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js +361 -461
  104. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/chunk-S74YV6PU.js.map +1 -1
  105. package/dist/node_modules/.pnpm/partysocket@1.1.3/node_modules/partysocket/dist/index.js +2 -0
  106. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js +3633 -4280
  107. package/dist/node_modules/.pnpm/zod@3.24.2/node_modules/zod/lib/index.js.map +1 -1
  108. package/dist/presets/animation.js +37 -25
  109. package/dist/presets/animation.js.map +1 -1
  110. package/dist/presets/faceset.js +49 -22
  111. package/dist/presets/faceset.js.map +1 -1
  112. package/dist/presets/icon.js +13 -13
  113. package/dist/presets/icon.js.map +1 -1
  114. package/dist/presets/index.js +15 -14
  115. package/dist/presets/index.js.map +1 -1
  116. package/dist/presets/lpc.js +96 -93
  117. package/dist/presets/lpc.js.map +1 -1
  118. package/dist/presets/rmspritesheet.js +40 -39
  119. package/dist/presets/rmspritesheet.js.map +1 -1
  120. package/dist/services/AbstractSocket.js +10 -8
  121. package/dist/services/AbstractSocket.js.map +1 -1
  122. package/dist/services/keyboardControls.js +20 -18
  123. package/dist/services/keyboardControls.js.map +1 -1
  124. package/dist/services/loadMap.js +120 -36
  125. package/dist/services/loadMap.js.map +1 -1
  126. package/dist/services/mmorpg.js +128 -136
  127. package/dist/services/mmorpg.js.map +1 -1
  128. package/dist/services/save.js +74 -66
  129. package/dist/services/save.js.map +1 -1
  130. package/dist/services/standalone.js +165 -167
  131. package/dist/services/standalone.js.map +1 -1
  132. package/dist/utils/getEntityProp.js +49 -51
  133. package/dist/utils/getEntityProp.js.map +1 -1
  134. package/package.json +8 -8
  135. package/src/components/character.ce +1 -1
  136. package/src/components/scenes/draw-map.ce +3 -1
  137. package/dist/index.js.map +0 -1
@@ -1,152 +1,205 @@
1
- import { useProps, useDefineProps, signal, computed, mount, effect, createTabindexNavigator, h, DOMContainer, DOMElement, cond, Navigation, loop, DOMSprite } from 'canvasengine';
2
- import { inject } from '../../../core/inject.js';
3
- import { RpgClientEngine } from '../../../RpgClientEngine.js';
4
- import { delay } from '@rpgjs/common';
5
-
1
+ import { inject } from "../../../core/inject.js";
2
+ import { RpgClientEngine } from "../../../RpgClientEngine.js";
3
+ import { DOMContainer, DOMElement, DOMSprite, Navigation, computed, cond, createTabindexNavigator, effect, h, loop, mount, signal, useDefineProps, useProps } from "canvasengine";
4
+ import { delay } from "@rpgjs/common";
5
+ //#region src/components/gui/dialogbox/index.ce
6
6
  function component($$props) {
7
- useProps($$props);
8
- const defineProps = useDefineProps($$props);
9
- var engine = inject(RpgClientEngine);
10
- engine.scene.currentPlayer;
11
- var keyboardControls = engine.globalConfig.keyboardControls;
12
- engine.stopProcessingInput = true;
13
- var selectedItem = signal(0);
14
- var _a = defineProps(), data = _a.data, onFinish = _a.onFinish; _a.onInteraction;
15
- var _b = data(), message = _b.message, choices = _b.choices, face = _b.face, speaker = _b.speaker, position = _b.position, typewriterEffect = _b.typewriterEffect; _b.autoClose;
16
- var fullWidth = computed(function () { return data().fullWidth || false; });
17
- var resolveProp = function (value) { return typeof value === "function" ? value() : value; };
18
- var speakerName = computed(function () {
19
- var value = resolveProp(speaker);
20
- return value ? String(value) : "";
21
- });
22
- var dialogPosition = computed(function () { return resolveProp(position) || "bottom"; });
23
- var isFullWidth = computed(function () { return resolveProp(fullWidth) !== false; });
24
- var hasFace = computed(function () { return !!resolveProp(face); });
25
- var displayMessage = signal("");
26
- var fullMessage = signal("");
27
- var isTyping = signal(false);
28
- var typewriterTimer = null;
29
- mount(function (element) {
30
- });
31
- var startTypewriter = function (text) {
32
- if (typewriterTimer)
33
- clearInterval(typewriterTimer);
34
- displayMessage.set("");
35
- if (!text)
36
- return;
37
- var index = 0;
38
- isTyping.set(true);
39
- typewriterTimer = setInterval(function () {
40
- index += 1;
41
- displayMessage.set(text.slice(0, index));
42
- if (index >= text.length) {
43
- clearInterval(typewriterTimer);
44
- typewriterTimer = null;
45
- isTyping.set(false);
46
- }
47
- }, 20);
48
- };
49
- var finishTyping = function () {
50
- if (typewriterTimer)
51
- clearInterval(typewriterTimer);
52
- typewriterTimer = null;
53
- displayMessage.set(fullMessage());
54
- isTyping.set(false);
55
- };
56
- effect(function () {
57
- var text = resolveProp(message) || "";
58
- fullMessage.set(text);
59
- var useTypewriter = resolveProp(typewriterEffect) !== false;
60
- if (!useTypewriter) {
61
- finishTyping();
62
- return;
63
- }
64
- startTypewriter(text);
65
- });
66
- var hasChoices = computed(function () { return choices.length > 0; });
67
- var showIndicator = computed(function () { return !hasChoices() && !isTyping(); });
68
- var nav = createTabindexNavigator(selectedItem, { count: function () { return choices.length; } }, 'wrap');
69
- function selectChoice(index) {
70
- return function () {
71
- selectedItem.set(index);
72
- onSelect(index);
73
- };
74
- }
75
- function _onFinish(value) {
76
- if (onFinish)
77
- onFinish(value);
7
+ useProps($$props);
8
+ const defineProps = useDefineProps($$props);
9
+ var engine = inject(RpgClientEngine);
10
+ engine.scene.currentPlayer;
11
+ var keyboardControls = engine.globalConfig.keyboardControls;
12
+ engine.stopProcessingInput = true;
13
+ var selectedItem = signal(0), _a = defineProps(), data = _a.data, onFinish = _a.onFinish;
14
+ _a.onInteraction;
15
+ var _b = data(), message = _b.message, choices = _b.choices, face = _b.face, speaker = _b.speaker, position = _b.position, typewriterEffect = _b.typewriterEffect;
16
+ _b.autoClose;
17
+ var fullWidth = computed(function() {
18
+ return data().fullWidth || false;
19
+ });
20
+ var resolveProp = function(value) {
21
+ return typeof value === "function" ? value() : value;
22
+ };
23
+ var speakerName = computed(function() {
24
+ var value = resolveProp(speaker);
25
+ return value ? String(value) : "";
26
+ });
27
+ var dialogPosition = computed(function() {
28
+ return resolveProp(position) || "bottom";
29
+ });
30
+ var isFullWidth = computed(function() {
31
+ return resolveProp(fullWidth) !== false;
32
+ });
33
+ var hasFace = computed(function() {
34
+ return !!resolveProp(face);
35
+ });
36
+ var displayMessage = signal("");
37
+ var fullMessage = signal("");
38
+ var isTyping = signal(false);
39
+ var typewriterTimer = null;
40
+ mount(function(element) {});
41
+ var startTypewriter = function(text) {
42
+ if (typewriterTimer) clearInterval(typewriterTimer);
43
+ displayMessage.set("");
44
+ if (!text) return;
45
+ var index = 0;
46
+ isTyping.set(true);
47
+ typewriterTimer = setInterval(function() {
48
+ index += 1;
49
+ displayMessage.set(text.slice(0, index));
50
+ if (index >= text.length) {
51
+ clearInterval(typewriterTimer);
52
+ typewriterTimer = null;
53
+ isTyping.set(false);
54
+ }
55
+ }, 20);
56
+ };
57
+ var finishTyping = function() {
58
+ if (typewriterTimer) clearInterval(typewriterTimer);
59
+ typewriterTimer = null;
60
+ displayMessage.set(fullMessage());
61
+ isTyping.set(false);
62
+ };
63
+ effect(function() {
64
+ var text = resolveProp(message) || "";
65
+ fullMessage.set(text);
66
+ if (!(resolveProp(typewriterEffect) !== false)) {
67
+ finishTyping();
68
+ return;
69
+ }
70
+ startTypewriter(text);
71
+ });
72
+ var hasChoices = computed(function() {
73
+ return choices.length > 0;
74
+ });
75
+ var showIndicator = computed(function() {
76
+ return !hasChoices() && !isTyping();
77
+ });
78
+ var nav = createTabindexNavigator(selectedItem, { count: function() {
79
+ return choices.length;
80
+ } }, "wrap");
81
+ function selectChoice(index) {
82
+ return function() {
83
+ selectedItem.set(index);
84
+ onSelect(index);
85
+ };
86
+ }
87
+ function _onFinish(value) {
88
+ if (onFinish) onFinish(value);
89
+ }
90
+ var onSelect = function(index) {
91
+ _onFinish(index);
92
+ };
93
+ var controls = signal({
94
+ up: {
95
+ repeat: true,
96
+ bind: keyboardControls.up,
97
+ throttle: 150,
98
+ keyDown: function() {
99
+ if (!hasChoices()) return;
100
+ nav.next(-1);
101
+ }
102
+ },
103
+ down: {
104
+ repeat: true,
105
+ bind: keyboardControls.down,
106
+ throttle: 150,
107
+ keyDown: function() {
108
+ if (!hasChoices()) return;
109
+ nav.next(1);
110
+ }
111
+ },
112
+ action: {
113
+ bind: keyboardControls.action,
114
+ keyDown: function() {
115
+ if (isTyping()) {
116
+ finishTyping();
117
+ return;
118
+ }
119
+ if (!hasChoices()) return;
120
+ onSelect(selectedItem());
121
+ }
122
+ },
123
+ gamepad: { enabled: true }
124
+ });
125
+ var dialogControls = signal({ action: {
126
+ bind: keyboardControls.action,
127
+ keyDown: function() {
128
+ if (isTyping()) {
129
+ finishTyping();
130
+ return;
131
+ }
132
+ if (hasChoices()) return;
133
+ _onFinish();
134
+ }
135
+ } });
136
+ var faceSheet = function(graphicId, animationName) {
137
+ return {
138
+ definition: engine.getSpriteSheet(graphicId),
139
+ playing: animationName
140
+ };
141
+ };
142
+ mount(function(element) {
143
+ return function() {
144
+ delay(function() {
145
+ engine.stopProcessingInput = false;
146
+ });
147
+ };
148
+ });
149
+ return h(DOMContainer, {
150
+ width: "100%",
151
+ height: "100%",
152
+ controls: dialogControls
153
+ }, h(DOMElement, {
154
+ element: "div",
155
+ attrs: {
156
+ class: "rpg-ui-dialog-container",
157
+ "data-position": computed(() => dialogPosition()),
158
+ "data-full-width": computed(() => isFullWidth() ? "true" : "false"),
159
+ "data-has-face": computed(() => hasFace() ? "true" : "false")
160
+ }
161
+ }, h(DOMElement, {
162
+ element: "div",
163
+ attrs: { class: "rpg-ui-dialog rpg-anim-fade-in" }
164
+ }, [h(DOMElement, {
165
+ element: "div",
166
+ attrs: { class: "rpg-ui-dialog-body" }
167
+ }, [h(DOMElement, { element: "div" }, [
168
+ cond(speakerName(), () => h(DOMElement, {
169
+ element: "div",
170
+ attrs: { class: "rpg-ui-dialog-speaker" },
171
+ textContent: computed(() => speakerName())
172
+ })),
173
+ h(DOMElement, {
174
+ element: "div",
175
+ attrs: { class: "rpg-ui-dialog-content" },
176
+ textContent: computed(() => displayMessage())
177
+ }),
178
+ cond(hasChoices(), () => h(Navigation, {
179
+ tabindex: selectedItem,
180
+ controls
181
+ }, h(DOMElement, {
182
+ element: "div",
183
+ attrs: { class: "rpg-ui-dialog-choices" }
184
+ }, loop(choices, (choice, index) => h(DOMElement, {
185
+ element: "div",
186
+ attrs: {
187
+ class: ["rpg-ui-dialog-choice", computed(() => ({ active: selectedItem() === index }))],
188
+ tabindex: index,
189
+ "data-choice-index": index,
190
+ click: selectChoice(index)
191
+ },
192
+ textContent: choice.text
193
+ })))))
194
+ ]), cond(hasFace(), () => h(DOMElement, {
195
+ element: "div",
196
+ attrs: { class: "rpg-ui-dialog-face" }
197
+ }, h(DOMSprite, { sheet: computed(() => faceSheet(face.id, face.expression)) })))]), cond(showIndicator, () => h(DOMElement, {
198
+ element: "div",
199
+ attrs: { class: "rpg-ui-dialog-indicator" }
200
+ }))])));
78
201
  }
79
- var onSelect = function (index) {
80
- _onFinish(index);
81
- };
82
- var controls = signal({
83
- up: {
84
- repeat: true,
85
- bind: keyboardControls.up,
86
- throttle: 150,
87
- keyDown: function () {
88
- if (!hasChoices())
89
- return;
90
- nav.next(-1);
91
- }
92
- },
93
- down: {
94
- repeat: true,
95
- bind: keyboardControls.down,
96
- throttle: 150,
97
- keyDown: function () {
98
- if (!hasChoices())
99
- return;
100
- nav.next(1);
101
- }
102
- },
103
- action: {
104
- bind: keyboardControls.action,
105
- keyDown: function () {
106
- if (isTyping()) {
107
- finishTyping();
108
- return;
109
- }
110
- if (!hasChoices())
111
- return;
112
- onSelect(selectedItem());
113
- }
114
- },
115
- gamepad: {
116
- enabled: true
117
- }
118
- });
119
- var dialogControls = signal({
120
- action: {
121
- bind: keyboardControls.action,
122
- keyDown: function () {
123
- if (isTyping()) {
124
- finishTyping();
125
- return;
126
- }
127
- if (hasChoices())
128
- return;
129
- _onFinish();
130
- }
131
- },
132
- });
133
- var faceSheet = function (graphicId, animationName) {
134
- return {
135
- definition: engine.getSpriteSheet(graphicId),
136
- playing: animationName,
137
- };
138
- };
139
- mount(function (element) {
140
- return function () {
141
- // Wait destroy is finished before start processing input
142
- delay(function () {
143
- engine.stopProcessingInput = false;
144
- });
145
- };
146
- });
147
- let $this = h(DOMContainer, { width: '100%', height: '100%', controls: dialogControls }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-container', 'data-position': computed(() => dialogPosition()), 'data-full-width': computed(() => isFullWidth() ? "true" : "false"), 'data-has-face': computed(() => hasFace() ? "true" : "false") } }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog rpg-anim-fade-in' } }, [h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-body' } }, [h(DOMElement, { element: "div" }, [cond(speakerName(), () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-speaker' }, textContent: computed(() => speakerName()) })), h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-content' }, textContent: computed(() => displayMessage()) }), cond(hasChoices(), () => h(Navigation, { tabindex: selectedItem, controls: controls }, h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-choices' } }, loop(choices, (choice, index) => h(DOMElement, { element: "div", attrs: { class: ['rpg-ui-dialog-choice', computed(() => ({ active: selectedItem() === index }))], tabindex: index, 'data-choice-index': index, click: selectChoice(index) }, textContent: choice.text })))))]), cond(hasFace(), () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-face' } }, h(DOMSprite, { sheet: computed(() => faceSheet(face.id, face.expression)) })))]), cond(showIndicator, () => h(DOMElement, { element: "div", attrs: { class: 'rpg-ui-dialog-indicator' } }))])));
148
- return $this
149
- }
150
-
202
+ //#endregion
151
203
  export { component as default };
152
- //# sourceMappingURL=index.ce.js.map
204
+
205
+ //# sourceMappingURL=index.ce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.ce.js","sources":["../../../../src/components/gui/dialogbox/index.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={dialogControls}>\n <div\n class=\"rpg-ui-dialog-container\"\n data-position={dialogPosition()}\n data-full-width={isFullWidth() ? \"true\" : \"false\"}\n data-has-face={hasFace() ? \"true\" : \"false\"}\n >\n <div class=\"rpg-ui-dialog rpg-anim-fade-in\">\n <div class=\"rpg-ui-dialog-body\">\n <div>\n @if (speakerName()) {\n <div class=\"rpg-ui-dialog-speaker\">{speakerName()}</div>\n }\n <div class=\"rpg-ui-dialog-content\">\n {displayMessage()}\n </div>\n @if (hasChoices()) {\n <Navigation tabindex={selectedItem} controls={controls}>\n <div class=\"rpg-ui-dialog-choices\">\n @for ((choice,index) of choices) {\n <div\n class=\"rpg-ui-dialog-choice\"\n class={{active: selectedItem() === index}}\n tabindex={index}\n data-choice-index={index}\n click={selectChoice(index)}\n >{{ choice.text }}</div>\n }\n </div>\n </Navigation>\n }\n </div>\n @if (hasFace()) {\n <div class=\"rpg-ui-dialog-face\">\n <DOMSprite sheet={faceSheet(face.id, face.expression)} />\n </div>\n }\n </div>\n @if (showIndicator) {\n <div class=\"rpg-ui-dialog-indicator\"></div>\n }\n </div>\n </div>\n</DOMContainer>\n \n<script>\n import { effect, signal, computed, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\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 engine.stopProcessingInput = true;\n\n const selectedItem = signal(0)\n let isDestroyed = false;\n\n const {\n data,\n onFinish,\n onInteraction\n } = defineProps();\n\n const { message, choices, face, speaker, position, typewriterEffect, autoClose } = data();\n const fullWidth = computed(() => data().fullWidth || false);\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n\n const speakerName = computed(() => {\n const value = resolveProp(speaker);\n return value ? String(value) : \"\";\n });\n\n const dialogPosition = computed(() => resolveProp(position) || \"bottom\");\n const isFullWidth = computed(() => resolveProp(fullWidth) !== false);\n const hasFace = computed(() => !!resolveProp(face));\n\n const displayMessage = signal(\"\");\n const fullMessage = signal(\"\");\n const isTyping = signal(false);\n let typewriterTimer = null;\n let rootElement = null;\n\n mount((element) => {\n rootElement = element;\n });\n\n const startTypewriter = (text) => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n displayMessage.set(\"\");\n if (!text) return;\n let index = 0;\n isTyping.set(true);\n typewriterTimer = setInterval(() => {\n index += 1;\n displayMessage.set(text.slice(0, index));\n if (index >= text.length) {\n clearInterval(typewriterTimer);\n typewriterTimer = null;\n isTyping.set(false);\n }\n }, 20);\n };\n\n const finishTyping = () => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n typewriterTimer = null;\n displayMessage.set(fullMessage());\n isTyping.set(false);\n };\n\n effect(() => {\n const text = resolveProp(message) || \"\";\n fullMessage.set(text);\n const useTypewriter = resolveProp(typewriterEffect) !== false;\n if (!useTypewriter) {\n finishTyping();\n return;\n }\n startTypewriter(text);\n });\n\n\n const hasChoices = computed(() => choices.length > 0);\n const showIndicator = computed(() => !hasChoices() && !isTyping());\n const nav = createTabindexNavigator(selectedItem, { count: () => choices.length }, 'wrap');\n\n function selectChoice(index) {\n return function() {\n selectedItem.set(index);\n onSelect(index);\n }\n }\n\n function _onFinish(value) {\n if (onFinish) onFinish(value);\n }\n\n const onSelect = (index) => {\n _onFinish(index);\n };\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (!hasChoices()) return;\n onSelect(selectedItem());\n }\n },\n gamepad: {\n enabled: true\n }\n });\n \n const dialogControls = signal({\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (hasChoices()) return;\n _onFinish();\n }\n },\n })\n\n const faceSheet = (graphicId, animationName) => {\n return {\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName,\n };\n }\n\n mount((element) => {\n return () => {\n isDestroyed = true;\n // Wait destroy is finished before start processing input\n delay(() => {\n engine.stopProcessingInput = false;\n })\n }\n })\n</script>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.ce.js","names":[],"sources":["../../../../src/components/gui/dialogbox/index.ce"],"sourcesContent":["<DOMContainer width=\"100%\" height=\"100%\" controls={dialogControls}>\n <div\n class=\"rpg-ui-dialog-container\"\n data-position={dialogPosition()}\n data-full-width={isFullWidth() ? \"true\" : \"false\"}\n data-has-face={hasFace() ? \"true\" : \"false\"}\n >\n <div class=\"rpg-ui-dialog rpg-anim-fade-in\">\n <div class=\"rpg-ui-dialog-body\">\n <div>\n @if (speakerName()) {\n <div class=\"rpg-ui-dialog-speaker\">{speakerName()}</div>\n }\n <div class=\"rpg-ui-dialog-content\">\n {displayMessage()}\n </div>\n @if (hasChoices()) {\n <Navigation tabindex={selectedItem} controls={controls}>\n <div class=\"rpg-ui-dialog-choices\">\n @for ((choice,index) of choices) {\n <div\n class=\"rpg-ui-dialog-choice\"\n class={{active: selectedItem() === index}}\n tabindex={index}\n data-choice-index={index}\n click={selectChoice(index)}\n >{{ choice.text }}</div>\n }\n </div>\n </Navigation>\n }\n </div>\n @if (hasFace()) {\n <div class=\"rpg-ui-dialog-face\">\n <DOMSprite sheet={faceSheet(face.id, face.expression)} />\n </div>\n }\n </div>\n @if (showIndicator) {\n <div class=\"rpg-ui-dialog-indicator\"></div>\n }\n </div>\n </div>\n</DOMContainer>\n \n<script>\n import { effect, signal, computed, createTabindexNavigator, mount } from \"canvasengine\";\n import { inject } from \"../../../core/inject\";\n import { RpgClientEngine } from \"../../../RpgClientEngine\";\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 engine.stopProcessingInput = true;\n\n const selectedItem = signal(0)\n let isDestroyed = false;\n\n const {\n data,\n onFinish,\n onInteraction\n } = defineProps();\n\n const { message, choices, face, speaker, position, typewriterEffect, autoClose } = data();\n const fullWidth = computed(() => data().fullWidth || false);\n\n const resolveProp = (value) => typeof value === \"function\" ? value() : value;\n\n const speakerName = computed(() => {\n const value = resolveProp(speaker);\n return value ? String(value) : \"\";\n });\n\n const dialogPosition = computed(() => resolveProp(position) || \"bottom\");\n const isFullWidth = computed(() => resolveProp(fullWidth) !== false);\n const hasFace = computed(() => !!resolveProp(face));\n\n const displayMessage = signal(\"\");\n const fullMessage = signal(\"\");\n const isTyping = signal(false);\n let typewriterTimer = null;\n let rootElement = null;\n\n mount((element) => {\n rootElement = element;\n });\n\n const startTypewriter = (text) => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n displayMessage.set(\"\");\n if (!text) return;\n let index = 0;\n isTyping.set(true);\n typewriterTimer = setInterval(() => {\n index += 1;\n displayMessage.set(text.slice(0, index));\n if (index >= text.length) {\n clearInterval(typewriterTimer);\n typewriterTimer = null;\n isTyping.set(false);\n }\n }, 20);\n };\n\n const finishTyping = () => {\n if (typewriterTimer) clearInterval(typewriterTimer);\n typewriterTimer = null;\n displayMessage.set(fullMessage());\n isTyping.set(false);\n };\n\n effect(() => {\n const text = resolveProp(message) || \"\";\n fullMessage.set(text);\n const useTypewriter = resolveProp(typewriterEffect) !== false;\n if (!useTypewriter) {\n finishTyping();\n return;\n }\n startTypewriter(text);\n });\n\n\n const hasChoices = computed(() => choices.length > 0);\n const showIndicator = computed(() => !hasChoices() && !isTyping());\n const nav = createTabindexNavigator(selectedItem, { count: () => choices.length }, 'wrap');\n\n function selectChoice(index) {\n return function() {\n selectedItem.set(index);\n onSelect(index);\n }\n }\n\n function _onFinish(value) {\n if (onFinish) onFinish(value);\n }\n\n const onSelect = (index) => {\n _onFinish(index);\n };\n\n const controls = signal({\n up: {\n repeat: true,\n bind: keyboardControls.up,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(-1);\n }\n },\n down: {\n repeat: true,\n bind: keyboardControls.down,\n throttle: 150,\n keyDown() {\n if (!hasChoices()) return;\n nav.next(1);\n }\n },\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (!hasChoices()) return;\n onSelect(selectedItem());\n }\n },\n gamepad: {\n enabled: true\n }\n });\n \n const dialogControls = signal({\n action: {\n bind: keyboardControls.action,\n keyDown() {\n if (isTyping()) {\n finishTyping();\n return;\n }\n if (hasChoices()) return;\n _onFinish();\n }\n },\n })\n\n const faceSheet = (graphicId, animationName) => {\n return {\n definition: engine.getSpriteSheet(graphicId),\n playing: animationName,\n };\n }\n\n mount((element) => {\n return () => {\n isDestroyed = true;\n // Wait destroy is finished before start processing input\n delay(() => {\n engine.stopProcessingInput = false;\n })\n }\n })\n</script>\n"],"mappings":"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"}