Skip to content

Commit 94bf354

Browse files
ClodLingxiMakinoharaShoko
authored andcommitted
feat: slide text speed and autoplay speed
1 parent 3534bdd commit 94bf354

File tree

7 files changed

+36
-60
lines changed

7 files changed

+36
-60
lines changed

packages/webgal/src/Core/controller/gamePlay/autoPlay.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ export const autoNextSentence = () => {
5858
* 自动播放的执行函数
5959
*/
6060
const autoPlay = () => {
61-
const delay = webgalStore.getState().userData.optionData.autoSpeed;
62-
const autoPlayDelay = 750 - 250 * delay;
61+
const data = webgalStore.getState().userData.optionData.autoSpeed;
62+
// 范围为 [250, 1750]
63+
const autoPlayDelay = 250 + (100 - data) * 15;
6364
let isBlockingAuto = false;
6465
WebGAL.gameplay.performController.performList.forEach((e) => {
6566
if (e.blockingAuto())

packages/webgal/src/Core/gameScripts/say.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { IPerform } from '@/Core/Modules/perform/performInterface';
33
import { playVocal } from './vocal';
44
import { webgalStore } from '@/store/store';
55
import { setStage } from '@/store/stageReducer';
6-
import { useTextDelay } from '@/hooks/useTextOptions';
6+
import { useTextAnimationDuration, useTextDelay } from '@/hooks/useTextOptions';
77
import { getRandomPerformName, PerformController } from '@/Core/Modules/perform/performController';
88
import { getSentenceArgByKey } from '@/Core/util/getSentenceArg';
99
import { textSize, voiceOption } from '@/store/userDataInterface';
@@ -148,7 +148,7 @@ export const say = (sentence: ISentence): IPerform => {
148148
}
149149

150150
const performInitName: string = getRandomPerformName();
151-
let endDelay = 750 - userDataState.optionData.textSpeed * 250;
151+
let endDelay = useTextAnimationDuration(userDataState.optionData.textSpeed) / 2;
152152
// 如果有 notend 参数,那么就不需要等待
153153
if (isNotend) {
154154
endDelay = 0;

packages/webgal/src/UI/Menu/Options/Display/Display.tsx

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,23 +34,14 @@ export function Display() {
3434
/>
3535
</NormalOption>
3636
<NormalOption key="textSpeed" title={t('textSpeed.title')}>
37-
<NormalButton
38-
textList={t('textSpeed.options.slow', 'textSpeed.options.medium', 'textSpeed.options.fast')}
39-
functionList={[
40-
() => {
41-
dispatch(setOptionData({ key: 'textSpeed', value: playSpeed.slow }));
42-
setStorage();
43-
},
44-
() => {
45-
dispatch(setOptionData({ key: 'textSpeed', value: playSpeed.normal }));
46-
setStorage();
47-
},
48-
() => {
49-
dispatch(setOptionData({ key: 'textSpeed', value: playSpeed.fast }));
50-
setStorage();
51-
},
52-
]}
53-
currentChecked={userDataState.optionData.textSpeed}
37+
<OptionSlider
38+
initValue={userDataState.optionData.textSpeed}
39+
uniqueID={t('textSpeed.title')}
40+
onChange={(event) => {
41+
const newValue = event.target.value;
42+
dispatch(setOptionData({ key: 'textSpeed', value: Number(newValue) }));
43+
setStorage();
44+
}}
5445
/>
5546
</NormalOption>
5647
<NormalOption key="textSize" title={t('textSize.title')}>

packages/webgal/src/UI/Menu/Options/System/System.tsx

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { WebGAL } from '@/Core/WebGAL';
1818
import useSoundEffect from '@/hooks/useSoundEffect';
1919
import savesReducer, { ISavesData, saveActions } from '@/store/savesReducer';
2020
import { dumpFastSaveToStorage, dumpSavesToStorage } from '@/Core/controller/storage/savesController';
21+
import { OptionSlider } from '@/UI/Menu/Options/OptionSlider';
2122

2223
interface IExportGameData {
2324
userData: IUserData;
@@ -104,23 +105,14 @@ export function System() {
104105
{!showAbout && (
105106
<>
106107
<NormalOption key="option1" title={t('autoSpeed.title')}>
107-
<NormalButton
108-
textList={t('autoSpeed.options.slow', 'autoSpeed.options.medium', 'autoSpeed.options.fast')}
109-
functionList={[
110-
() => {
111-
dispatch(setOptionData({ key: 'autoSpeed', value: playSpeed.slow }));
112-
setStorage();
113-
},
114-
() => {
115-
dispatch(setOptionData({ key: 'autoSpeed', value: playSpeed.normal }));
116-
setStorage();
117-
},
118-
() => {
119-
dispatch(setOptionData({ key: 'autoSpeed', value: playSpeed.fast }));
120-
setStorage();
121-
},
122-
]}
123-
currentChecked={userDataState.optionData.autoSpeed}
108+
<OptionSlider
109+
initValue={userDataState.optionData.autoSpeed}
110+
uniqueID={t('autoSpeed.title')}
111+
onChange={(event) => {
112+
const newValue = event.target.value;
113+
dispatch(setOptionData({ key: 'autoSpeed', value: Number(newValue) }));
114+
setStorage();
115+
}}
124116
/>
125117
</NormalOption>
126118
<NormalOption key="option7" title={t('language.title')}>
Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
import { playSpeed } from '@/store/userDataInterface';
22

3-
export function useTextDelay(type: playSpeed) {
4-
switch (type) {
5-
case playSpeed.slow:
6-
return 80;
7-
case playSpeed.normal:
8-
return 35;
9-
case playSpeed.fast:
10-
return 3;
11-
}
3+
// 范围为 [startRange, step * 100 + startRange]
4+
export function useTextDelay(data: number) {
5+
const startRange = 3;
6+
const step = 1.5;
7+
return startRange + (100 - data) * step;
128
}
139

14-
export function useTextAnimationDuration(type: playSpeed) {
15-
switch (type) {
16-
case playSpeed.slow:
17-
return 800;
18-
case playSpeed.normal:
19-
return 350;
20-
case playSpeed.fast:
21-
return 200;
22-
}
10+
// 范围为 [startRange, step * 100 + startRange]
11+
export function useTextAnimationDuration(data: number) {
12+
const startRange = 200;
13+
const step = 15;
14+
return startRange + (100 - data) * step;
2315
}

packages/webgal/src/store/userDataInterface.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ export enum fullScreenOption {
3939
*/
4040
export interface IOptionData {
4141
volumeMain: number; // 主音量
42-
textSpeed: playSpeed; // 文字速度
43-
autoSpeed: playSpeed; // 自动播放速度
42+
textSpeed: number; // 文字速度
43+
autoSpeed: number; // 自动播放速度
4444
textSize: textSize;
4545
vocalVolume: number; // 语音音量
4646
bgmVolume: number; // 背景音乐音量

packages/webgal/src/store/userDataReducer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import { ISetGameVar } from './stageInterface';
2424
const initialOptionSet: IOptionData = {
2525
slPage: 1,
2626
volumeMain: 100, // 主音量
27-
textSpeed: playSpeed.normal, // 文字速度
28-
autoSpeed: playSpeed.normal, // 自动播放速度
27+
textSpeed: 50, // 文字速度
28+
autoSpeed: 50, // 自动播放速度
2929
textSize: textSize.medium,
3030
vocalVolume: 100, // 语音音量
3131
bgmVolume: 25, // 背景音乐音量

0 commit comments

Comments
 (0)