Files
shooter-demo/client-cocos/assets/scripts/Modules/Pinball/Boot/BaseBooter.ts
2025-11-28 18:10:10 +08:00

84 lines
2.7 KiB
TypeScript

/**
* 启动器基类
* 定义不同启动模式的统一接口
*/
import { Component } from 'cc';
import { PinballManager } from '../PinballManager';
import { PinballBootConfig } from './BootTypes';
export abstract class BaseBooter {
/**
* 启动特定模式的游戏
* @param hostComponent 宿主组件
* @param config 启动配置
*/
abstract boot(hostComponent: Component, config: PinballBootConfig): Promise<PinballManager>;
/**
* 应用配置到 PinballManager
* @param pinballManager PinballManager 实例
* @param config 启动配置
*/
protected applyConfiguration(pinballManager: PinballManager, config: PinballBootConfig): void {
// 设置节点引用
if (config.cameraNode) {
pinballManager.cameraNode = config.cameraNode;
}
if (config.renderContainer) {
pinballManager.renderContainer = config.renderContainer;
}
if (config.uiContainer) {
pinballManager.uiContainer = config.uiContainer;
}
// 设置基础配置
pinballManager.autoStart = config.autoStart !== false; // 默认为 true
pinballManager.debugMode = config.debugMode || false;
// 应用自定义配置
if (config.physicsConfig || config.renderConfig || config.wasmPath) {
const pinballConfig = pinballManager.getConfig();
if (!pinballConfig) {
pinballManager.updateConfig(config);
} else {
if (config.physicsConfig) {
pinballConfig.physicsSettings = {
...pinballConfig.physicsSettings,
gravity: config.physicsConfig.gravity || { x: 0, y: -9.81 },
timeStep: config.physicsConfig.timeStep || 1 / 60
};
}
if (config.renderConfig) {
pinballConfig.renderSettings = {
...pinballConfig.renderSettings,
enableEffects: config.renderConfig.enableEffects !== false,
maxParticles: config.renderConfig.maxParticles || 500
};
}
if (config.wasmPath) {
pinballConfig.wasmPath = config.wasmPath;
}
pinballManager.updateConfig(pinballConfig);
}
}
}
/**
* 条件日志输出
*/
protected log(message: string, enabled?: boolean): void {
if (enabled !== false) {
console.log(message);
}
}
}