feat(game/GameManager): 新增难度字段、地图索引和波次计数

This commit is contained in:
Cloud Bot
2026-03-21 09:45:07 +00:00
parent 2d8c126394
commit 59df63504b

View File

@@ -2,6 +2,7 @@ import {
INITIAL_HC, INITIAL_HC,
INITIAL_KPI, INITIAL_KPI,
} from './constants' } from './constants'
import type { DifficultyLevel } from './data/mapConfigs'
type GameState = 'idle' | 'playing' | 'paused' | 'victory' | 'defeat' type GameState = 'idle' | 'playing' | 'paused' | 'victory' | 'defeat'
@@ -17,6 +18,11 @@ export class GameManager {
public currentWave: number = 0 public currentWave: number = 0
public gameState: GameState = 'idle' public gameState: GameState = 'idle'
// 难度与地图状态
public difficulty: DifficultyLevel = 'normal'
public currentMapIndex: number = 0 // 0=地图1, 1=地图2, 2=地图3
public totalWaveCleared: number = 0 // 总计已清理波次
// 事件回调Scene 通过这些 hook 更新 HUD // 事件回调Scene 通过这些 hook 更新 HUD
public onHCChange: ((hc: number) => void)[] = [] public onHCChange: ((hc: number) => void)[] = []
public onKPIChange: ((kpi: number) => void)[] = [] public onKPIChange: ((kpi: number) => void)[] = []
@@ -32,21 +38,28 @@ export class GameManager {
return GameManager.instance return GameManager.instance
} }
/** 重置游戏状态(新局开始时调用) */ /** 设置难度 */
setDifficulty(d: DifficultyLevel): void {
this.difficulty = d
}
/** 重置游戏状态(保留难度,重置其他字段) */
reset(): void { reset(): void {
this.hc = INITIAL_HC this.hc = INITIAL_HC
this.kpi = INITIAL_KPI this.kpi = INITIAL_KPI
this.currentWave = 0 this.currentWave = 0
this.gameState = 'idle' this.gameState = 'idle'
this.currentMapIndex = 0
this.totalWaveCleared = 0
this.onHCChange = [] this.onHCChange = []
this.onKPIChange = [] this.onKPIChange = []
this.onGameOver = [] this.onGameOver = []
this.onVictory = [] this.onVictory = []
// difficulty 保留,不重置
} }
/** /**
* 扣除 HC余额不足时返回 false * 扣除 HC余额不足时返回 false
* @param amount 扣除数量
*/ */
spendHC(amount: number): boolean { spendHC(amount: number): boolean {
if (this.hc < amount) return false if (this.hc < amount) return false
@@ -57,7 +70,6 @@ export class GameManager {
/** /**
* 增加 HC * 增加 HC
* @param amount 增加数量
*/ */
addHC(amount: number): void { addHC(amount: number): void {
this.hc += amount this.hc += amount
@@ -66,7 +78,6 @@ export class GameManager {
/** /**
* 减少 KPI归零时触发 GameOver * 减少 KPI归零时触发 GameOver
* @param amount 减少数量
*/ */
reduceKPI(amount: number): void { reduceKPI(amount: number): void {
this.kpi = Math.max(0, this.kpi - amount) this.kpi = Math.max(0, this.kpi - amount)
@@ -79,7 +90,6 @@ export class GameManager {
/** /**
* 增加 KPI不超过 100 * 增加 KPI不超过 100
* @param amount 增加数量
*/ */
addKPI(amount: number): void { addKPI(amount: number): void {
this.kpi = Math.min(100, this.kpi + amount) this.kpi = Math.min(100, this.kpi + amount)