Beispiel #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();
    }
Beispiel #2
0
 internal void ToResurgence(RoleIdleState idleNormal)
 {
     throw new NotImplementedException();
 }
Beispiel #3
0
 public void ToIdle(RoleIdleState state = RoleIdleState.IdleNormal)
 {
     CurrRoleFSMMgr.ToIdleState = state;
     CurrRoleFSMMgr.ChangeState(RoleState.Idle);
 }
Beispiel #4
0
    //NPC有两个状态分别是在路径中巡逻和追逐玩家
    //如果他在第一个状态并且SawPlayer 过度状态被出发了,它就转变到ChasePlayer状态
    //如果他在ChasePlayer状态并且LostPlayer状态被触发了,它就转变到FollowPath状态

    private void MakeFSM()//建造状态机
    {
        RoleIdleState idle = new RoleIdleState();

        idle.AddTransition(RoleTransition.Idle, RoleStateID.Idle);
        idle.AddTransition(RoleTransition.FreeWalk, RoleStateID.Walk);
        idle.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        idle.AddTransition(RoleTransition.Acct, RoleStateID.Acct);
        idle.AddTransition(RoleTransition.Skill, RoleStateID.Skill);
        idle.AddTransition(RoleTransition.CrashPlayer, RoleStateID.CrashPlayer);

        RoleWalkState walk = new RoleWalkState();

        walk.AddTransition(RoleTransition.FreeWalk, RoleStateID.Walk);
        walk.AddTransition(RoleTransition.Acct, RoleStateID.Acct);
        walk.AddTransition(RoleTransition.Skill, RoleStateID.Skill);
        walk.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        walk.AddTransition(RoleTransition.Idle, RoleStateID.Idle);
        walk.AddTransition(RoleTransition.CrashPlayer, RoleStateID.CrashPlayer);

        RoleDeadState dead = new RoleDeadState();

        dead.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        dead.AddTransition(RoleTransition.Idle, RoleStateID.Idle);

        RoleAcctState acce = new RoleAcctState();

        acce.AddTransition(RoleTransition.Acct, RoleStateID.Acct);
        acce.AddTransition(RoleTransition.Skill, RoleStateID.Skill);
        acce.AddTransition(RoleTransition.FreeWalk, RoleStateID.Walk);
        acce.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        acce.AddTransition(RoleTransition.Idle, RoleStateID.Idle);
        acce.AddTransition(RoleTransition.CrashPlayer, RoleStateID.CrashPlayer);

        RoleSkillState skill = new RoleSkillState();

        skill.AddTransition(RoleTransition.Skill, RoleStateID.Skill);
        skill.AddTransition(RoleTransition.Acct, RoleStateID.Acct);
        skill.AddTransition(RoleTransition.FreeWalk, RoleStateID.Walk);
        skill.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        skill.AddTransition(RoleTransition.Idle, RoleStateID.Idle);
        skill.AddTransition(RoleTransition.CrashPlayer, RoleStateID.CrashPlayer);
        skill.AddTransition(RoleTransition.Switch, RoleStateID.Switch);

        RoleSwitchState sw = new RoleSwitchState();

        sw.AddTransition(RoleTransition.Skill, RoleStateID.Skill);
        sw.AddTransition(RoleTransition.Acct, RoleStateID.Acct);
        sw.AddTransition(RoleTransition.FreeWalk, RoleStateID.Walk);
        sw.AddTransition(RoleTransition.Idle, RoleStateID.Idle);
        sw.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        sw.AddTransition(RoleTransition.CrashPlayer, RoleStateID.CrashPlayer);

        RoleCrashState crash = new RoleCrashState();

        crash.AddTransition(RoleTransition.Skill, RoleStateID.Skill);
        crash.AddTransition(RoleTransition.Acct, RoleStateID.Acct);
        crash.AddTransition(RoleTransition.FreeWalk, RoleStateID.Walk);
        crash.AddTransition(RoleTransition.Dead, RoleStateID.Dead);
        crash.AddTransition(RoleTransition.Idle, RoleStateID.Idle);

        Fsm = new RoleFSMSystem();
        Fsm.AddState(idle);
        Fsm.AddState(walk);
        Fsm.AddState(acce);
        Fsm.AddState(skill);
        Fsm.AddState(dead);
        Fsm.AddState(sw);
        Fsm.AddState(crash);
    }