43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
|
|
|
|
/** 战斗状态组件 */
|
|
@ecs.register('BattleState')
|
|
export class BattleStateComp extends ecs.Comp {
|
|
/** 战斗阶段枚举 */
|
|
static Phase = {
|
|
Preparation: 0, // 准备阶段
|
|
Fighting: 1, // 战斗中
|
|
Victory: 2, // 胜利
|
|
Defeat: 3 // 失败
|
|
};
|
|
|
|
phase: number = BattleStateComp.Phase.Preparation;
|
|
/** 是否结束 */
|
|
isEnded: boolean = false;
|
|
/** 当前关卡ID */
|
|
missionId: number = 0;
|
|
/** 战斗开始时间戳 */
|
|
startTime: number = 0;
|
|
|
|
reset() {
|
|
this.isEnded = false;
|
|
this.missionId = 0;
|
|
this.startTime = 0;
|
|
}
|
|
|
|
/** 安全状态转换 */
|
|
setPhase(newPhase: number) {
|
|
const validTransitions = {
|
|
[BattleStateComp.Phase.Preparation]: [BattleStateComp.Phase.Fighting],
|
|
[BattleStateComp.Phase.Fighting]: [BattleStateComp.Phase.Victory, BattleStateComp.Phase.Defeat],
|
|
[BattleStateComp.Phase.Victory]: [BattleStateComp.Phase.Preparation],
|
|
[BattleStateComp.Phase.Defeat]: [BattleStateComp.Phase.Preparation]
|
|
};
|
|
|
|
if (validTransitions[this.phase]?.includes(newPhase)) {
|
|
this.phase = newPhase;
|
|
} else {
|
|
console.error(`Invalid phase transition from ${this.phase} to ${newPhase}`);
|
|
}
|
|
}
|
|
}
|