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}`);
    }
}
