84 lines
2.7 KiB
TypeScript
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);
|
|
}
|
|
}
|
|
} |