dcl-npc-toolkit 1.0.6 → 1.0.7-20230516200558.commit-a07eb6f
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/README.md +901 -255
- package/dist/bubble.d.ts +10 -0
- package/dist/bubble.js +367 -0
- package/dist/components.d.ts +1 -0
- package/dist/components.js +2 -1
- package/dist/dialog.d.ts +1 -0
- package/dist/dialog.js +4 -3
- package/dist/index.d.ts +3 -2
- package/dist/index.js +4 -3
- package/dist/npc.d.ts +2 -1
- package/dist/npc.js +20 -10
- package/dist/systems.d.ts +1 -0
- package/dist/systems.js +34 -3
- package/dist/ui.js +59 -58
- package/package.json +2 -2
package/dist/bubble.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Entity } from '@dcl/sdk/ecs';
|
|
2
|
+
import { Dialog } from './types';
|
|
3
|
+
export declare let bubblesTexture: string;
|
|
4
|
+
export declare let bubbles: Map<Entity, any>;
|
|
5
|
+
export declare function createDialogBubble(npc: Entity, height?: number, sound?: string): void;
|
|
6
|
+
export declare function openBubble(npc: Entity, dialog: Dialog[], start?: number): void;
|
|
7
|
+
export declare function closeBubble(npc: Entity): void;
|
|
8
|
+
export declare function closeBubbleEndAll(npc: Entity): void;
|
|
9
|
+
export declare function next(npc: Entity): void;
|
|
10
|
+
export declare function getBubbleTextLength(text: string): 40 | undefined;
|
package/dist/bubble.js
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { AudioSource, Billboard, engine, Material, MeshRenderer, TextShape, Transform, VisibilityComponent } from '@dcl/sdk/ecs';
|
|
2
|
+
import { Color4, Vector3 } from '@dcl/sdk/math';
|
|
3
|
+
import { addLineBreaks } from './dialog';
|
|
4
|
+
import { IsTypingBubble } from './components';
|
|
5
|
+
export let bubblesTexture = 'https://decentraland.org/images/ui/dialog-bubbles.png';
|
|
6
|
+
export let bubbles = new Map();
|
|
7
|
+
let textSize = 1;
|
|
8
|
+
let textYPos = 0;
|
|
9
|
+
let maxLengthShortBubble = 8;
|
|
10
|
+
let maxLengthNormalBubble = 25;
|
|
11
|
+
let maxLengthLongBubble = 50;
|
|
12
|
+
let maxLengthHugeBubble = 100;
|
|
13
|
+
let shortBubbleXOffset = 0.1;
|
|
14
|
+
let normalBubbleXOffset = 0.5;
|
|
15
|
+
let longBubbleXOffset = 0.8;
|
|
16
|
+
let hugeBubbleXOffset = 0.8;
|
|
17
|
+
let shortBubbleYOffset = -0.2;
|
|
18
|
+
let normalBubbleYOffset = -0.2;
|
|
19
|
+
let longBubbleYOffset = 0;
|
|
20
|
+
let hugeBubbleYOffset = 0.2;
|
|
21
|
+
let shortBubbleTextWidth = 0.7;
|
|
22
|
+
let normalBubbleTextWidth = 1.5;
|
|
23
|
+
let longBubbleTextWidth = 2;
|
|
24
|
+
let hugeBubbleTextWidth = 1.5;
|
|
25
|
+
let shortBubbleX = 116 * 0.005;
|
|
26
|
+
let shortBubbleY = 84 * 0.005;
|
|
27
|
+
let normalBubbleX = 286 * 0.005;
|
|
28
|
+
let normalBubbleY = 84 * 0.005;
|
|
29
|
+
let longBubbleX = 497 * 0.005;
|
|
30
|
+
let longBubbleY = 153 * 0.005;
|
|
31
|
+
let hugeBubbleX = 497 * 0.005;
|
|
32
|
+
let hugeBubbleY = 239 * 0.005;
|
|
33
|
+
let defaultYOffset = 2.5;
|
|
34
|
+
export function createDialogBubble(npc, height, sound) {
|
|
35
|
+
let baseYOffset = height ? height : defaultYOffset;
|
|
36
|
+
let root = engine.addEntity();
|
|
37
|
+
Billboard.create(root, {
|
|
38
|
+
billboardMode: 2
|
|
39
|
+
});
|
|
40
|
+
Transform.create(root, {
|
|
41
|
+
parent: npc
|
|
42
|
+
});
|
|
43
|
+
let container = engine.addEntity();
|
|
44
|
+
Transform.create(container, {
|
|
45
|
+
parent: root,
|
|
46
|
+
position: Vector3.create(shortBubbleXOffset, baseYOffset, 0)
|
|
47
|
+
});
|
|
48
|
+
let panel = engine.addEntity();
|
|
49
|
+
Transform.create(panel, {
|
|
50
|
+
parent: container,
|
|
51
|
+
scale: Vector3.create(2, 1, 1),
|
|
52
|
+
});
|
|
53
|
+
MeshRenderer.setPlane(panel, setUVSection(bubbleOptions.normal, 1024, 1024));
|
|
54
|
+
VisibilityComponent.create(panel, { visible: false });
|
|
55
|
+
Material.setBasicMaterial(panel, {
|
|
56
|
+
texture: Material.Texture.Common({
|
|
57
|
+
src: bubblesTexture
|
|
58
|
+
})
|
|
59
|
+
});
|
|
60
|
+
let text = engine.addEntity();
|
|
61
|
+
Transform.create(text, {
|
|
62
|
+
position: Vector3.create(0, textYPos, -.05),
|
|
63
|
+
parent: container
|
|
64
|
+
});
|
|
65
|
+
TextShape.create(text, {
|
|
66
|
+
text: "",
|
|
67
|
+
fontSize: textSize,
|
|
68
|
+
font: 0,
|
|
69
|
+
textColor: Color4.create(0, 0, 0, 1),
|
|
70
|
+
textAlign: 4
|
|
71
|
+
});
|
|
72
|
+
VisibilityComponent.create(text, { visible: false });
|
|
73
|
+
bubbles.set(npc, {
|
|
74
|
+
container: container,
|
|
75
|
+
panel: panel,
|
|
76
|
+
text: text,
|
|
77
|
+
baseYOffset: baseYOffset,
|
|
78
|
+
isBubbleOpen: false,
|
|
79
|
+
typing: false,
|
|
80
|
+
visibleText: "",
|
|
81
|
+
visibleChars: 0,
|
|
82
|
+
fullText: "",
|
|
83
|
+
timer: 0,
|
|
84
|
+
speed: 30,
|
|
85
|
+
script: [],
|
|
86
|
+
index: 0,
|
|
87
|
+
sound: sound ? sound : undefined,
|
|
88
|
+
soundPlayer: sound ? engine.addEntity() : undefined,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
export function openBubble(npc, dialog, start) {
|
|
92
|
+
let bubble = bubbles.get(npc);
|
|
93
|
+
bubble.script = addLineBreaks(dialog, true);
|
|
94
|
+
bubble.index = start ? start : 0;
|
|
95
|
+
let currentText = dialog[bubble.index] ? dialog[bubble.index] : { text: '' };
|
|
96
|
+
bubble.currentText = currentText;
|
|
97
|
+
if (currentText.audio) {
|
|
98
|
+
AudioSource.createOrReplace(bubble.soundPlayer, {
|
|
99
|
+
audioClipUrl: currentText.audio,
|
|
100
|
+
loop: false,
|
|
101
|
+
playing: false
|
|
102
|
+
});
|
|
103
|
+
let audio = AudioSource.getMutable(bubble.soundPlayer);
|
|
104
|
+
audio.volume = 0.5;
|
|
105
|
+
audio.playing = true;
|
|
106
|
+
}
|
|
107
|
+
else if (bubble.sound) {
|
|
108
|
+
AudioSource.createOrReplace(bubble.soundPlayer, {
|
|
109
|
+
audioClipUrl: bubble.sound,
|
|
110
|
+
loop: false,
|
|
111
|
+
playing: false
|
|
112
|
+
});
|
|
113
|
+
let audio = AudioSource.getMutable(bubble.soundPlayer);
|
|
114
|
+
audio.volume = 0.5;
|
|
115
|
+
audio.playing = true;
|
|
116
|
+
}
|
|
117
|
+
let text = bubble.text;
|
|
118
|
+
TextShape.getMutable(text).fontSize = currentText.fontSize ? currentText.fontSize : textSize;
|
|
119
|
+
Transform.getMutable(text).position.y = currentText.offsetY ? currentText.offsetY + textYPos : textYPos;
|
|
120
|
+
Transform.getMutable(text).position.x = currentText.offsetX ? currentText.offsetX : 0;
|
|
121
|
+
VisibilityComponent.getMutable(bubble.panel).visible = true;
|
|
122
|
+
if (currentText.text.length < maxLengthHugeBubble) {
|
|
123
|
+
currentText.text.slice(0, maxLengthHugeBubble);
|
|
124
|
+
}
|
|
125
|
+
beginTyping(npc, currentText.text, bubble.index, currentText.timeOn ? currentText.timeOn : undefined, currentText.typeSpeed ? currentText.typeSpeed : undefined);
|
|
126
|
+
adjustBubble(npc, currentText.text.length);
|
|
127
|
+
layoutDialogWindow(npc, bubble.index);
|
|
128
|
+
bubble.isBubbleOpen = true;
|
|
129
|
+
}
|
|
130
|
+
export function closeBubble(npc) {
|
|
131
|
+
let bubble = bubbles.get(npc);
|
|
132
|
+
if (bubble.isBubbleOpen) {
|
|
133
|
+
bubble.isBubbleOpen = false;
|
|
134
|
+
bubble.typing = false;
|
|
135
|
+
bubble.visibleText = "";
|
|
136
|
+
bubble.visibleChars = 0;
|
|
137
|
+
bubble.fullText = "";
|
|
138
|
+
bubble.timer = 0;
|
|
139
|
+
bubble.index = 0;
|
|
140
|
+
bubble.script = [];
|
|
141
|
+
bubble.buttons = 0;
|
|
142
|
+
bubble.margin = 0;
|
|
143
|
+
bubble.currentText = null;
|
|
144
|
+
TextShape.getMutable(bubble.text).text = "";
|
|
145
|
+
VisibilityComponent.getMutable(bubble.text).visible = false;
|
|
146
|
+
VisibilityComponent.getMutable(bubble.panel).visible = false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
export function closeBubbleEndAll(npc) {
|
|
150
|
+
let bubble = bubbles.get(npc);
|
|
151
|
+
if (bubble.isBubbleOpen) {
|
|
152
|
+
bubble.done = true;
|
|
153
|
+
closeBubble(npc);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const DEFAULT_SPEED = 45;
|
|
157
|
+
const DEFAULT_TIME_ON = 3;
|
|
158
|
+
function beginTyping(npc, text, textId, timeOn, speed) {
|
|
159
|
+
let dialogData = bubbles.get(npc);
|
|
160
|
+
dialogData.fullText = dialogData.script[dialogData.index].text;
|
|
161
|
+
dialogData.typing = true;
|
|
162
|
+
dialogData.done = false;
|
|
163
|
+
dialogData.visibleText = "";
|
|
164
|
+
dialogData.visibleChars = 0;
|
|
165
|
+
dialogData.timer = 0;
|
|
166
|
+
dialogData.buttons = 0;
|
|
167
|
+
dialogData.timeOn = timeOn ? timeOn : DEFAULT_TIME_ON;
|
|
168
|
+
dialogData.speed = speed ? speed : DEFAULT_SPEED;
|
|
169
|
+
dialogData.openTime = Math.floor(Date.now());
|
|
170
|
+
if (dialogData.speed <= 0) {
|
|
171
|
+
rushText(npc);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
if (!IsTypingBubble.has(npc)) {
|
|
175
|
+
console.log('creating typuing bubble');
|
|
176
|
+
IsTypingBubble.create(npc);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function rushText(npc) {
|
|
181
|
+
let dialogData = bubbles.get(npc);
|
|
182
|
+
dialogData.typing = false;
|
|
183
|
+
dialogData.timer = 0;
|
|
184
|
+
dialogData.visibleChars = dialogData.fullText.length;
|
|
185
|
+
dialogData.visibleText = dialogData.fullText;
|
|
186
|
+
}
|
|
187
|
+
function adjustBubble(npc, textLength) {
|
|
188
|
+
let bubble = bubbles.get(npc);
|
|
189
|
+
if (textLength < maxLengthShortBubble) {
|
|
190
|
+
MeshRenderer.setPlane(bubble.panel, setUVSection(bubbleOptions.short, 1024, 1024));
|
|
191
|
+
Transform.getMutable(bubble.panel).scale.x = shortBubbleX;
|
|
192
|
+
Transform.getMutable(bubble.panel).scale.y = shortBubbleY;
|
|
193
|
+
Transform.getMutable(bubble.container).position.x = shortBubbleXOffset;
|
|
194
|
+
Transform.getMutable(bubble.container).position.y = bubble.baseYOffset + shortBubbleYOffset;
|
|
195
|
+
TextShape.getMutable(bubble.text).width = shortBubbleTextWidth;
|
|
196
|
+
}
|
|
197
|
+
else if (textLength < maxLengthNormalBubble) {
|
|
198
|
+
MeshRenderer.setPlane(bubble.panel, setUVSection(bubbleOptions.normal, 1024, 1024));
|
|
199
|
+
Transform.getMutable(bubble.panel).scale.x = normalBubbleX;
|
|
200
|
+
Transform.getMutable(bubble.panel).scale.y = normalBubbleY;
|
|
201
|
+
Transform.getMutable(bubble.container).position.x = normalBubbleXOffset;
|
|
202
|
+
Transform.getMutable(bubble.container).position.y = bubble.baseYOffset + normalBubbleYOffset;
|
|
203
|
+
TextShape.getMutable(bubble.text).width = normalBubbleTextWidth;
|
|
204
|
+
}
|
|
205
|
+
else if (textLength < maxLengthLongBubble) {
|
|
206
|
+
MeshRenderer.setPlane(bubble.panel, setUVSection(bubbleOptions.long, 1024, 1024));
|
|
207
|
+
Transform.getMutable(bubble.panel).scale.x = longBubbleX;
|
|
208
|
+
Transform.getMutable(bubble.panel).scale.y = longBubbleY;
|
|
209
|
+
Transform.getMutable(bubble.container).position.x = longBubbleXOffset;
|
|
210
|
+
Transform.getMutable(bubble.container).position.y = bubble.baseYOffset + longBubbleYOffset;
|
|
211
|
+
TextShape.getMutable(bubble.text).width = longBubbleTextWidth;
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
MeshRenderer.setPlane(bubble.panel, setUVSection(bubbleOptions.huge, 1024, 1024));
|
|
215
|
+
Transform.getMutable(bubble.panel).scale.x = hugeBubbleX;
|
|
216
|
+
Transform.getMutable(bubble.panel).scale.y = hugeBubbleY;
|
|
217
|
+
Transform.getMutable(bubble.container).position.x = hugeBubbleXOffset;
|
|
218
|
+
Transform.getMutable(bubble.container).position.y = bubble.baseYOffset + hugeBubbleYOffset;
|
|
219
|
+
TextShape.getMutable(bubble.text).width = hugeBubbleTextWidth;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function layoutDialogWindow(npc, textId) {
|
|
223
|
+
let bubble = bubbles.get(npc);
|
|
224
|
+
let currentText = bubble.script[textId]
|
|
225
|
+
? bubble.script[textId]
|
|
226
|
+
: { text: '' };
|
|
227
|
+
let textY = currentText.offsetY ? currentText.offsetY + textYPos : textYPos;
|
|
228
|
+
if (currentText.buttons && currentText.buttons.length >= 3) {
|
|
229
|
+
textY += 50;
|
|
230
|
+
}
|
|
231
|
+
else if (currentText.buttons && currentText.buttons.length >= 1) {
|
|
232
|
+
textY += 24;
|
|
233
|
+
}
|
|
234
|
+
TextShape.getMutable(bubble.text).fontSize = currentText.fontSize
|
|
235
|
+
? currentText.fontSize
|
|
236
|
+
: textSize;
|
|
237
|
+
VisibilityComponent.getMutable(bubble.text).visible = true;
|
|
238
|
+
Transform.getMutable(bubble.text).position.y = textY;
|
|
239
|
+
if (currentText.audio) {
|
|
240
|
+
AudioSource.createOrReplace(bubble.soundPlayer, {
|
|
241
|
+
audioClipUrl: currentText.audio,
|
|
242
|
+
loop: false,
|
|
243
|
+
playing: false
|
|
244
|
+
});
|
|
245
|
+
let audio = AudioSource.getMutable(bubble.soundPlayer);
|
|
246
|
+
audio.volume = 0.5;
|
|
247
|
+
audio.playing = true;
|
|
248
|
+
}
|
|
249
|
+
else if (bubble.sound) {
|
|
250
|
+
AudioSource.createOrReplace(bubble.soundPlayer, {
|
|
251
|
+
audioClipUrl: bubble.sound,
|
|
252
|
+
loop: false,
|
|
253
|
+
playing: false
|
|
254
|
+
});
|
|
255
|
+
let audio = AudioSource.getMutable(bubble.soundPlayer);
|
|
256
|
+
audio.volume = 0.5;
|
|
257
|
+
audio.playing = true;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
export function next(npc) {
|
|
261
|
+
console.log('next text');
|
|
262
|
+
let bubble = bubbles.get(npc);
|
|
263
|
+
let currentText = bubble.script[bubble.index];
|
|
264
|
+
if (!currentText) {
|
|
265
|
+
currentText = bubble.script[bubble.index - 1];
|
|
266
|
+
}
|
|
267
|
+
if (currentText.triggeredByNext) {
|
|
268
|
+
currentText.triggeredByNext();
|
|
269
|
+
}
|
|
270
|
+
if (currentText.isEndOfDialog) {
|
|
271
|
+
closeBubble(npc);
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
bubble.index++;
|
|
275
|
+
currentText = bubble.script[bubble.index];
|
|
276
|
+
if (currentText.text.length < maxLengthHugeBubble) {
|
|
277
|
+
currentText.text.slice(0, maxLengthHugeBubble);
|
|
278
|
+
}
|
|
279
|
+
TextShape.getMutable(bubble.text).text = "";
|
|
280
|
+
adjustBubble(npc, currentText.text.length);
|
|
281
|
+
beginTyping(npc, currentText.text, bubble.index, currentText.timeOn ? currentText.timeOn : undefined, currentText.typeSpeed ? currentText.typeSpeed : undefined);
|
|
282
|
+
layoutDialogWindow(npc, bubble.index);
|
|
283
|
+
}
|
|
284
|
+
function setUVSection(section, sizeX, sizeY) {
|
|
285
|
+
return setUVs({ x: section.sourceLeft / sizeX, y: (sizeY - section.sourceTop - section.sourceHeight) / sizeY }, { x: (section.sourceLeft + section.sourceWidth) / sizeX, y: (sizeY - section.sourceTop - section.sourceHeight) / sizeY }, { x: (section.sourceLeft + section.sourceWidth) / sizeX, y: (sizeY - section.sourceTop) / sizeY }, { x: section.sourceLeft / sizeX, y: (sizeY - section.sourceTop) / sizeY });
|
|
286
|
+
}
|
|
287
|
+
function setUVs(_uv00, _uv10, _uv11, _uv01) {
|
|
288
|
+
return [
|
|
289
|
+
_uv00.x,
|
|
290
|
+
_uv00.y,
|
|
291
|
+
_uv10.x,
|
|
292
|
+
_uv10.y,
|
|
293
|
+
_uv11.x,
|
|
294
|
+
_uv11.y,
|
|
295
|
+
_uv01.x,
|
|
296
|
+
_uv01.y,
|
|
297
|
+
_uv00.x,
|
|
298
|
+
_uv00.y,
|
|
299
|
+
_uv10.x,
|
|
300
|
+
_uv10.y,
|
|
301
|
+
_uv11.x,
|
|
302
|
+
_uv11.y,
|
|
303
|
+
_uv01.x,
|
|
304
|
+
_uv01.y,
|
|
305
|
+
];
|
|
306
|
+
}
|
|
307
|
+
let bubbleOptions = {
|
|
308
|
+
short: {
|
|
309
|
+
sourceWidth: 116 * 2,
|
|
310
|
+
sourceHeight: 84 * 2,
|
|
311
|
+
sourceLeft: 305 * 2,
|
|
312
|
+
sourceTop: 417 * 2,
|
|
313
|
+
},
|
|
314
|
+
normal: {
|
|
315
|
+
sourceWidth: 286 * 2,
|
|
316
|
+
sourceHeight: 84 * 2,
|
|
317
|
+
sourceLeft: 8 * 2,
|
|
318
|
+
sourceTop: 417 * 2,
|
|
319
|
+
},
|
|
320
|
+
long: {
|
|
321
|
+
sourceWidth: 497 * 2,
|
|
322
|
+
sourceHeight: 153 * 2,
|
|
323
|
+
sourceLeft: 6 * 2,
|
|
324
|
+
sourceTop: 254 * 2,
|
|
325
|
+
},
|
|
326
|
+
huge: {
|
|
327
|
+
sourceWidth: 497 * 2,
|
|
328
|
+
sourceHeight: 239 * 2,
|
|
329
|
+
sourceLeft: 6 * 2,
|
|
330
|
+
sourceTop: 7 * 2,
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
export function getBubbleTextLength(text) {
|
|
334
|
+
if (text.length >= maxLengthHugeBubble) {
|
|
335
|
+
return 40;
|
|
336
|
+
}
|
|
337
|
+
else if (text.length >= maxLengthLongBubble) {
|
|
338
|
+
return 40;
|
|
339
|
+
}
|
|
340
|
+
else if (text.length >= maxLengthNormalBubble) {
|
|
341
|
+
return 40;
|
|
342
|
+
}
|
|
343
|
+
else if (text.length >= maxLengthShortBubble) {
|
|
344
|
+
return 40;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
function setUVs2(rows, cols) {
|
|
348
|
+
return [
|
|
349
|
+
0,
|
|
350
|
+
0,
|
|
351
|
+
cols,
|
|
352
|
+
0,
|
|
353
|
+
cols,
|
|
354
|
+
rows,
|
|
355
|
+
0,
|
|
356
|
+
rows,
|
|
357
|
+
cols,
|
|
358
|
+
0,
|
|
359
|
+
0,
|
|
360
|
+
0,
|
|
361
|
+
0,
|
|
362
|
+
rows,
|
|
363
|
+
cols,
|
|
364
|
+
rows,
|
|
365
|
+
];
|
|
366
|
+
}
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnViYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1YmJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVksV0FBVyxFQUFlLFNBQVMsRUFBaUIsTUFBTSxFQUEyQyxRQUFRLEVBQWMsWUFBWSxFQUFtQyxTQUFTLEVBQUMsU0FBUyxFQUFpQixtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxUSxPQUFPLEVBQVMsTUFBTSxFQUFjLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFN0MsTUFBTSxDQUFDLElBQUksY0FBYyxHQUFHLHVEQUF1RCxDQUFBO0FBRW5GLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQTtBQUVoRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUE7QUFDaEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBO0FBRWhCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFBO0FBQzVCLElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFBO0FBQzlCLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFBO0FBQzVCLElBQUksbUJBQW1CLEdBQUcsR0FBRyxDQUFBO0FBRTdCLElBQUksa0JBQWtCLEdBQUcsR0FBRyxDQUFBO0FBQzVCLElBQUksbUJBQW1CLEdBQUcsR0FBRyxDQUFBO0FBQzdCLElBQUksaUJBQWlCLEdBQUcsR0FBRyxDQUFBO0FBQzNCLElBQUksaUJBQWlCLEdBQUcsR0FBRyxDQUFBO0FBRTNCLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUE7QUFDN0IsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsQ0FBQTtBQUM5QixJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQTtBQUN6QixJQUFJLGlCQUFpQixH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STtRQUNKLElBQUk7UUFFSixDQUFDO1FBQ0QsSUFBSTtRQUdKLElBQUk7UUFDSixDQUFDO1FBRUQsQ0FBQztRQUNELENBQUM7UUFFRCxDQUFDO1FBQ0QsSUFBSTtRQUVKLElBQUk7UUFDSixJQUFJO0tBQ0wsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEFuaW1hdG9yLCBBdWRpb1NvdXJjZSwgQXZhdGFyU2hhcGUsIEJpbGxib2FyZCwgQmlsbGJvYXJkTW9kZSwgZW5naW5lLCBFbnRpdHksIEZvbnQsIEdsdGZDb250YWluZXIsIElucHV0QWN0aW9uLE1hdGVyaWFsLE1lc2hDb2xsaWRlcixNZXNoUmVuZGVyZXIscG9pbnRlckV2ZW50c1N5c3RlbSxUZXh0QWxpZ25Nb2RlLFRleHRTaGFwZSxUcmFuc2Zvcm0sIFRyYW5zZm9ybVR5cGUsIFZpc2liaWxpdHlDb21wb25lbnQgfSBmcm9tICdAZGNsL3Nkay9lY3MnXG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICdAZGNsLXNkay91dGlscydcbmltcG9ydCB7IERpYWxvZywgSW1hZ2VTZWN0aW9uIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IENvbG9yMyxDb2xvcjQsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IHsgYWRkTGluZUJyZWFrcyB9IGZyb20gJy4vZGlhbG9nJ1xuaW1wb3J0IHsgSXNUeXBpbmdCdWJibGUgfSBmcm9tICcuL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBsZXQgYnViYmxlc1RleHR1cmUgPSAnaHR0cHM6Ly9kZWNlbnRyYWxhbmQub3JnL2ltYWdlcy91aS9kaWFsb2ctYnViYmxlcy5wbmcnXG5cbmV4cG9ydCBsZXQgYnViYmxlczogTWFwPEVudGl0eSwgYW55PiA9IG5ldyBNYXAoKVxuXG5sZXQgdGV4dFNpemUgPSAxXG5sZXQgdGV4dFlQb3MgPSAwICAgIFxuXG5sZXQgbWF4TGVuZ3RoU2hvcnRCdWJibGUgPSA4XG5sZXQgbWF4TGVuZ3RoTm9ybWFsQnViYmxlID0gMjVcbmxldCBtYXhMZW5ndGhMb25nQnViYmxlID0gNTBcbmxldCBtYXhMZW5ndGhIdWdlQnViYmxlID0gMTAwXG5cbmxldCBzaG9ydEJ1YmJsZVhPZmZzZXQgPSAwLjFcbmxldCBub3JtYWxCdWJibGVYT2Zmc2V0ID0gMC41XG5sZXQgbG9uZ0J1YmJsZVhPZmZzZXQgPSAwLjhcbmxldCBodWdlQnViYmxlWE9mZnNldCA9IDAuOFxuXG5sZXQgc2hvcnRCdWJibGVZT2Zmc2V0ID0gLTAuMlxubGV0IG5vcm1hbEJ1YmJsZVlPZmZzZXQgPSAtMC4yXG5sZXQgbG9uZ0J1YmJsZVlPZmZzZXQgPSAwXG5sZXQgaHVnZUJ1YmJsZVlPZmZzZXQgPSAwLjJcblxubGV0IHNob3J0QnViYmxlVGV4dFdpZHRoID0gMC43XG5sZXQgbm9ybWFsQnViYmxlVGV4dFdpZHRoID0gMS41XG5sZXQgbG9uZ0J1YmJsZVRleHRXaWR0aCA9IDJcbmxldCBodWdlQnViYmxlVGV4dFdpZHRoID0gMS41XG5cbmxldCBzaG9ydEJ1YmJsZVggPSAxMTYgKiAwLjAwNVxubGV0IHNob3J0QnViYmxlWSA9IDg0ICogMC4wMDVcblxubGV0IG5vcm1hbEJ1YmJsZVggPSAyODYgKiAwLjAwNVxubGV0IG5vcm1hbEJ1YmJsZVkgPSA4NCAqIDAuMDA1XG5cbmxldCBsb25nQnViYmxlWCA9IDQ5NyAqIDAuMDA1XG5sZXQgbG9uZ0J1YmJsZVkgPSAxNTMgKiAwLjAwNVxuXG5sZXQgaHVnZUJ1YmJsZVggPSA0OTcgKiAwLjAwNVxubGV0IGh1Z2VCdWJibGVZID0gMjM5ICogMC4wMDVcblxubGV0IGRlZmF1bHRZT2Zmc2V0ID0gMi41XG5cblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGlhbG9nQnViYmxlKG5wYzpFbnRpdHksIGhlaWdodD86bnVtYmVyLCBzb3VuZD86c3RyaW5nKXtcbiAgICBsZXQgYmFzZVlPZmZzZXQgPSBoZWlnaHQgPyBoZWlnaHQgOiBkZWZhdWx0WU9mZnNldFxuXG4gICAgbGV0IHJvb3QgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBCaWxsYm9hcmQuY3JlYXRlKHJvb3Qse1xuICAgICAgICBiaWxsYm9hcmRNb2RlOkJpbGxib2FyZE1vZGUuQk1fWVxuICAgIH0pXG5cbiAgICBUcmFuc2Zvcm0uY3JlYXRlKHJvb3Qse1xuICAgICAgICBwYXJlbnQ6bnBjXG4gICAgfSlcblxuICAgIGxldCBjb250YWluZXIgPSBlbmdpbmUuYWRkRW50aXR5KClcbiAgICBUcmFuc2Zvcm0uY3JlYXRlKGNvbnRhaW5lcix7XG4gICAgICAgIHBhcmVudDpyb290LFxuICAgICAgICBwb3NpdGlvbjpWZWN0b3IzLmNyZWF0ZShzaG9ydEJ1YmJsZVhPZmZzZXQsYmFzZVlPZmZzZXQsMClcbiAgICB9KVxuXG4gICAgbGV0IHBhbmVsID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgVHJhbnNmb3JtLmNyZWF0ZShwYW5lbCx7XG4gICAgICAgIHBhcmVudDpjb250YWluZXIsXG4gICAgICAgIHNjYWxlOiBWZWN0b3IzLmNyZWF0ZSgyLDEsMSksXG4gICAgICAgIC8vcm90YXRpb246UXVhdGVybmlvbi5mcm9tRXVsZXJEZWdyZWVzKDAsMCw5MClcbiAgICB9KVxuICAgIE1lc2hSZW5kZXJlci5zZXRQbGFuZShwYW5lbCxcbiAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICBidWJibGVPcHRpb25zLm5vcm1hbCxcbiAgICAgICAgMTAyNCxcbiAgICAgICAgMTAyNFxuICAgICAgKSlcblxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlKHBhbmVsLCB7dmlzaWJsZTogZmFsc2V9KVxuXG4gICAgTWF0ZXJpYWwuc2V0QmFzaWNNYXRlcmlhbChwYW5lbCwge1xuICAgICAgICB0ZXh0dXJlOiBNYXRlcmlhbC5UZXh0dXJlLkNvbW1vbih7XG4gICAgICAgICAgc3JjOiBidWJibGVzVGV4dHVyZVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgIGxldCB0ZXh0ID0gZW5naW5lLmFkZEVudGl0eSgpXG4gICAgVHJhbnNmb3JtLmNyZWF0ZSh0ZXh0LHtcbiAgICAgICAgcG9zaXRpb246VmVjdG9yMy5jcmVhdGUoMCx0ZXh0WVBvcywgLS4wNSksXG4gICAgICAgIHBhcmVudDpjb250YWluZXJcbiAgICB9KVxuICAgIFRleHRTaGFwZS5jcmVhdGUodGV4dCwge1xuICAgICAgICB0ZXh0OlwiXCIsIFxuICAgICAgICBmb250U2l6ZTp0ZXh0U2l6ZSxcbiAgICAgICAgZm9udDogRm9udC5GX1NBTlNfU0VSSUYsXG4gICAgICAgIHRleHRDb2xvcjogQ29sb3I0LmNyZWF0ZSgwLDAsMCwxKSxcbiAgICAgICAgdGV4dEFsaWduOlRleHRBbGlnbk1vZGUuVEFNX01JRERMRV9DRU5URVJcbiAgICB9KVxuICAgIFZpc2liaWxpdHlDb21wb25lbnQuY3JlYXRlKHRleHQsIHt2aXNpYmxlOiBmYWxzZX0pXG5cbiAgICBidWJibGVzLnNldChucGMsIHtcbiAgICAgICAgY29udGFpbmVyOmNvbnRhaW5lcixcbiAgICAgICAgcGFuZWw6cGFuZWwsXG4gICAgICAgIHRleHQ6dGV4dCxcbiAgICAgICAgYmFzZVlPZmZzZXQ6IGJhc2VZT2Zmc2V0LFxuICAgICAgICBpc0J1YmJsZU9wZW46ZmFsc2UsXG4gICAgICAgIHR5cGluZzpmYWxzZSxcbiAgICAgICAgdmlzaWJsZVRleHQ6XCJcIixcbiAgICAgICAgdmlzaWJsZUNoYXJzOjAsXG4gICAgICAgIGZ1bGxUZXh0OlwiXCIsXG4gICAgICAgIHRpbWVyOjAsXG4gICAgICAgIHNwZWVkOjMwLFxuICAgICAgICBzY3JpcHQ6W10sXG4gICAgICAgIGluZGV4OjAsXG4gICAgICAgIHNvdW5kOiBzb3VuZCA/IHNvdW5kIDogdW5kZWZpbmVkLFxuICAgICAgICBzb3VuZFBsYXllcjogc291bmQgPyBlbmdpbmUuYWRkRW50aXR5KCkgOiB1bmRlZmluZWQsXG4gICAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wZW5CdWJibGUobnBjOkVudGl0eSwgZGlhbG9nOkRpYWxvZ1tdLCBzdGFydD86bnVtYmVyKXtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuXG4gICAgYnViYmxlLnNjcmlwdCA9IGFkZExpbmVCcmVha3MoZGlhbG9nLCB0cnVlKVxuICAgIGJ1YmJsZS5pbmRleCA9IHN0YXJ0ID8gc3RhcnQgOiAwXG4gICAgXG4gICAgbGV0IGN1cnJlbnRUZXh0OiBEaWFsb2cgPSBkaWFsb2dbYnViYmxlLmluZGV4XSA/IGRpYWxvZ1tidWJibGUuaW5kZXhdIDogeyB0ZXh0OiAnJyB9XG4gICAgYnViYmxlLmN1cnJlbnRUZXh0ID0gY3VycmVudFRleHRcblxuICAgIGlmIChjdXJyZW50VGV4dC5hdWRpbykge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoYnViYmxlLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGN1cnJlbnRUZXh0LmF1ZGlvLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGJ1YmJsZS5zb3VuZFBsYXllcilcbiAgICAgICAgYXVkaW8udm9sdW1lID0gMC41XG4gICAgICAgIGF1ZGlvLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChidWJibGUuc291bmQpIHtcbiAgICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlT3JSZXBsYWNlKGJ1YmJsZS5zb3VuZFBsYXllciwge1xuICAgICAgICAgICAgYXVkaW9DbGlwVXJsOiBidWJibGUuc291bmQsXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYXlpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBhdWRpbyA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoYnViYmxlLnNvdW5kUGxheWVyKVxuICAgICAgICBhdWRpby52b2x1bWUgPSAwLjVcbiAgICAgICAgYXVkaW8ucGxheWluZyA9IHRydWVcbiAgICB9XG5cbiAgICBsZXQgdGV4dCA9IGJ1YmJsZS50ZXh0XG4gICAgVGV4dFNoYXBlLmdldE11dGFibGUodGV4dCkuZm9udFNpemUgPSBjdXJyZW50VGV4dC5mb250U2l6ZSA/IGN1cnJlbnRUZXh0LmZvbnRTaXplIDogdGV4dFNpemVcbiAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZSh0ZXh0KS5wb3NpdGlvbi55ID0gY3VycmVudFRleHQub2Zmc2V0WSA/IGN1cnJlbnRUZXh0Lm9mZnNldFkgKyB0ZXh0WVBvcyA6IHRleHRZUG9zXG4gICAgVHJhbnNmb3JtLmdldE11dGFibGUodGV4dCkucG9zaXRpb24ueCA9IGN1cnJlbnRUZXh0Lm9mZnNldFggPyBjdXJyZW50VGV4dC5vZmZzZXRYIDogMFxuXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkudmlzaWJsZSA9IHRydWVcblxuICAgIGlmIChjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aCA8IG1heExlbmd0aEh1Z2VCdWJibGUpIHtcbiAgICAgICAgY3VycmVudFRleHQudGV4dC5zbGljZSgwLCBtYXhMZW5ndGhIdWdlQnViYmxlKVxuICAgICAgfVxuXG4gICAgYmVnaW5UeXBpbmcoXG4gICAgICAgIG5wYyxcbiAgICAgICAgY3VycmVudFRleHQudGV4dCxcbiAgICAgICAgYnViYmxlLmluZGV4LFxuICAgICAgICBjdXJyZW50VGV4dC50aW1lT24gPyBjdXJyZW50VGV4dC50aW1lT24gOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA/IGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA6IHVuZGVmaW5lZCBcbiAgICApXG5cbiAgICBhZGp1c3RCdWJibGUobnBjLCBjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aClcbiAgICBsYXlvdXREaWFsb2dXaW5kb3cobnBjLCBidWJibGUuaW5kZXgpXG4gICAgYnViYmxlLmlzQnViYmxlT3BlbiA9IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlQnViYmxlKG5wYzpFbnRpdHkpe1xuICAgIGxldCBidWJibGUgPSBidWJibGVzLmdldChucGMpXG4gICAgaWYoYnViYmxlLmlzQnViYmxlT3Blbil7XG4gICAgICAgIGJ1YmJsZS5pc0J1YmJsZU9wZW4gPSBmYWxzZVxuICAgICAgICBidWJibGUudHlwaW5nID0gZmFsc2VcbiAgICAgICAgYnViYmxlLnZpc2libGVUZXh0ID0gXCJcIlxuICAgICAgICBidWJibGUudmlzaWJsZUNoYXJzID0gMFxuICAgICAgICBidWJibGUuZnVsbFRleHQgPSBcIlwiXG4gICAgICAgIGJ1YmJsZS50aW1lciA9IDBcbiAgICAgICAgYnViYmxlLmluZGV4ID0gMFxuICAgICAgICBidWJibGUuc2NyaXB0ID0gW11cbiAgICAgICAgYnViYmxlLmJ1dHRvbnMgPSAwXG4gICAgICAgIGJ1YmJsZS5tYXJnaW4gPSAwXG4gICAgICAgIGJ1YmJsZS5jdXJyZW50VGV4dCA9IG51bGxcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLnRleHQgPSBcIlwiXG4gICAgICAgIFZpc2liaWxpdHlDb21wb25lbnQuZ2V0TXV0YWJsZShidWJibGUudGV4dCkudmlzaWJsZSA9IGZhbHNlXG4gICAgICAgIFZpc2liaWxpdHlDb21wb25lbnQuZ2V0TXV0YWJsZShidWJibGUucGFuZWwpLnZpc2libGUgPSBmYWxzZVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlQnViYmxlRW5kQWxsKG5wYzpFbnRpdHkpOiB2b2lkIHtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGlmIChidWJibGUuaXNCdWJibGVPcGVuKSB7XG4gICAgICAgIGJ1YmJsZS5kb25lID0gdHJ1ZVxuICAgICAgICBjbG9zZUJ1YmJsZShucGMpXG4gICAgfVxuICB9XG5cbmNvbnN0IERFRkFVTFRfU1BFRUQgPSA0NVxuXG5jb25zdCBERUZBVUxUX1RJTUVfT04gPSAzXG5cbmZ1bmN0aW9uIGJlZ2luVHlwaW5nKG5wYzpFbnRpdHksIHRleHQ6c3RyaW5nLCB0ZXh0SWQ6bnVtYmVyLCB0aW1lT24/Om51bWJlciwgc3BlZWQ/Om51bWJlcil7XG4gICAgbGV0IGRpYWxvZ0RhdGEgPSBidWJibGVzLmdldChucGMpXG4gICAgZGlhbG9nRGF0YS5mdWxsVGV4dCA9IGRpYWxvZ0RhdGEuc2NyaXB0W2RpYWxvZ0RhdGEuaW5kZXhdLnRleHRcbiAgICBkaWFsb2dEYXRhLnR5cGluZyA9IHRydWVcbiAgICBkaWFsb2dEYXRhLmRvbmUgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBcIlwiXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSAwXG4gICAgZGlhbG9nRGF0YS50aW1lciA9IDBcbiAgICBkaWFsb2dEYXRhLmJ1dHRvbnMgPSAwXG4gICAgZGlhbG9nRGF0YS50aW1lT24gPSB0aW1lT24gPyB0aW1lT24gOiBERUZBVUxUX1RJTUVfT05cbiAgICBkaWFsb2dEYXRhLnNwZWVkID0gc3BlZWQgPyBzcGVlZCA6IERFRkFVTFRfU1BFRURcblxuICAgIGRpYWxvZ0RhdGEub3BlblRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkpXG5cbiAgICBpZihkaWFsb2dEYXRhLnNwZWVkIDw9IDApe1xuICAgICAgICBydXNoVGV4dChucGMpXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIGlmKCFJc1R5cGluZ0J1YmJsZS5oYXMobnBjKSl7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnY3JlYXRpbmcgdHlwdWluZyBidWJibGUnKVxuICAgICAgICAgICAgSXNUeXBpbmdCdWJibGUuY3JlYXRlKG5wYylcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcnVzaFRleHQobnBjOkVudGl0eSl7XG4gICAgbGV0IGRpYWxvZ0RhdGEgPSBidWJibGVzLmdldChucGMpXG4gICAgZGlhbG9nRGF0YS50eXBpbmcgPSBmYWxzZVxuICAgIGRpYWxvZ0RhdGEudGltZXIgPSAwXG4gICAgZGlhbG9nRGF0YS52aXNpYmxlQ2hhcnMgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0Lmxlbmd0aFxuICAgIGRpYWxvZ0RhdGEudmlzaWJsZVRleHQgPSBkaWFsb2dEYXRhLmZ1bGxUZXh0XG59XG5cbmZ1bmN0aW9uIGFkanVzdEJ1YmJsZShucGM6RW50aXR5LCB0ZXh0TGVuZ3RoOm51bWJlcil7XG4gICAgbGV0IGJ1YmJsZSA9IGJ1YmJsZXMuZ2V0KG5wYylcblxuICAgIGlmICh0ZXh0TGVuZ3RoIDwgbWF4TGVuZ3RoU2hvcnRCdWJibGUpIHtcbiAgICAgICAgTWVzaFJlbmRlcmVyLnNldFBsYW5lKGJ1YmJsZS5wYW5lbCxcbiAgICAgICAgICAgIHNldFVWU2VjdGlvbihcbiAgICAgICAgICAgIGJ1YmJsZU9wdGlvbnMuc2hvcnQsXG4gICAgICAgICAgICAxMDI0LFxuICAgICAgICAgICAgMTAyNFxuICAgICAgICAgICkpXG5cbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gc2hvcnRCdWJibGVYXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueSA9IHNob3J0QnViYmxlWVxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUuY29udGFpbmVyKS5wb3NpdGlvbi54ID0gc2hvcnRCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBzaG9ydEJ1YmJsZVlPZmZzZXRcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLndpZHRoID0gc2hvcnRCdWJibGVUZXh0V2lkdGhcbiAgICAgIH0gZWxzZSBpZiAodGV4dExlbmd0aCA8IG1heExlbmd0aE5vcm1hbEJ1YmJsZSkge1xuICAgICAgICBNZXNoUmVuZGVyZXIuc2V0UGxhbmUoYnViYmxlLnBhbmVsLFxuICAgICAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICAgICAgYnViYmxlT3B0aW9ucy5ub3JtYWwsXG4gICAgICAgICAgICAxMDI0LFxuICAgICAgICAgICAgMTAyNFxuICAgICAgICAgICkpXG5cbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gbm9ybWFsQnViYmxlWFxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUucGFuZWwpLnNjYWxlLnkgPSBub3JtYWxCdWJibGVZXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnggPSBub3JtYWxCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBub3JtYWxCdWJibGVZT2Zmc2V0XG4gICAgICAgIFRleHRTaGFwZS5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS53aWR0aCA9IG5vcm1hbEJ1YmJsZVRleHRXaWR0aFxuICAgICAgfSBlbHNlIGlmICh0ZXh0TGVuZ3RoIDwgbWF4TGVuZ3RoTG9uZ0J1YmJsZSkge1xuICAgICAgICBNZXNoUmVuZGVyZXIuc2V0UGxhbmUoYnViYmxlLnBhbmVsLFxuICAgICAgICAgICAgc2V0VVZTZWN0aW9uKFxuICAgICAgICAgICAgYnViYmxlT3B0aW9ucy5sb25nLFxuICAgICAgICAgICAgMTAyNCxcbiAgICAgICAgICAgIDEwMjRcbiAgICAgICAgICApKVxuXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueCA9IGxvbmdCdWJibGVYXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5wYW5lbCkuc2NhbGUueSA9IGxvbmdCdWJibGVZXG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnggPSBsb25nQnViYmxlWE9mZnNldFxuICAgICAgICBUcmFuc2Zvcm0uZ2V0TXV0YWJsZShidWJibGUuY29udGFpbmVyKS5wb3NpdGlvbi55ID0gYnViYmxlLmJhc2VZT2Zmc2V0ICsgbG9uZ0J1YmJsZVlPZmZzZXRcbiAgICAgICAgVGV4dFNoYXBlLmdldE11dGFibGUoYnViYmxlLnRleHQpLndpZHRoID0gbG9uZ0J1YmJsZVRleHRXaWR0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTWVzaFJlbmRlcmVyLnNldFBsYW5lKGJ1YmJsZS5wYW5lbCxcbiAgICAgICAgICAgIHNldFVWU2VjdGlvbihcbiAgICAgICAgICAgIGJ1YmJsZU9wdGlvbnMuaHVnZSxcbiAgICAgICAgICAgIDEwMjQsXG4gICAgICAgICAgICAxMDI0XG4gICAgICAgICAgKSlcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS54ID0gaHVnZUJ1YmJsZVhcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLnBhbmVsKS5zY2FsZS55ID0gaHVnZUJ1YmJsZVlcbiAgICAgICAgVHJhbnNmb3JtLmdldE11dGFibGUoYnViYmxlLmNvbnRhaW5lcikucG9zaXRpb24ueCA9IGh1Z2VCdWJibGVYT2Zmc2V0XG4gICAgICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS5jb250YWluZXIpLnBvc2l0aW9uLnkgPSBidWJibGUuYmFzZVlPZmZzZXQgKyBodWdlQnViYmxlWU9mZnNldFxuICAgICAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkud2lkdGggPSBodWdlQnViYmxlVGV4dFdpZHRoXG4gICAgICB9XG59XG5cbi8vIEFkZHMgdGhlIGJ1dHRvbnMgb3IgbW91c2UgaWNvbiBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2Ygd2luZG93XG5mdW5jdGlvbiBsYXlvdXREaWFsb2dXaW5kb3cobnBjOkVudGl0eSwgdGV4dElkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGxldCBjdXJyZW50VGV4dDogRGlhbG9nID0gYnViYmxlLnNjcmlwdFt0ZXh0SWRdXG4gICAgICA/IGJ1YmJsZS5zY3JpcHRbdGV4dElkXVxuICAgICAgOiB7IHRleHQ6ICcnIH1cblxuICAgIC8vIFVwZGF0ZSB0ZXh0XG4gICAgbGV0IHRleHRZID0gY3VycmVudFRleHQub2Zmc2V0WSA/IGN1cnJlbnRUZXh0Lm9mZnNldFkgKyB0ZXh0WVBvcyA6IHRleHRZUG9zXG5cbiAgICBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAzKSB7XG4gICAgICB0ZXh0WSArPSA1MFxuICAgIH0gZWxzZSBpZiAoY3VycmVudFRleHQuYnV0dG9ucyAmJiBjdXJyZW50VGV4dC5idXR0b25zLmxlbmd0aCA+PSAxKSB7XG4gICAgICB0ZXh0WSArPSAyNFxuICAgIH1cbiAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkuZm9udFNpemUgPSBjdXJyZW50VGV4dC5mb250U2l6ZVxuICAgID8gY3VycmVudFRleHQuZm9udFNpemVcbiAgICA6IHRleHRTaXplXG4gICAgXG4gICAgVmlzaWJpbGl0eUNvbXBvbmVudC5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS52aXNpYmxlID0gdHJ1ZVxuICAgIFRyYW5zZm9ybS5nZXRNdXRhYmxlKGJ1YmJsZS50ZXh0KS5wb3NpdGlvbi55ID0gdGV4dFlcblxuICAgIGlmIChjdXJyZW50VGV4dC5hdWRpbykge1xuICAgICAgICBBdWRpb1NvdXJjZS5jcmVhdGVPclJlcGxhY2UoYnViYmxlLnNvdW5kUGxheWVyLCB7XG4gICAgICAgICAgICBhdWRpb0NsaXBVcmw6IGN1cnJlbnRUZXh0LmF1ZGlvLFxuICAgICAgICAgICAgbG9vcDogZmFsc2UsXG4gICAgICAgICAgICBwbGF5aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBsZXQgYXVkaW8gPSBBdWRpb1NvdXJjZS5nZXRNdXRhYmxlKGJ1YmJsZS5zb3VuZFBsYXllcilcbiAgICAgICAgYXVkaW8udm9sdW1lID0gMC41XG4gICAgICAgIGF1ZGlvLnBsYXlpbmcgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChidWJibGUuc291bmQpIHtcbiAgICAgICAgQXVkaW9Tb3VyY2UuY3JlYXRlT3JSZXBsYWNlKGJ1YmJsZS5zb3VuZFBsYXllciwge1xuICAgICAgICAgICAgYXVkaW9DbGlwVXJsOiBidWJibGUuc291bmQsXG4gICAgICAgICAgICBsb29wOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYXlpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGxldCBhdWRpbyA9IEF1ZGlvU291cmNlLmdldE11dGFibGUoYnViYmxlLnNvdW5kUGxheWVyKVxuICAgICAgICBhdWRpby52b2x1bWUgPSAwLjVcbiAgICAgICAgYXVkaW8ucGxheWluZyA9IHRydWVcbiAgICB9XG5cbiAgfVxuXG4vLyBQcm9ncmVzc2VzIHRleHRcbmV4cG9ydCBmdW5jdGlvbiBuZXh0KG5wYzpFbnRpdHkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnbmV4dCB0ZXh0JylcbiAgICBsZXQgYnViYmxlID0gYnViYmxlcy5nZXQobnBjKVxuICAgIGxldCBjdXJyZW50VGV4dCA9IGJ1YmJsZS5zY3JpcHRbYnViYmxlLmluZGV4XVxuXG5cdGlmKCFjdXJyZW50VGV4dCl7XG5cdFx0Y3VycmVudFRleHQgPSBidWJibGUuc2NyaXB0W2J1YmJsZS5pbmRleC0xXVxuXHR9XG5cbiAgICBpZiAoY3VycmVudFRleHQudHJpZ2dlcmVkQnlOZXh0KSB7XG4gICAgICBjdXJyZW50VGV4dC50cmlnZ2VyZWRCeU5leHQoKVxuICAgIH1cblxuXHRpZiAoY3VycmVudFRleHQuaXNFbmRPZkRpYWxvZykge1xuXHRcdGNsb3NlQnViYmxlKG5wYylcblx0XHRyZXR1cm5cblx0ICB9XG4gICBcblx0IC8vIFVwZGF0ZSBhY3RpdmUgdGV4dFxuICAgICBidWJibGUuaW5kZXgrK1xuXG4gICAgLy8gVXBkYXRlIGFjdGl2ZSB0ZXh0IHdpdGggbmV3IGFjdGl2ZSB0ZXh0XG4gICAgY3VycmVudFRleHQgPSBidWJibGUuc2NyaXB0W2J1YmJsZS5pbmRleF1cblxuICAgIGlmIChjdXJyZW50VGV4dC50ZXh0Lmxlbmd0aCA8IG1heExlbmd0aEh1Z2VCdWJibGUpIHtcbiAgICAgIGN1cnJlbnRUZXh0LnRleHQuc2xpY2UoMCwgbWF4TGVuZ3RoSHVnZUJ1YmJsZSlcbiAgICB9XG5cbiAgICBUZXh0U2hhcGUuZ2V0TXV0YWJsZShidWJibGUudGV4dCkudGV4dCA9IFwiXCJcblxuICAgIGFkanVzdEJ1YmJsZShucGMsIGN1cnJlbnRUZXh0LnRleHQubGVuZ3RoKVxuXG4gICAgYmVnaW5UeXBpbmcoXG4gICAgICAgIG5wYyxcbiAgICAgICAgY3VycmVudFRleHQudGV4dCxcbiAgICAgICAgYnViYmxlLmluZGV4LFxuICAgICAgICBjdXJyZW50VGV4dC50aW1lT24gPyBjdXJyZW50VGV4dC50aW1lT24gOiB1bmRlZmluZWQsXG4gICAgICAgIGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA/IGN1cnJlbnRUZXh0LnR5cGVTcGVlZCA6IHVuZGVmaW5lZCBcbiAgICApXG5cdGxheW91dERpYWxvZ1dpbmRvdyhucGMsIGJ1YmJsZS5pbmRleClcbiAgfVxuXG5mdW5jdGlvbiBzZXRVVlNlY3Rpb24oXG5cdHNlY3Rpb246IEltYWdlU2VjdGlvbixcblx0c2l6ZVg6IG51bWJlcixcblx0c2l6ZVk6IG51bWJlclxuICApIHtcblx0cmV0dXJuIHNldFVWcyhcbiAgICAgICAge3g6ICBzZWN0aW9uLnNvdXJjZUxlZnQhIC8gc2l6ZVgsIHk6IChzaXplWSAtIHNlY3Rpb24uc291cmNlVG9wISAtIHNlY3Rpb24uc291cmNlSGVpZ2h0KSAvIHNpemVZfSxcbiAgICAgICAge3g6ICAoc2VjdGlvbi5zb3VyY2VMZWZ0ISArIHNlY3Rpb24uc291cmNlV2lkdGgpIC8gc2l6ZVgsIHk6IChzaXplWSAtIHNlY3Rpb24uc291cmNlVG9wISAtIHNlY3Rpb24uc291cmNlSGVpZ2h0KSAvIHNpemVZfSxcbiAgICAgICAge3g6ICAoc2VjdGlvbi5zb3VyY2VMZWZ0ISArIHNlY3Rpb24uc291cmNlV2lkdGgpIC8gc2l6ZVgsIHk6ICAoc2l6ZVkgLSBzZWN0aW9uLnNvdXJjZVRvcCEpIC8gc2l6ZVl9LFxuICAgICAgICB7eDogIHNlY3Rpb24uc291cmNlTGVmdCEgLyBzaXplWCwgeTogKHNpemVZIC0gc2VjdGlvbi5zb3VyY2VUb3AhKSAvIHNpemVZfSxcblx0KVxuICB9XG5cbmZ1bmN0aW9uIHNldFVWcyhcblx0X3V2MDA6IGFueSxcblx0X3V2MTA6IGFueSxcblx0X3V2MTE6IGFueSxcblx0X3V2MDE6IGFueVxuICApIHtcblxuXHRyZXR1cm4gW1xuXHQgIF91djAwLngsXG5cdCAgX3V2MDAueSxcbiAgXG5cdCAgX3V2MTAueCxcblx0ICBfdXYxMC55LFxuICBcblx0ICBfdXYxMS54LFxuXHQgIF91djExLnksXG4gIFxuXHQgIF91djAxLngsXG5cdCAgX3V2MDEueSxcblx0ICAvLy0tLS1cblx0ICBfdXYwMC54LFxuXHQgIF91djAwLnksXG4gIFxuXHQgIF91djEwLngsXG5cdCAgX3V2MTAueSxcbiAgXG5cdCAgX3V2MTEueCxcblx0ICBfdXYxMS55LFxuICBcblx0ICBfdXYwMS54LFxuXHQgIF91djAxLnksXG5cdF1cbiAgfVxuXG4gIGxldCBidWJibGVPcHRpb25zOmFueSA9IHtcbiAgICBzaG9ydDoge1xuICAgICAgc291cmNlV2lkdGg6IDExNiAqIDIsXG4gICAgICBzb3VyY2VIZWlnaHQ6IDg0ICogMixcbiAgICAgIHNvdXJjZUxlZnQ6IDMwNSAqIDIsXG4gICAgICBzb3VyY2VUb3A6IDQxNyAqIDIsXG4gICAgfSxcbiAgICBub3JtYWw6IHtcbiAgICAgIHNvdXJjZVdpZHRoOiAyODYgKiAyLFxuICAgICAgc291cmNlSGVpZ2h0OiA4NCAqIDIsXG4gICAgICBzb3VyY2VMZWZ0OiA4ICogMixcbiAgICAgIHNvdXJjZVRvcDogNDE3ICogMixcbiAgICB9LFxuICAgIGxvbmc6IHtcbiAgICAgIHNvdXJjZVdpZHRoOiA0OTcgKiAyLFxuICAgICAgc291cmNlSGVpZ2h0OiAxNTMgKiAyLFxuICAgICAgc291cmNlTGVmdDogNiAqIDIsXG4gICAgICBzb3VyY2VUb3A6IDI1NCAqIDIsXG4gICAgfSxcbiAgICBodWdlOiB7XG4gICAgICBzb3VyY2VXaWR0aDogNDk3ICogMixcbiAgICAgIHNvdXJjZUhlaWdodDogMjM5ICogMixcbiAgICAgIHNvdXJjZUxlZnQ6IDYgKiAyLFxuICAgICAgc291cmNlVG9wOiA3ICogMixcbiAgICB9LFxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdWJibGVUZXh0TGVuZ3RoKHRleHQ6c3RyaW5nKXtcbiAgICBpZih0ZXh0Lmxlbmd0aCA+PSBtYXhMZW5ndGhIdWdlQnViYmxlKXtcbiAgICAgICAgcmV0dXJuIDQwXG4gICAgfVxuICAgIGVsc2UgaWYodGV4dC5sZW5ndGggPj0gbWF4TGVuZ3RoTG9uZ0J1YmJsZSl7XG4gICAgICAgIHJldHVybiA0MFxuICAgIH1cbiAgICBlbHNlIGlmKHRleHQubGVuZ3RoID49IG1heExlbmd0aE5vcm1hbEJ1YmJsZSl7XG4gICAgICAgIHJldHVybiA0MFxuICAgIH1cbiAgICBlbHNlIGlmKHRleHQubGVuZ3RoID49IG1heExlbmd0aFNob3J0QnViYmxlKXtcbiAgICAgICAgcmV0dXJuIDQwXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0VVZzMihyb3dzOiBudW1iZXIsIGNvbHM6IG51bWJlcikge1xuICAgIHJldHVybiBbXG4gICAgICAvLyBOb3J0aCBzaWRlIG9mIHVucm9ydGF0ZWQgcGxhbmVcbiAgICAgIDAsIC8vbG93ZXItbGVmdCBjb3JuZXJcbiAgICAgIDAsXG4gIFxuICAgICAgY29scywgLy9sb3dlci1yaWdodCBjb3JuZXJcbiAgICAgIDAsXG4gIFxuICAgICAgY29scywgLy91cHBlci1yaWdodCBjb3JuZXJcbiAgICAgIHJvd3MsXG4gIFxuICAgICAgMCwgLy91cHBlciBsZWZ0LWNvcm5lclxuICAgICAgcm93cyxcbiAgXG4gICAgICAvLyBTb3V0aCBzaWRlIG9mIHVucm9ydGF0ZWQgcGxhbmVcbiAgICAgIGNvbHMsIC8vIGxvd2VyLXJpZ2h0IGNvcm5lclxuICAgICAgMCxcbiAgXG4gICAgICAwLCAvLyBsb3dlci1sZWZ0IGNvcm5lclxuICAgICAgMCxcbiAgXG4gICAgICAwLCAvLyB1cHBlci1sZWZ0IGNvcm5lclxuICAgICAgcm93cyxcbiAgXG4gICAgICBjb2xzLCAvLyB1cHBlci1yaWdodCBjb3JuZXJcbiAgICAgIHJvd3MsXG4gICAgXVxuICB9Il19
|
package/dist/components.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export declare const IsFollowingPath: import("@dcl/sdk/ecs").MapComponentDefinition<import("@dcl/sdk/ecs").MapResult<{}>>;
|
|
2
2
|
export declare const IsTypingDialog: import("@dcl/sdk/ecs").MapComponentDefinition<import("@dcl/sdk/ecs").MapResult<{}>>;
|
|
3
|
+
export declare const IsTypingBubble: import("@dcl/sdk/ecs").MapComponentDefinition<import("@dcl/sdk/ecs").MapResult<{}>>;
|
package/dist/components.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { engine } from "@dcl/sdk/ecs";
|
|
2
2
|
export const IsFollowingPath = engine.defineComponent("isFollowingPath", {});
|
|
3
3
|
export const IsTypingDialog = engine.defineComponent("isTypingDialog", {});
|
|
4
|
-
|
|
4
|
+
export const IsTypingBubble = engine.defineComponent("isTypingBubble", {});
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdEMsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDNUUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUE7QUFDMUUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbmdpbmUgfSBmcm9tIFwiQGRjbC9zZGsvZWNzXCI7XG5cbmV4cG9ydCBjb25zdCBJc0ZvbGxvd2luZ1BhdGggPSBlbmdpbmUuZGVmaW5lQ29tcG9uZW50KFwiaXNGb2xsb3dpbmdQYXRoXCIsIHt9KVxuZXhwb3J0IGNvbnN0IElzVHlwaW5nRGlhbG9nID0gZW5naW5lLmRlZmluZUNvbXBvbmVudChcImlzVHlwaW5nRGlhbG9nXCIsIHt9KVxuZXhwb3J0IGNvbnN0IElzVHlwaW5nQnViYmxlID0gZW5naW5lLmRlZmluZUNvbXBvbmVudChcImlzVHlwaW5nQnViYmxlXCIsIHt9KVxuXG5cbiJdfQ==
|
package/dist/dialog.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export declare function getTextPosition(): {
|
|
|
23
23
|
export declare function buttonClick(button: number): void;
|
|
24
24
|
export declare function closeDialog(npc: Entity): void;
|
|
25
25
|
export declare function talk(npc: Entity, dialog: Dialog[], startIndex?: number, duration?: number): void;
|
|
26
|
+
export declare function addLineBreaks(dialog: Dialog[], bubble?: boolean): Dialog[];
|
|
26
27
|
export declare function handleDialogClick(): void;
|
|
27
28
|
export declare function confirmText(npc: Entity, mode: ConfirmMode): void;
|
|
28
29
|
export type ImageAtlasData = {
|