@@ -2,71 +2,74 @@ import { webgalStore } from '@/store/store';
22import { setGlobalVar } from '@/store/userDataReducer' ;
33import { setEnableAppreciationMode } from '@/store/GUIReducer' ;
44import { Live2D , WebGAL } from '@/Core/WebGAL' ;
5- import { WebgalParser } from '@/Core/parser/sceneParser' ;
65import { getStorageAsync , setStorage } from '@/Core/controller/storage/storageController' ;
76import { initKey } from '@/Core/controller/storage/fastSaveLoad' ;
87import { getFastSaveFromStorage , getSavesFromStorage } from '@/Core/controller/storage/savesController' ;
98import { logger } from '@/Core/util/logger' ;
109import axios from 'axios' ;
1110
11+ interface IWebgalConfig {
12+ gameName ?: string ; // 游戏名称
13+ gameKey ?: string ; // 游戏Key
14+ gameLogo ?: string ; // 游戏Logo
15+ titleImage ?: string ; // 标题图片
16+ titleBgm ?: string ; // 标题背景音乐
17+ description ?: string ; // 游戏描述
18+ defaultLanguage ?: string ; // 默认语言
19+ packageName ?: string ; // 包名
20+ steamAppId ?: string ; // Steam 应用 ID
21+ enableExtra ?: boolean ; // 启用鉴赏功能
22+ enablePanic ?: boolean ; // 启用紧急回避
23+ enableLegacyExpressionBlendMode ?: boolean ; // 启用旧版 Live2D 表情混合模式
24+ textboxMaxLine ?: number ; // 文字框最大行数
25+ textboxLineHeight ?: number ; // 文字框行高
26+ }
27+
1228/**
1329 * 获取游戏信息
1430 * @param url 游戏信息路径
1531 */
16- export const infoFetcher = ( url : string ) => {
32+ export const infoFetcher = async ( url : string ) => {
1733 const dispatch = webgalStore . dispatch ;
18- axios . get ( url ) . then ( async ( r ) => {
19- let gameConfigRaw : string = r . data ;
20- let gameConfig = WebgalParser . parseConfig ( gameConfigRaw ) ;
21- logger . info ( '获取到游戏信息' , gameConfig ) ;
22- // 先把 key 找到并设置了
23- const keyItem = gameConfig . find ( ( e ) => e . command === 'Game_key' ) ;
24- WebGAL . gameKey = ( keyItem ?. args ?. [ 0 ] as string ) ?? '' ;
25- initKey ( ) ;
26- await getStorageAsync ( ) ;
27- getFastSaveFromStorage ( ) ;
28- getSavesFromStorage ( 0 , 0 ) ;
29- // 按照游戏的配置开始设置对应的状态
30- gameConfig . forEach ( ( e ) => {
31- const { command, args } = e ;
32- if ( args . length > 0 ) {
33- if ( args . length > 1 ) {
34- dispatch (
35- setGlobalVar ( {
36- key : command ,
37- value : args . join ( '|' ) ,
38- } ) ,
39- ) ;
40- } else {
41- let res : any = args [ 0 ] . trim ( ) ;
42- if ( / ^ ( t r u e | f a l s e ) $ / g. test ( args [ 0 ] ) ) {
43- res = res === 'true' ;
44- } else if ( / ^ [ 0 - 9 ] + \. ? [ 0 - 9 ] + $ / g. test ( args [ 0 ] ) ) {
45- res = Number ( res ) ;
46- }
47-
48- dispatch (
49- setGlobalVar ( {
50- key : command ,
51- value : res ,
52- } ) ,
53- ) ;
54-
55- if ( command === 'Enable_Appreciation' ) {
56- dispatch ( setEnableAppreciationMode ( res ) ) ;
57- }
58- if ( command === 'Legacy_Expression_Blend_Mode' ) {
59- Live2D . legacyExpressionBlendMode = res === true ;
60- }
61- if ( command === 'Steam_AppID' ) {
62- const appId = String ( res ) ;
63- WebGAL . steam . initialize ( appId ) ;
64- }
65- }
66- }
67- } ) ;
68- // @ts -expect-error renderPromiseResolve is a global variable
69- window . renderPromiseResolve ( ) ;
70- setStorage ( ) ;
71- } ) ;
34+ const resp = await axios . get ( url ) ;
35+ const gameConfig : IWebgalConfig = resp . data ;
36+ logger . info ( '获取到游戏信息' , gameConfig ) ;
37+ // 先把 key 找到并设置了
38+ WebGAL . gameKey = gameConfig . gameKey ?? '' ;
39+ initKey ( ) ;
40+ await getStorageAsync ( ) ;
41+ getFastSaveFromStorage ( ) ;
42+ getSavesFromStorage ( 0 , 0 ) ;
43+ // 将游戏配置写入为全局变量
44+ for ( const [ key , value ] of Object . entries ( gameConfig ) ) {
45+ if ( value === undefined ) continue ;
46+ if ( typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string' ) {
47+ dispatch (
48+ setGlobalVar ( {
49+ key : key ,
50+ value : value ,
51+ } ) ,
52+ ) ;
53+ } else {
54+ dispatch (
55+ setGlobalVar ( {
56+ key : key ,
57+ value : String ( value ) ,
58+ } ) ,
59+ ) ;
60+ }
61+ }
62+ // 配置游戏
63+ if ( gameConfig . enableExtra !== undefined ) {
64+ dispatch ( setEnableAppreciationMode ( gameConfig . enableExtra ) ) ;
65+ }
66+ if ( gameConfig . enableLegacyExpressionBlendMode !== undefined ) {
67+ Live2D . legacyExpressionBlendMode = gameConfig . enableLegacyExpressionBlendMode ;
68+ }
69+ if ( gameConfig . steamAppId !== undefined ) {
70+ WebGAL . steam . initialize ( gameConfig . steamAppId ) ;
71+ }
72+ // @ts -expect-error renderPromiseResolve is a global variable
73+ window . renderPromiseResolve ( ) ;
74+ setStorage ( ) ;
7275} ;
0 commit comments