@vnejs/plugins.text 0.1.3 → 0.1.5
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/modules/cycle.js +19 -8
- package/modules/interact.js +1 -1
- package/modules/meet.js +4 -2
- package/modules/speaker.js +2 -11
- package/modules/text.js +8 -4
- package/modules/utils.js +1 -1
- package/modules/wall.js +19 -12
- package/package.json +1 -1
package/modules/cycle.js
CHANGED
|
@@ -14,31 +14,42 @@ export class TextCycle extends Module {
|
|
|
14
14
|
|
|
15
15
|
init = () => this.emit(this.EVENTS.SETTINGS.INIT, { name: this.SETTINGS.TEXT.TOKEN_RENDER_SPEED, value: this.PARAMS.TEXT.DEFAULT_TOKEN_RENDER_SPEED });
|
|
16
16
|
|
|
17
|
-
onCicle = ({ tokens = [] } = {}) =>
|
|
17
|
+
onCicle = ({ tokens = [] } = {}) => {
|
|
18
|
+
this.setState({ tokens, lastTs: new Date().getTime() });
|
|
19
|
+
this.setUpdateTextRaf();
|
|
20
|
+
};
|
|
18
21
|
|
|
19
|
-
setUpdateTextRaf = (
|
|
20
|
-
this.textUpdateRaf = requestAnimationFrame(this.createUpdateTextFunc
|
|
22
|
+
setUpdateTextRaf = () => {
|
|
23
|
+
this.textUpdateRaf = requestAnimationFrame(this.createUpdateTextFunc);
|
|
21
24
|
};
|
|
22
25
|
|
|
23
|
-
createUpdateTextFunc =
|
|
26
|
+
createUpdateTextFunc = async () => {
|
|
27
|
+
const { lastTs, tokens = [] } = this.state;
|
|
28
|
+
|
|
24
29
|
const ts = new Date().getTime();
|
|
25
30
|
const diff = ts - lastTs;
|
|
26
31
|
|
|
27
32
|
const delayForOneChar = this.PARAMS.TEXT.TOKEN_RENDER_DELAY / this.shared.settings[this.SETTINGS.TEXT.TOKEN_RENDER_SPEED];
|
|
28
33
|
|
|
29
|
-
if (diff < delayForOneChar) return this.setUpdateTextRaf(
|
|
34
|
+
if (diff < delayForOneChar) return this.setUpdateTextRaf();
|
|
30
35
|
|
|
31
36
|
this.globalState.text.tokensVisible += Math.floor(diff / delayForOneChar);
|
|
32
37
|
|
|
33
38
|
const { tokens: currentTokens, tokensVisible = 0, uid = "" } = this.globalState.text;
|
|
34
39
|
const { wall = [] } = this.globalState["text.wall"];
|
|
35
40
|
|
|
36
|
-
if (currentTokens !== tokens) return;
|
|
37
|
-
if (tokensVisible
|
|
41
|
+
if (currentTokens !== tokens) return this.setDefaultState();
|
|
42
|
+
if (tokensVisible >= tokens.length) {
|
|
43
|
+
this.setDefaultState();
|
|
44
|
+
|
|
45
|
+
return this.emit(this.EVENTS.TEXT.EMIT_END, { isForced: false });
|
|
46
|
+
}
|
|
38
47
|
|
|
39
48
|
await this.emit(this.EVENTS.TEXT.CHANGED, { tokens, tokensVisible, uid, wall });
|
|
40
49
|
|
|
41
|
-
|
|
50
|
+
this.updateState({ lastTs: ts - (diff % delayForOneChar) });
|
|
51
|
+
|
|
52
|
+
return this.setUpdateTextRaf();
|
|
42
53
|
};
|
|
43
54
|
|
|
44
55
|
cancelRaf = () => cancelAnimationFrame(this.textUpdateRaf);
|
package/modules/interact.js
CHANGED
|
@@ -27,7 +27,7 @@ export class TextInteract extends Module {
|
|
|
27
27
|
await this.emit(state === this.CONST.TEXT.INTERACT_STATES.SHOWED ? this.EVENTS.INTERACT.PUSH : this.EVENTS.INTERACT.POP, this.interactArgShowed);
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
-
onStateSet = ({ [this.name]: state }) => this.emit(this.EVENTS.TEXT.INTERACT, state);
|
|
30
|
+
onStateSet = async ({ [this.name]: state } = {}) => this.emit(this.EVENTS.TEXT.INTERACT, await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
|
|
31
31
|
onStateClear = () => this.emit(this.EVENTS.TEXT.INTERACT, this.getDefaultState());
|
|
32
32
|
|
|
33
33
|
getDefaultState = () => ({ state: this.CONST.TEXT.INTERACT_STATES.EMPTY });
|
package/modules/meet.js
CHANGED
|
@@ -8,7 +8,7 @@ export class TextMeet extends Module {
|
|
|
8
8
|
subscribe = () => {
|
|
9
9
|
this.on(this.EVENTS.TEXT.MEET, this.onMeet);
|
|
10
10
|
|
|
11
|
-
this.on(this.EVENTS.STATE.SET, this.
|
|
11
|
+
this.on(this.EVENTS.STATE.SET, this.onStateSet);
|
|
12
12
|
this.on(this.EVENTS.STATE.CLEAR, this.setDefaultState);
|
|
13
13
|
};
|
|
14
14
|
|
|
@@ -22,11 +22,13 @@ export class TextMeet extends Module {
|
|
|
22
22
|
this.emit(this.EVENTS.SCENARIO.NEXT, { module: this.name });
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
onMeet = ({ char, value = 1 }) => {
|
|
25
|
+
onMeet = ({ char, value = 1 } = {}) => {
|
|
26
26
|
this.emit(this.EVENTS.LOGS.EMIT, { module: this.name, value: { char, value } });
|
|
27
27
|
|
|
28
28
|
this.state[char] = this.state[char] ? this.state[char] + Number(value) : Number(value);
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
onStateSet = async ({ [this.name]: state } = {}) => this.setState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
|
|
32
|
+
|
|
31
33
|
getDefaultState = () => ({ default: 0 });
|
|
32
34
|
}
|
package/modules/speaker.js
CHANGED
|
@@ -9,23 +9,14 @@ export class TextSpeaker extends Module {
|
|
|
9
9
|
this.on(this.EVENTS.STATE.CLEAR, this.onStateClear);
|
|
10
10
|
this.on(this.EVENTS.STATE.SET, this.onStateSet);
|
|
11
11
|
};
|
|
12
|
-
init = () => this.emit(this.EVENTS.SCENARIO.LINE_EXEC_REG, { module: "text", handler: this.onLineTextHandler });
|
|
13
|
-
onLineTextHandler = async (line, args) => {
|
|
14
|
-
const { speaker: lineSpeaker } = line.match(this.CONST.TEXT.LINE_REG).groups;
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
const meet = this.globalState["text.meet"][speaker] ?? 0;
|
|
18
|
-
|
|
19
|
-
return this.emit(this.EVENTS.TEXT.SPEAKER, { speaker, meet, args });
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
onTextSpeaker = ({ speaker, meet, ...args }) => {
|
|
13
|
+
onTextSpeaker = ({ speaker, meet, ...args } = {}) => {
|
|
23
14
|
this.setState({ speaker, meet, args });
|
|
24
15
|
|
|
25
16
|
this.emit(this.EVENTS.TEXT.SPEAKER_CHANGED, { speaker, meet });
|
|
26
17
|
};
|
|
27
18
|
|
|
28
|
-
onStateSet = ({ [this.name]: state }) => this.setNewState(state);
|
|
19
|
+
onStateSet = async ({ [this.name]: state } = {}) => this.setNewState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
|
|
29
20
|
onStateClear = () => this.setNewState(this.getDefaultState());
|
|
30
21
|
|
|
31
22
|
setNewState = ({ speaker, meet, args } = {}) => this.emit(this.EVENTS.TEXT.SPEAKER, { speaker, meet, ...args });
|
package/modules/text.js
CHANGED
|
@@ -22,13 +22,17 @@ export class Text extends Module {
|
|
|
22
22
|
return this.emit(this.EVENTS.SCENARIO.LINE_EXEC_REG, { module: this.name, handler: this.onLineHandler });
|
|
23
23
|
};
|
|
24
24
|
onLineHandler = async (line, args) => {
|
|
25
|
-
const { text } = line.match(this.CONST.TEXT.LINE_REG).groups;
|
|
25
|
+
const { text, speaker: lineSpeaker } = line.match(this.CONST.TEXT.LINE_REG).groups;
|
|
26
|
+
|
|
27
|
+
const speaker = lineSpeaker || this.PARAMS.TEXT.DEFAULT_SPEAKER_NAME;
|
|
28
|
+
const meet = this.globalState["text.meet"][speaker] ?? 0;
|
|
26
29
|
|
|
27
30
|
await this.emit(this.EVENTS.TEXT.EMIT_BEFORE);
|
|
28
|
-
|
|
31
|
+
|
|
32
|
+
return Promise.all([this.emit(this.EVENTS.TEXT.SPEAKER, { speaker, meet, args }), this.emit(this.EVENTS.TEXT.EMIT, { text, ...args })]);
|
|
29
33
|
};
|
|
30
34
|
|
|
31
|
-
onTextEmit = async ({ text, ...args }) => {
|
|
35
|
+
onTextEmit = async ({ text, ...args } = {}) => {
|
|
32
36
|
const [uid, tokens] = [await this.emitOne(this.EVENTS.VENDORS.UID), textToTokens(await this.getRealText(text))];
|
|
33
37
|
const tokensVisible = this.shared.textNoAnimationSources.length ? BIG_VALUE : 0;
|
|
34
38
|
|
|
@@ -59,7 +63,7 @@ export class Text extends Module {
|
|
|
59
63
|
|
|
60
64
|
return this.emitTextChanged();
|
|
61
65
|
};
|
|
62
|
-
onStateSet = ({ [this.name]: state }) => this.setNewState(state);
|
|
66
|
+
onStateSet = async ({ [this.name]: state } = {}) => this.setNewState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
|
|
63
67
|
onStateClear = () => this.setNewState(this.getDefaultState());
|
|
64
68
|
|
|
65
69
|
setNewState = (state) => this.emit(this.EVENTS.TEXT.EMIT, { text: state.text, ...state.args });
|
package/modules/utils.js
CHANGED
package/modules/wall.js
CHANGED
|
@@ -6,39 +6,46 @@ export class TextWall extends Module {
|
|
|
6
6
|
name = "text.wall";
|
|
7
7
|
|
|
8
8
|
subscribe = () => {
|
|
9
|
-
this.on(this.EVENTS.TEXT.
|
|
9
|
+
this.on(this.EVENTS.TEXT.EMIT_BEFORE, this.onTextEmitBefore);
|
|
10
10
|
|
|
11
11
|
this.on(this.EVENTS.TEXT.RECALC, this.onTextRecalc);
|
|
12
12
|
|
|
13
13
|
this.on(this.EVENTS.STATE.CLEAR, this.setDefaultState);
|
|
14
|
-
this.on(this.EVENTS.STATE.SET, this.
|
|
14
|
+
this.on(this.EVENTS.STATE.SET, this.onStateSet);
|
|
15
15
|
};
|
|
16
16
|
init = () => this.emit(this.EVENTS.SCENARIO.LINE_EXEC_REG, { module: this.name, handler: this.onLineHandler });
|
|
17
17
|
onLineHandler = (line) => {
|
|
18
|
-
if (line === "clear") this.updateState({ wall: [] });
|
|
19
|
-
if (line === "start") this.updateState({ wall: [],
|
|
20
|
-
if (line === "end") this.updateState({ wall: [],
|
|
18
|
+
if (line === "clear") this.updateState({ wall: [], shouldSkip: false });
|
|
19
|
+
if (line === "start") this.updateState({ wall: [], isStarted: true, shouldSkip: true });
|
|
20
|
+
if (line === "end") this.updateState({ wall: [], isStarted: false, shouldSkip: true });
|
|
21
21
|
|
|
22
22
|
this.emit(this.EVENTS.SCENARIO.NEXT, { module: this.name });
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
if (state
|
|
25
|
+
onTextEmitBefore = async () => {
|
|
26
|
+
if (this.state.shouldSkip) return this.updateState({ shouldSkip: false });
|
|
27
|
+
if (!this.state.isStarted) return;
|
|
27
28
|
|
|
28
29
|
const { text, tokens, uid, args } = this.globalState.text;
|
|
29
30
|
const { speaker, meet } = this.globalState["text.speaker"];
|
|
30
31
|
|
|
31
|
-
this.
|
|
32
|
+
const wallElement = await this.emitOne(this.EVENTS.VENDORS.CLONE, { text, tokens, uid, args, speaker, meet });
|
|
33
|
+
const wall = await this.emitOne(this.EVENTS.VENDORS.CLONE, this.state.wall);
|
|
34
|
+
|
|
35
|
+
this.updateState({ wall: [...wall, wallElement] });
|
|
32
36
|
};
|
|
33
37
|
onTextRecalc = async () => {
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
});
|
|
38
|
+
if (!this.state.wall.length) return;
|
|
39
|
+
|
|
40
|
+
this.updateState({ wall: await Promise.all(this.state.wall.map(this.recalcWallObjToken)) });
|
|
37
41
|
|
|
38
42
|
return this.emit(this.EVENTS.TEXT.CHANGED, { ...this.globalState.text, wall: this.state.wall });
|
|
39
43
|
};
|
|
40
44
|
|
|
45
|
+
onStateSet = async ({ [this.name]: state } = {}) => this.setState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
|
|
46
|
+
|
|
41
47
|
getRealText = (text) => this.emitOne(this.EVENTS.TEXT.REPLACE, { text, label: this.globalState.scenario.label, state: this.globalState });
|
|
48
|
+
recalcWallObjToken = async (wallObj) => ({ ...wallObj, tokens: textToTokens(await this.getRealText(wallObj.text)) });
|
|
42
49
|
|
|
43
|
-
getDefaultState = () => ({ wall: [],
|
|
50
|
+
getDefaultState = () => ({ wall: [], isStarted: false, shouldSkip: false });
|
|
44
51
|
}
|