@@ -2,71 +2,79 @@ 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+ }
25+
1226/**
1327 * 获取游戏信息
1428 * @param url 游戏信息路径
1529 */
16- export const infoFetcher = ( url : string ) => {
30+ export const infoFetcher = async ( url : string ) => {
1731 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- } ) ;
32+ const resp = await axios . get ( url ) ;
33+ const gameConfig : IWebgalConfig = resp . data ;
34+ logger . info ( '获取到游戏信息' , gameConfig ) ;
35+ // 先把 key 找到并设置了
36+ WebGAL . gameKey = gameConfig . gameKey ?? '' ;
37+ initKey ( ) ;
38+ await getStorageAsync ( ) ;
39+ getFastSaveFromStorage ( ) ;
40+ getSavesFromStorage ( 0 , 0 ) ;
41+ // 将游戏配置写入为全局变量
42+ for ( const [ key , value ] of Object . entries ( gameConfig ) ) {
43+ if ( value === undefined ) continue ;
44+ if ( typeof value === 'boolean' || typeof value === 'number' || typeof value === 'string' ) {
45+ dispatch (
46+ setGlobalVar ( {
47+ key : key ,
48+ value : value ,
49+ } ) ,
50+ ) ;
51+ } else if ( Array . isArray ( value ) ) {
52+ dispatch (
53+ setGlobalVar ( {
54+ key : key ,
55+ value : value . join ( '|' ) ,
56+ } ) ,
57+ ) ;
58+ } else {
59+ dispatch (
60+ setGlobalVar ( {
61+ key : key ,
62+ value : String ( value ) ,
63+ } ) ,
64+ ) ;
65+ }
66+ }
67+ // 配置游戏
68+ if ( gameConfig . enableExtra !== undefined ) {
69+ dispatch ( setEnableAppreciationMode ( gameConfig . enableExtra ) ) ;
70+ }
71+ if ( gameConfig . enableLegacyExpressionBlendMode !== undefined ) {
72+ Live2D . legacyExpressionBlendMode = gameConfig . enableLegacyExpressionBlendMode ;
73+ }
74+ if ( gameConfig . steamAppId !== undefined ) {
75+ WebGAL . steam . initialize ( gameConfig . steamAppId ) ;
76+ }
77+ // @ts -expect-error renderPromiseResolve is a global variable
78+ window . renderPromiseResolve ( ) ;
79+ setStorage ( ) ;
7280} ;
0 commit comments