/** * 启动器基类 * 定义不同启动模式的统一接口 */ 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 * @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); } } }