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