|
|
@@ -40,27 +40,6 @@ interface EnemyWaveConfig {
|
|
|
characteristics: string[];
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * 关卡JSON文件配置项
|
|
|
- */
|
|
|
-@ccclass('LevelJsonConfig')
|
|
|
-export class LevelJsonConfig {
|
|
|
- @property({
|
|
|
- tooltip: '关卡ID'
|
|
|
- })
|
|
|
- public levelId: number = 1;
|
|
|
-
|
|
|
- @property({
|
|
|
- tooltip: '关卡名称'
|
|
|
- })
|
|
|
- public levelName: string = '';
|
|
|
-
|
|
|
- @property({
|
|
|
- type: JsonAsset,
|
|
|
- tooltip: '关卡配置JSON文件'
|
|
|
- })
|
|
|
- public configFile: JsonAsset = null;
|
|
|
-}
|
|
|
|
|
|
/**
|
|
|
* 关卡配置管理器
|
|
|
@@ -76,10 +55,10 @@ export class LevelConfigManager extends Component {
|
|
|
public totalLevels: number = 5;
|
|
|
|
|
|
@property({
|
|
|
- type: [LevelJsonConfig],
|
|
|
- tooltip: '关卡配置列表(拖入对应的JSON文件)'
|
|
|
+ type: [JsonAsset],
|
|
|
+ tooltip: '关卡配置文件列表(按关卡序号排列)'
|
|
|
})
|
|
|
- public levelConfigs: LevelJsonConfig[] = [];
|
|
|
+ public levelConfigs: JsonAsset[] = [];
|
|
|
|
|
|
// 缓存已加载的关卡配置
|
|
|
private loadedConfigs: Map<number, LevelConfig> = new Map();
|
|
|
@@ -108,22 +87,13 @@ export class LevelConfigManager extends Component {
|
|
|
* 验证关卡配置的完整性
|
|
|
*/
|
|
|
private validateConfigs() {
|
|
|
- // 检查是否所有关卡都有配置
|
|
|
+ // 检查是否所有关卡都有配置(按数组索引对应关卡ID)
|
|
|
for (let i = 1; i <= this.totalLevels; i++) {
|
|
|
- const config = this.levelConfigs.find(c => c.levelId === i);
|
|
|
- if (!config) {
|
|
|
- console.warn(`关卡 ${i} 缺少配置`);
|
|
|
- } else if (!config.configFile) {
|
|
|
+ const configFile = this.levelConfigs[i - 1];
|
|
|
+ if (!configFile) {
|
|
|
console.warn(`关卡 ${i} 缺少JSON文件`);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- // 检查是否有重复的关卡ID
|
|
|
- const levelIds = this.levelConfigs.map(c => c.levelId);
|
|
|
- const duplicates = levelIds.filter((id, index) => levelIds.indexOf(id) !== index);
|
|
|
- if (duplicates.length > 0) {
|
|
|
- console.error(`发现重复的关卡ID: ${duplicates.join(', ')}`);
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -135,16 +105,16 @@ export class LevelConfigManager extends Component {
|
|
|
return this.loadedConfigs.get(levelId);
|
|
|
}
|
|
|
|
|
|
- // 查找对应的配置项
|
|
|
- const configItem = this.levelConfigs.find(c => c.levelId === levelId);
|
|
|
- if (!configItem || !configItem.configFile) {
|
|
|
+ // 按数组索引查找对应的配置文件
|
|
|
+ const configFile = this.levelConfigs[levelId - 1];
|
|
|
+ if (!configFile) {
|
|
|
console.error(`关卡 ${levelId} 配置不存在或缺少JSON文件`);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
// 解析JSON数据
|
|
|
- const jsonData = configItem.configFile.json;
|
|
|
+ const jsonData = configFile.json;
|
|
|
if (!jsonData) {
|
|
|
console.error(`关卡 ${levelId} JSON文件解析失败`);
|
|
|
return null;
|
|
|
@@ -240,26 +210,28 @@ export class LevelConfigManager extends Component {
|
|
|
* 获取所有可用关卡ID列表
|
|
|
*/
|
|
|
public getAvailableLevels(): number[] {
|
|
|
- return this.levelConfigs
|
|
|
- .filter(config => config.configFile !== null)
|
|
|
- .map(config => config.levelId)
|
|
|
- .sort((a, b) => a - b);
|
|
|
+ const ids: number[] = [];
|
|
|
+ for (let i = 0; i < this.levelConfigs.length; i++) {
|
|
|
+ if (this.levelConfigs[i]) {
|
|
|
+ ids.push(i + 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ids.sort((a, b) => a - b);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取关卡名称
|
|
|
*/
|
|
|
public getLevelName(levelId: number): string {
|
|
|
- const config = this.levelConfigs.find(c => c.levelId === levelId);
|
|
|
- return config ? config.levelName : `关卡 ${levelId}`;
|
|
|
+ const asset = this.levelConfigs[levelId - 1];
|
|
|
+ return asset ? (asset.name || `关卡 ${levelId}`) : `关卡 ${levelId}`;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 检查关卡是否已配置
|
|
|
*/
|
|
|
public isLevelConfigured(levelId: number): boolean {
|
|
|
- const config = this.levelConfigs.find(c => c.levelId === levelId);
|
|
|
- return config !== undefined && config.configFile !== null;
|
|
|
+ return !!this.levelConfigs[levelId - 1];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -284,9 +256,9 @@ export class LevelConfigManager extends Component {
|
|
|
console.log(`=== 所有关卡配置信息 ===`);
|
|
|
console.log(`总关卡数: ${this.totalLevels}`);
|
|
|
|
|
|
- for (const config of this.levelConfigs) {
|
|
|
- console.log(`关卡 ${config.levelId}: ${config.levelName}`);
|
|
|
- console.log(` JSON文件: ${config.configFile ? config.configFile.name : '未设置'}`);
|
|
|
+ for (let i = 0; i < this.levelConfigs.length; i++) {
|
|
|
+ const asset = this.levelConfigs[i];
|
|
|
+ console.log(`关卡 ${i + 1}: ${asset ? asset.name : '未设置'}`);
|
|
|
}
|
|
|
}
|
|
|
}
|