cocos基础工程
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
/**
|
||||
* Pinball 启动管理器
|
||||
* 负责维护游戏启动状态和调度具体启动器
|
||||
*/
|
||||
|
||||
import { Component } from 'cc';
|
||||
import { PinballBootConfig, PinballBootMode, PinballBootResult } from './BootTypes';
|
||||
import { ClientMultiplayerBooter } from './Mode/ClientMultiplayerBooter';
|
||||
import { ServerMultiplayerBooter } from './Mode/ServerMultiplayerBooter';
|
||||
import { StandaloneBooter } from './Mode/StandaloneBooter';
|
||||
|
||||
export class PinballBootstrap {
|
||||
private static instance: PinballBootstrap;
|
||||
private currentResult: PinballBootResult | null = null;
|
||||
|
||||
/** 获取单例实例 */
|
||||
public static getInstance(): PinballBootstrap {
|
||||
if (!PinballBootstrap.instance) {
|
||||
PinballBootstrap.instance = new PinballBootstrap();
|
||||
}
|
||||
return PinballBootstrap.instance;
|
||||
}
|
||||
|
||||
private constructor() { }
|
||||
|
||||
/**
|
||||
* 启动 Pinball 游戏
|
||||
*/
|
||||
public async boot(hostComponent: Component, config: PinballBootConfig): Promise<PinballBootResult> {
|
||||
const startTime = Date.now();
|
||||
|
||||
try {
|
||||
console.log(`[PinballBootstrap] 开始启动 ${config.mode} 模式`);
|
||||
|
||||
// 获取对应的启动器
|
||||
const booter = this.getBooter(config.mode);
|
||||
|
||||
// 执行启动
|
||||
const pinballManager = await booter.boot(hostComponent, config);
|
||||
|
||||
// 记录启动结果
|
||||
this.currentResult = {
|
||||
success: true,
|
||||
mode: config.mode,
|
||||
pinballManager,
|
||||
timestamp: startTime
|
||||
};
|
||||
|
||||
console.log(`[PinballBootstrap] ${config.mode} 模式启动成功`);
|
||||
return this.currentResult;
|
||||
|
||||
} catch (error) {
|
||||
const errorMessage = error instanceof Error ? error.message : String(error);
|
||||
console.error(`[PinballBootstrap] 启动失败:`, error);
|
||||
|
||||
this.currentResult = {
|
||||
success: false,
|
||||
error: errorMessage,
|
||||
mode: config.mode,
|
||||
timestamp: startTime
|
||||
};
|
||||
|
||||
return this.currentResult;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取启动器实例
|
||||
*/
|
||||
private getBooter(mode: PinballBootMode) {
|
||||
switch (mode) {
|
||||
case PinballBootMode.STANDALONE:
|
||||
return new StandaloneBooter();
|
||||
case PinballBootMode.CLIENT_MULTIPLAYER:
|
||||
return new ClientMultiplayerBooter();
|
||||
case PinballBootMode.SERVER_MULTIPLAYER:
|
||||
return new ServerMultiplayerBooter();
|
||||
default:
|
||||
throw new Error(`不支持的启动模式: ${mode}`);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前启动结果
|
||||
*/
|
||||
public getCurrentResult(): PinballBootResult | null {
|
||||
return this.currentResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除启动状态
|
||||
*/
|
||||
public clearState(): void {
|
||||
this.currentResult = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建默认配置
|
||||
*/
|
||||
public static createDefaultConfig(mode: PinballBootMode): PinballBootConfig {
|
||||
return {
|
||||
mode,
|
||||
debugMode: true,
|
||||
autoStart: true,
|
||||
physicsConfig: {
|
||||
gravity: { x: 0, y: -9.81 },
|
||||
timeStep: 1 / 60
|
||||
},
|
||||
renderConfig: {
|
||||
enableEffects: true,
|
||||
maxParticles: 500
|
||||
},
|
||||
wasmPath: 'assets/wasm/pinball_physics.wasm'
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user