From 0fe64fc7d99b465ba2b4800b49807c3b1737fb7f Mon Sep 17 00:00:00 2001 From: JeffY Date: Wed, 28 Jan 2026 22:51:52 +0800 Subject: [PATCH] System variable for auto-forward time --- .../actions/markLineCompleted.spec.yaml | 68 ++++++++++++++- .../system/actions/setAutoplayDelay.spec.yaml | 59 ------------- spec/system/actions/startAutoMode.spec.yaml | 60 +++++++++++-- spec/system/actions/toggleAutoMode.spec.yaml | 84 +++++++++++++++---- spec/system/createInitialState.spec.yaml | 5 -- src/stores/system.store.js | 33 ++------ 6 files changed, 195 insertions(+), 114 deletions(-) delete mode 100644 spec/system/actions/setAutoplayDelay.spec.yaml diff --git a/spec/system/actions/markLineCompleted.spec.yaml b/spec/system/actions/markLineCompleted.spec.yaml index bc52a4c..df66b64 100644 --- a/spec/system/actions/markLineCompleted.spec.yaml +++ b/spec/system/actions/markLineCompleted.spec.yaml @@ -50,7 +50,8 @@ in: global: isLineCompleted: false autoMode: true - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 nextLineConfig: manual: enabled: true @@ -61,7 +62,68 @@ out: global: isLineCompleted: true autoMode: true - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 + nextLineConfig: + manual: + enabled: true + auto: + enabled: false + pendingEffects: + - name: startAutoNextTimer + payload: + delay: 1000 + - name: render +--- +case: mark line as completed with auto mode and custom _autoForwardTime +in: + - state: + global: + isLineCompleted: false + autoMode: true + variables: + _autoForwardTime: 2000 + nextLineConfig: + manual: + enabled: true + auto: + enabled: false + pendingEffects: [] +out: + global: + isLineCompleted: true + autoMode: true + variables: + _autoForwardTime: 2000 + nextLineConfig: + manual: + enabled: true + auto: + enabled: false + pendingEffects: + - name: startAutoNextTimer + payload: + delay: 2000 + - name: render +--- +case: mark line as completed with auto mode and default _autoForwardTime (not set) +in: + - state: + global: + isLineCompleted: false + autoMode: true + variables: {} + nextLineConfig: + manual: + enabled: true + auto: + enabled: false + pendingEffects: [] +out: + global: + isLineCompleted: true + autoMode: true + variables: {} nextLineConfig: manual: enabled: true @@ -130,4 +192,4 @@ out: trigger: "fromStart" delay: 1500 pendingEffects: - - name: render \ No newline at end of file + - name: render diff --git a/spec/system/actions/setAutoplayDelay.spec.yaml b/spec/system/actions/setAutoplayDelay.spec.yaml deleted file mode 100644 index ea28a83..0000000 --- a/spec/system/actions/setAutoplayDelay.spec.yaml +++ /dev/null @@ -1,59 +0,0 @@ -file: "../../../src/stores/system.store.js" -group: systemStore.setAutoplayDelay -suites: [setAutoplayDelay] ---- -suite: setAutoplayDelay -exportName: setAutoplayDelay ---- -case: set autoplay delay when auto mode is OFF -in: - - state: - global: - autoMode: false - autoplayDelay: 1000 - pendingEffects: [] - - delay: 2000 -out: - global: - autoMode: false - autoplayDelay: 2000 - pendingEffects: - - name: render ---- -case: set autoplay delay when auto mode is ON (should restart timer) -in: - - state: - global: - autoMode: true - autoplayDelay: 1000 - pendingEffects: [] - - delay: 500 -out: - global: - autoMode: true - autoplayDelay: 500 - pendingEffects: - - name: clearAutoNextTimer - - name: startAutoNextTimer - payload: - delay: 500 - - name: render ---- -case: set autoplay delay with existing pending effects -in: - - state: - global: - autoMode: false - autoplayDelay: 1000 - pendingEffects: - - name: existingEffect - data: test - - delay: 500 -out: - global: - autoMode: false - autoplayDelay: 500 - pendingEffects: - - name: existingEffect - data: test - - name: render \ No newline at end of file diff --git a/spec/system/actions/startAutoMode.spec.yaml b/spec/system/actions/startAutoMode.spec.yaml index 8924167..c7ec0c6 100644 --- a/spec/system/actions/startAutoMode.spec.yaml +++ b/spec/system/actions/startAutoMode.spec.yaml @@ -12,12 +12,14 @@ in: autoMode: false isLineCompleted: false pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true isLineCompleted: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: clearAutoNextTimer - name: render @@ -29,12 +31,14 @@ in: autoMode: true isLineCompleted: false pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true isLineCompleted: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: clearAutoNextTimer - name: render @@ -46,12 +50,56 @@ in: autoMode: false isLineCompleted: true pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true isLineCompleted: true - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 + pendingEffects: + - name: clearAutoNextTimer + - name: startAutoNextTimer + payload: + delay: 1000 + - name: render +--- +case: start auto mode with custom _autoForwardTime +in: + - state: + global: + autoMode: false + isLineCompleted: true + pendingEffects: [] + variables: + _autoForwardTime: 2500 +out: + global: + autoMode: true + isLineCompleted: true + variables: + _autoForwardTime: 2500 + pendingEffects: + - name: clearAutoNextTimer + - name: startAutoNextTimer + payload: + delay: 2500 + - name: render +--- +case: start auto mode with default _autoForwardTime (not set) +in: + - state: + global: + autoMode: false + isLineCompleted: true + pendingEffects: [] + variables: {} +out: + global: + autoMode: true + isLineCompleted: true + variables: {} pendingEffects: - name: clearAutoNextTimer - name: startAutoNextTimer diff --git a/spec/system/actions/toggleAutoMode.spec.yaml b/spec/system/actions/toggleAutoMode.spec.yaml index 15b41e9..1d6348c 100644 --- a/spec/system/actions/toggleAutoMode.spec.yaml +++ b/spec/system/actions/toggleAutoMode.spec.yaml @@ -12,12 +12,14 @@ in: autoMode: false isLineCompleted: false pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true isLineCompleted: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: clearAutoNextTimer - name: render @@ -29,12 +31,14 @@ in: autoMode: false isLineCompleted: true pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true isLineCompleted: true - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: clearAutoNextTimer - name: startAutoNextTimer @@ -49,12 +53,14 @@ in: autoMode: true isLineCompleted: false pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: false isLineCompleted: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: clearAutoNextTimer - name: render @@ -67,11 +73,13 @@ in: skipMode: true isLineCompleted: false pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 skipMode: false isLineCompleted: false pendingEffects: @@ -87,11 +95,13 @@ in: skipMode: true isLineCompleted: false pendingEffects: [] - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 skipMode: true isLineCompleted: false pendingEffects: @@ -107,12 +117,14 @@ in: pendingEffects: - name: existingEffect data: test - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: true isLineCompleted: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: existingEffect data: test @@ -128,14 +140,58 @@ in: pendingEffects: - name: existingEffect data: test - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 out: global: autoMode: false isLineCompleted: false - autoplayDelay: 1000 + variables: + _autoForwardTime: 1000 pendingEffects: - name: existingEffect data: test - name: clearAutoNextTimer - name: render +--- +case: toggle auto mode with custom _autoForwardTime +in: + - state: + global: + autoMode: false + isLineCompleted: true + pendingEffects: [] + variables: + _autoForwardTime: 2500 +out: + global: + autoMode: true + isLineCompleted: true + variables: + _autoForwardTime: 2500 + pendingEffects: + - name: clearAutoNextTimer + - name: startAutoNextTimer + payload: + delay: 2500 + - name: render +--- +case: toggle auto mode with default _autoForwardTime (not set) +in: + - state: + global: + autoMode: false + isLineCompleted: true + pendingEffects: [] + variables: {} +out: + global: + autoMode: true + isLineCompleted: true + variables: {} + pendingEffects: + - name: clearAutoNextTimer + - name: startAutoNextTimer + payload: + delay: 1000 + - name: render diff --git a/spec/system/createInitialState.spec.yaml b/spec/system/createInitialState.spec.yaml index 5533088..65ae9c6 100644 --- a/spec/system/createInitialState.spec.yaml +++ b/spec/system/createInitialState.spec.yaml @@ -22,7 +22,6 @@ in: actions: {} out: global: - autoplayDelay: 1000 isLineCompleted: false pendingEffects: [] autoMode: false @@ -108,7 +107,6 @@ in: actions: {} out: global: - autoplayDelay: 1000 isLineCompleted: false pendingEffects: [] autoMode: false @@ -211,7 +209,6 @@ in: actions: {} out: global: - autoplayDelay: 1000 isLineCompleted: false pendingEffects: [] autoMode: false @@ -305,7 +302,6 @@ in: actions: {} out: global: - autoplayDelay: 1000 isLineCompleted: false pendingEffects: [] autoMode: false @@ -395,7 +391,6 @@ in: actions: {} out: global: - autoplayDelay: 1000 isLineCompleted: false pendingEffects: [] autoMode: false diff --git a/src/stores/system.store.js b/src/stores/system.store.js index 6af3d78..ede774c 100644 --- a/src/stores/system.store.js +++ b/src/stores/system.store.js @@ -45,7 +45,6 @@ export const createInitialState = (payload) => { const state = { projectData, global: { - autoplayDelay: 1000, isLineCompleted: false, pendingEffects: [], autoMode: false, @@ -124,10 +123,6 @@ export const selectDialogueUIHidden = ({ state }) => { return state.global.dialogueUIHidden; }; -export const selectAutoplayDelay = ({ state }) => { - return state.global.autoplayDelay; -}; - export const selectDialogueHistory = ({ state }) => { const lastContext = state.contexts[state.contexts.length - 1]; if (!lastContext) { @@ -578,9 +573,10 @@ export const startAutoMode = ({ state }) => { // Only start timer immediately if line is already completed // Otherwise, markLineCompleted will start it when renderComplete fires if (state.global.isLineCompleted) { + const autoForwardTime = state.global.variables._autoForwardTime ?? 1000; state.global.pendingEffects.push({ name: "startAutoNextTimer", - payload: { delay: state.global.autoplayDelay }, + payload: { delay: autoForwardTime }, }); } @@ -855,23 +851,6 @@ export const setNextLineConfig = ({ state }, payload) => { return state; }; -export const setAutoplayDelay = ({ state }, { delay }) => { - state.global.autoplayDelay = delay; - - if (state.global.autoMode) { - state.global.pendingEffects.push({ name: "clearAutoNextTimer" }); - state.global.pendingEffects.push({ - name: "startAutoNextTimer", - payload: { delay: state.global.autoplayDelay }, - }); - } - - state.global.pendingEffects.push({ - name: "render", - }); - return state; -}; - /** * Saves current game state to a slot * @param {Object} state - Current state object @@ -1104,9 +1083,10 @@ export const nextLine = ({ state }) => { // If auto mode is on, continue auto-advancing after the skip if (state.global.autoMode) { + const autoForwardTime = state.global.variables._autoForwardTime ?? 1000; state.global.pendingEffects.push({ name: "startAutoNextTimer", - payload: { delay: state.global.autoplayDelay }, + payload: { delay: autoForwardTime }, }); } @@ -1213,9 +1193,10 @@ export const markLineCompleted = ({ state }) => { // If auto mode is on, start the delay timer to advance after completion if (state.global.autoMode) { + const autoForwardTime = state.global.variables._autoForwardTime ?? 1000; state.global.pendingEffects.push({ name: "startAutoNextTimer", - payload: { delay: state.global.autoplayDelay }, + payload: { delay: autoForwardTime }, }); } @@ -1868,7 +1849,6 @@ export const createSystemStore = (initialState) => { selectPresentationState, selectPresentationChanges, selectSectionLineChanges, - selectAutoplayDelay, selectCurrentPageSlots, selectRenderState, selectLayeredViews, @@ -1895,7 +1875,6 @@ export const createSystemStore = (initialState) => { setNextLineConfig, saveSaveSlot, loadSaveSlot, - setAutoplayDelay, updateProjectData, sectionTransition, jumpToLine,