@vnejs/plugins.text 0.1.4 → 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 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 = [] } = {}) => this.setUpdateTextRaf(tokens, new Date().getTime());
17
+ onCicle = ({ tokens = [] } = {}) => {
18
+ this.setState({ tokens, lastTs: new Date().getTime() });
19
+ this.setUpdateTextRaf();
20
+ };
18
21
 
19
- setUpdateTextRaf = (tokens, ts) => {
20
- this.textUpdateRaf = requestAnimationFrame(this.createUpdateTextFunc(tokens, ts));
22
+ setUpdateTextRaf = () => {
23
+ this.textUpdateRaf = requestAnimationFrame(this.createUpdateTextFunc);
21
24
  };
22
25
 
23
- createUpdateTextFunc = (tokens, lastTs) => async () => {
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(tokens, lastTs);
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 > tokens.length) return this.emit(this.EVENTS.TEXT.EMIT_END, { isForced: false });
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
- return this.setUpdateTextRaf(tokens, ts - (diff % delayForOneChar));
50
+ this.updateState({ lastTs: ts - (diff % delayForOneChar) });
51
+
52
+ return this.setUpdateTextRaf();
42
53
  };
43
54
 
44
55
  cancelRaf = () => cancelAnimationFrame(this.textUpdateRaf);
@@ -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.setStateFromGlobalState);
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
  }
@@ -10,13 +10,13 @@ export class TextSpeaker extends Module {
10
10
  this.on(this.EVENTS.STATE.SET, this.onStateSet);
11
11
  };
12
12
 
13
- onTextSpeaker = ({ speaker, meet, ...args }) => {
13
+ onTextSpeaker = ({ speaker, meet, ...args } = {}) => {
14
14
  this.setState({ speaker, meet, args });
15
15
 
16
16
  this.emit(this.EVENTS.TEXT.SPEAKER_CHANGED, { speaker, meet });
17
17
  };
18
18
 
19
- onStateSet = ({ [this.name]: state }) => this.setNewState(state);
19
+ onStateSet = async ({ [this.name]: state } = {}) => this.setNewState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
20
20
  onStateClear = () => this.setNewState(this.getDefaultState());
21
21
 
22
22
  setNewState = ({ speaker, meet, args } = {}) => this.emit(this.EVENTS.TEXT.SPEAKER, { speaker, meet, ...args });
package/modules/text.js CHANGED
@@ -32,7 +32,7 @@ export class Text extends Module {
32
32
  return Promise.all([this.emit(this.EVENTS.TEXT.SPEAKER, { speaker, meet, args }), this.emit(this.EVENTS.TEXT.EMIT, { text, ...args })]);
33
33
  };
34
34
 
35
- onTextEmit = async ({ text, ...args }) => {
35
+ onTextEmit = async ({ text, ...args } = {}) => {
36
36
  const [uid, tokens] = [await this.emitOne(this.EVENTS.VENDORS.UID), textToTokens(await this.getRealText(text))];
37
37
  const tokensVisible = this.shared.textNoAnimationSources.length ? BIG_VALUE : 0;
38
38
 
@@ -63,7 +63,7 @@ export class Text extends Module {
63
63
 
64
64
  return this.emitTextChanged();
65
65
  };
66
- onStateSet = ({ [this.name]: state }) => this.setNewState(state);
66
+ onStateSet = async ({ [this.name]: state } = {}) => this.setNewState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
67
67
  onStateClear = () => this.setNewState(this.getDefaultState());
68
68
 
69
69
  setNewState = (state) => this.emit(this.EVENTS.TEXT.EMIT, { text: state.text, ...state.args });
package/modules/wall.js CHANGED
@@ -11,7 +11,7 @@ export class TextWall extends Module {
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.setStateFromGlobalState);
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) => {
@@ -22,20 +22,28 @@ export class TextWall extends Module {
22
22
  this.emit(this.EVENTS.SCENARIO.NEXT, { module: this.name });
23
23
  };
24
24
 
25
- onTextEmitBefore = () => {
25
+ onTextEmitBefore = async () => {
26
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.updateState({ wall: [...this.state.wall, { text, tokens, uid, args, speaker, meet }] });
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 () => {
38
+ if (!this.state.wall.length) return;
39
+
34
40
  this.updateState({ wall: await Promise.all(this.state.wall.map(this.recalcWallObjToken)) });
35
41
 
36
42
  return this.emit(this.EVENTS.TEXT.CHANGED, { ...this.globalState.text, wall: this.state.wall });
37
43
  };
38
44
 
45
+ onStateSet = async ({ [this.name]: state } = {}) => this.setState(await this.emitOne(this.EVENTS.VENDORS.CLONE, state));
46
+
39
47
  getRealText = (text) => this.emitOne(this.EVENTS.TEXT.REPLACE, { text, label: this.globalState.scenario.label, state: this.globalState });
40
48
  recalcWallObjToken = async (wallObj) => ({ ...wallObj, tokens: textToTokens(await this.getRealText(wallObj.text)) });
41
49
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vnejs/plugins.text",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "scripts": {