54 lines
1.1 KiB
TypeScript
54 lines
1.1 KiB
TypeScript
|
|
import { IState } from "./IState";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 状态基类
|
||
|
|
* 提供状态接口的基础实现
|
||
|
|
*/
|
||
|
|
export abstract class BaseState implements IState {
|
||
|
|
/**
|
||
|
|
* 状态所属的状态机
|
||
|
|
*/
|
||
|
|
protected _fsm: any;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 状态名称
|
||
|
|
*/
|
||
|
|
public readonly name: string;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 构造函数
|
||
|
|
* @param fsm 状态所属的状态机
|
||
|
|
* @param name 状态名称
|
||
|
|
*/
|
||
|
|
constructor(fsm: any, name: string) {
|
||
|
|
this._fsm = fsm;
|
||
|
|
this.name = name;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 进入状态
|
||
|
|
* 子类可以重写此方法来实现自定义逻辑
|
||
|
|
* @param params 可选参数
|
||
|
|
*/
|
||
|
|
onEnter(params?: any): void {
|
||
|
|
console.log(`[FSM] 进入状态: ${this.name}`, params || '');
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 更新状态
|
||
|
|
* 子类可以重写此方法来实现每帧更新逻辑
|
||
|
|
* @param dt 距离上一帧的时间增量(秒)
|
||
|
|
*/
|
||
|
|
onUpdate?(dt: number): void {
|
||
|
|
// 子类可选择实现
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 退出状态
|
||
|
|
* 子类可以重写此方法来实现清理逻辑
|
||
|
|
*/
|
||
|
|
onExit(): void {
|
||
|
|
console.log(`[FSM] 退出状态: ${this.name}`);
|
||
|
|
}
|
||
|
|
}
|