using UnityEngine;
using System.Collections;
using System;
namespace YLBattle
{
public class LogicFighterFSM
{
///
/// 上下文环境
///
private BattleParam mGlobalParam = null;
///
/// 隶属战斗对象
///
private LogicFighter mOwner = null;
///
/// 全局状态
///
private BaseState mMainState = null;
///
/// 当前状态
///
private BaseState mCurrentState = null;
///
/// 上一个状态
///
private BaseState mPreviousState = null;
#region(行为状态)
///
/// 空闲状态
///
private StateIdle mStateIdle = null;
///
/// 死亡状态
///
private StateDead mStateDead = null;
///
/// 受击状态
///
private StateHit mStateOnHit = null;
///
/// 施法状态
///
private StateAttack mStateAttack = null;
///
/// 等待状态
///
private StateHidden mStateHidden = null;
///
/// 消失状态
///
private StateDisapper mStateDisapper = null;
///
/// 出场状态
///
private StateArrival mStateArrival = null;
///
/// 旋转状态
///
private StateRoatate mStateRoatate = null;
///
/// 等待状态
///
private StateWait mStateWait = null;
///
/// 打断当前状态
///
public void BreakCurrentState()
{
this.ChangeState(BaseState.EFighterState.IDLE, false);
}
///
/// 获取上一次状态
///
/// 状态对象
public BaseState GetPreviousState()
{
return this.mPreviousState;
}
#endregion
///
/// 初始化
///
/// 环境配置信息
/// 战斗对象
public void Initialize(BattleParam param, LogicFighter fighter)
{
this.mMainState = null;
this.mGlobalParam = param;
this.mOwner = fighter;
this.mStateIdle = new StateIdle(this.mOwner, this.mGlobalParam);
this.mStateOnHit = new StateHit(this.mOwner, this.mGlobalParam);
this.mStateDead = new StateDead(this.mOwner, this.mGlobalParam);
this.mStateAttack = new StateAttack(this.mOwner, this.mGlobalParam);
this.mStateHidden = new StateHidden(this.mOwner, this.mGlobalParam);
this.mStateDisapper = new StateDisapper(this.mOwner, this.mGlobalParam);
this.mStateArrival = new StateArrival(this.mOwner, this.mGlobalParam);
this.mStateRoatate = new StateRoatate(this.mOwner, this.mGlobalParam);
this.mStateWait = new StateWait(this.mOwner, this.mGlobalParam);
this.SetCurrentState(this.mStateHidden, null);
}
///
/// 设置当前状态
///
/// 状态
/// 参数
public void SetCurrentState(BaseState current, object param)
{
this.mCurrentState = current;
this.mCurrentState.OnEnter(param);
}
///
/// 获取当前行为状态
///
/// 状态对象
public BaseState GetCurrentState()
{
return this.mCurrentState;
}
///
/// 状态周期调度
///
/// 当前逻辑时间
public void OnUpdateState(long now)
{
if (null != this.mCurrentState)
{
this.mCurrentState.OnUpdate();
}
}
///
/// 切换到指定状态
///
/// 新的状态
/// 状态初始化参数
public void ChangeState(BaseState.EFighterState newState, object param)
{
BaseState st = null;
switch (newState)
{
case BaseState.EFighterState.IDLE:
st = this.mStateIdle;
break;
case BaseState.EFighterState.Attack:
st = this.mStateAttack;
break;
case BaseState.EFighterState.ONHIT:
st = this.mStateOnHit;
break;
case BaseState.EFighterState.DEAD:
st = this.mStateDead;
break;
case BaseState.EFighterState.HIDDEN:
st = this.mStateHidden;
break;
case BaseState.EFighterState.DISAPPER:
st = this.mStateDisapper;
break;
case BaseState.EFighterState.ARRIVAL:
st = this.mStateArrival;
break;
case BaseState.EFighterState.ROTATE:
st = this.mStateRoatate;
break;
case BaseState.EFighterState.WAIT:
st = this.mStateWait;
break;
default:
st = null;
break;
}
if (null == st)
{
return;
}
this.mCurrentState.OnLeave();
this.mPreviousState = this.mCurrentState;
this.mCurrentState = st;
this.mCurrentState.OnEnter(param);
}
}
}