/// <summary>切换状态</summary> /// <param name="newState">新状态</param> public void ChangeState(RoleState newState) { if (CurrRoleCtrl.CurrRoleType == RoleType.Monster) { //Debug.Log(newState.ToString()); } //因为休闲 战斗 都有多种状态 所以此处需要排除 休闲 攻击状态(因为可能需要从普通休闲切换到战斗休闲及技能切换) if (CurrRoleStateEnum == newState && CurrRoleStateEnum != RoleState.Idle && CurrRoleStateEnum != RoleState.Attack) { return; } //调用以前状态的离开方法 if (m_CurrRoleState != null) { m_CurrRoleState.OnLeave(); } //更改当前状态枚举 CurrRoleStateEnum = newState; //更改当前状态 m_CurrRoleState = m_RoleStateDic[newState]; if (CurrRoleStateEnum == RoleState.Idle) { //给当前待机状态赋值 CurrIdleState = ToIdleState; } //调用新状态的进入方法 m_CurrRoleState.OnEnter(); }
/// <summary> /// 构造函数 /// </summary> /// <param name="currRoleCtrl"></param> public RoleFSMMgr(RoleCtrl currRoleCtrl) { CurrRoleCtrl = currRoleCtrl; m_RoleStateDic = new Dictionary <RoleState, RoleStateAbstract>(); m_RoleStateDic[RoleState.Idle] = new RoleStateIdle(this); m_RoleStateDic[RoleState.Run] = new RoleStateRun(this); m_RoleStateDic[RoleState.Attack] = new RoleStateAttack(this); m_RoleStateDic[RoleState.Hurt] = new RoleStateHurt(this); m_RoleStateDic[RoleState.Die] = new RoleStateDie(this); if (m_RoleStateDic.ContainsKey(CurrRoleStateEnum)) { m_CurrRoleState = m_RoleStateDic[CurrRoleStateEnum]; } }
public RoleFSMMgr(RoleCtrl roleCtrl, Action onDestory, Action onDie) { this.CurRoleCtrl = roleCtrl; states = new Dictionary <RoleState, RoleStateAbstract>(); //装载状态 states.Add(RoleState.Idle, new RoleStateIdle(this)); states.Add(RoleState.Run, new RoleStateRun(this)); states.Add(RoleState.Attack, new RoleStateAttack(this)); states.Add(RoleState.Hurt, new RoleStateHurt(this)); states.Add(RoleState.Die, new RoleStateDie(this, onDestory, onDie)); states.Add(RoleState.Select, new RoleStateSelect(this)); if (states.ContainsKey(CurrentRoleStateEnum)) { CurrentRoleState = states[CurrentRoleStateEnum]; } }
/// <summary> /// 构造 /// </summary> /// <param name="rolectrl"></param> public RoleFSMMgr(RoleCtrl rolectrl) { RoleCtrl = rolectrl; RoleStateType = RoleStateType.None; m_RoleStateDic = new Dictionary <RoleStateType, RoleStateAbstract>(); //初始化角色状态机字典 m_RoleStateDic.Add(RoleStateType.None, new RoleStateNone(this)); m_RoleStateDic.Add(RoleStateType.Idle, new RoleStateIdle(this)); m_RoleStateDic.Add(RoleStateType.Run, new RoleStateRun(this)); m_RoleStateDic.Add(RoleStateType.Hurt, new RoleStateHurt(this)); m_RoleStateDic.Add(RoleStateType.Die, new RoleStateDie(this)); m_RoleStateDic.Add(RoleStateType.Attack, new RoleStateAttack(this)); if (m_RoleStateDic.ContainsKey(RoleStateType)) { m_RoleState = m_RoleStateDic[RoleStateType]; } }
/// <summary> /// 构造函数 /// </summary> /// <param name="currRoleCtrl"></param> public RoleFSMMgr(RoleCtrl currRoleCtrl, Action onDie, Action onDestroy) { CurrRoleCtrl = currRoleCtrl; m_RoleStateDic = new Dictionary <RoleState, RoleStateAbstract>(); m_RoleStateDic[RoleState.Idle] = new RoleStateIdle(this); m_RoleStateDic[RoleState.Run] = new RoleStateRun(this); m_RoleStateDic[RoleState.Attack] = new RoleStateAttack(this); m_RoleStateDic[RoleState.Hurt] = new RoleStateHurt(this); m_RoleStateDic[RoleState.Die] = new RoleStateDie(this); m_RoleStateDic[RoleState.Select] = new RoleStateSelect(this); RoleStateDie dieState = m_RoleStateDic[RoleState.Die] as RoleStateDie; dieState.OnDie = onDie; dieState.OnDestroy = onDestroy; if (m_RoleStateDic.ContainsKey(CurrRoleStateEnum)) { m_CurrRoleState = m_RoleStateDic[CurrRoleStateEnum]; } }
/// <summary> /// 切换状态 /// </summary> /// <param name="newState">新状态</param> public void ChangState(RoleState newState) { if (CurrRoleStateEnum == newState) { return; } //调用以前状态的离开方法 if (m_CurrRoleState != null) { m_CurrRoleState.OnLeave(); } //更改当前状态枚举 CurrRoleStateEnum = newState; //更改当前状态 m_CurrRoleState = m_RoleStateDic[newState]; //调入新状态的进入方法 m_CurrRoleState.OnEnter(); }
/// <summary> /// 切换状态 /// </summary> /// <param name="newState">新的状态</param> public void ChangeState(RoleStateType newState) { if (newState == RoleStateType) { return; } if (m_RoleState == null) { return; } //离开之前的状态 m_RoleState.OnLeave(); //将当前状态更新为新的状态 RoleStateType = newState; m_RoleState = m_RoleStateDic[newState]; //调用新状态的进入方法 m_RoleState.OnEnter(); }
public void ChangeState(RoleState nextState) { //如果在当前状态则返回,但是当前状态是Idle Attack 可以进来 //攻击的限制条件 是否僵值, Idle 的限制条件是当前的Idle状态 if (CurrentRoleStateEnum == nextState && CurrentRoleStateEnum != RoleState.Idle && CurrentRoleStateEnum != RoleState.Attack) { return; } //当前状态退出 if (CurrentRoleState != null) { CurrentRoleState.OnLevel(); } //替换当前状态 CurrentRoleStateEnum = nextState; CurrentRoleState = states[CurrentRoleStateEnum]; if (CurrentRoleStateEnum == RoleState.Idle) { CurIdleType = NextIdleType; } //当前状态进入 CurrentRoleState.OnEnter(); }