コード例 #1
0
    /// <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();
    }
コード例 #2
0
ファイル: RoleFSMMgr.cs プロジェクト: WuHaiqiang/MMOPRG
    /// <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];
        }
    }
コード例 #3
0
 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];
     }
 }
コード例 #4
0
ファイル: RoleFSMMgr.cs プロジェクト: wangdng/MMORPGClient
    /// <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];
        }
    }
コード例 #5
0
    /// <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];
        }
    }
コード例 #6
0
ファイル: RoleFSMMgr.cs プロジェクト: WuHaiqiang/MMOPRG
    /// <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();
    }
コード例 #7
0
ファイル: RoleFSMMgr.cs プロジェクト: wangdng/MMORPGClient
    /// <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();
    }
コード例 #8
0
    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();
    }