Example #1
0
 public void UpdatePlayerSkillState(PlayerSkillState enableSkill)
 {
     if (enablePlayerSkillState != null)
     {
         enablePlayerSkillState(enableSkill);
     }
 }
Example #2
0
    private void InitStateMachine()
    {
        blackboard = new StateBlackboard();
        blackboard.Add(BlackboardKey.AttackingFlag, false);
        blackboard.Add(BlackboardKey.NextAttackFlag, false);
        blackboard.Add(BlackboardKey.SkillFlag, false);
        blackboard.Add(BlackboardKey.DamageFlag, false);
        blackboard.Add(BlackboardKey.RepeatDamageFlag, false);
        blackboard.Add(BlackboardKey.AnimTrigger, string.Empty);
        blackboard.Add <Transform>(BlackboardKey.Target, null);
        blackboard.Add <Vector3>(BlackboardKey.MoveDirection, Vector3.zero);

        SetAnimTriggerAction setIdleTriggerAction = new SetAnimTriggerAction(blackboard, animator, "Idle");
        LookAtTargetAction   lookAtAction         = new LookAtTargetAction(blackboard, transform);
        PlayerIdleState      idleState            = new PlayerIdleState(blackboard, setIdleTriggerAction, lookAtAction);
        StateNode            idleNode             = new StateNode(idleState, new Condition(() => { return(true); }));

        SetAnimTriggerAction   setRunTriggerAction  = new SetAnimTriggerAction(blackboard, animator, "Move");
        SetMoveDirectionAction setMoveDirAction     = new SetMoveDirectionAction(blackboard, transform, Camera.main.transform);
        MoveControllerAction   moveControllerAction = new MoveControllerAction(blackboard, GetComponent <CharacterController>(), runSpeed);

        PlayerMoveState moveState = new PlayerMoveState(blackboard, setRunTriggerAction, setMoveDirAction, moveControllerAction, 100);
        StateNode       moveNode  = new StateNode(moveState, new Condition(() => {
            float horizontal = inputController.GetRuntimeInputConfig().GetBinding(InputBindingName.GAMEPLAY_HORIZONTAL).Value;
            float vertical   = inputController.GetRuntimeInputConfig().GetBinding(InputBindingName.GAMEPLAY_VERTICAL).Value;
            return(Mathf.Abs(horizontal) > InputConstants.INPUT_DEAD_ZONE || Mathf.Abs(vertical) > InputConstants.INPUT_DEAD_ZONE);
        }));

        SetAnimTriggerAction setAttackTrigger     = new SetAnimTriggerAction(blackboard, animator, "Attack", true);
        SetAnimTriggerAction setNextAttackTrigger = new SetAnimTriggerAction(blackboard, animator, "NextAttack", true);
        PlayerAttackState    attackState          = new PlayerAttackState(blackboard, setAttackTrigger, setNextAttackTrigger, lookAtAction, 500);
        StateNode            attackNode           = new StateNode(attackState, new Condition(() => { return(blackboard.Get <bool>(BlackboardKey.AttackingFlag) == true); }));

        SetAnimTriggerAction setSkillTrigger = new SetAnimTriggerAction(blackboard, animator, BlackboardKey.AnimTrigger, true);
        PlayerSkillState     skillState      = new PlayerSkillState(blackboard, setSkillTrigger, 400);
        StateNode            skillNode       = new StateNode(skillState, new Condition(() => { return(blackboard.Get <bool>(BlackboardKey.SkillFlag) == true); }));

        SetAnimTriggerAction damageAction    = new SetAnimTriggerAction(blackboard, animator, "Damage", true);
        DamageState          damageState     = new DamageState(blackboard, damageAction, 600);
        Condition            damageCondition = new Condition(() => { return(blackboard.Get <bool>(BlackboardKey.DamageFlag)); });
        StateNode            damageNode      = new StateNode(damageState, damageCondition);

        DeathState deathState = DeathState.Create(blackboard, animator, "Die", int.MaxValue);
        StateNode  deathNode  = new StateNode(deathState, new Condition(() => { return(!self.IsAlive); }));

        List <StateNode> nodes = new List <StateNode>();

        nodes.Add(idleNode);
        nodes.Add(moveNode);
        nodes.Add(attackNode);
        nodes.Add(skillNode);
        nodes.Add(damageNode);
        nodes.Add(deathNode);

        stateMachine = new StateMachine(blackboard, nodes, idleState);
    }
Example #3
0
 public void EnableAttackMode(PlayerSkillState skill)
 {
     if (canChangeAttackMode)
     {
         attackMode = skill;
         GameEvents.current.UpdateBattleLog("Player mode is: " + attackMode.ToString());
     }
     else
     {
         GameEvents.current.UpdateBattleLog(" Can't  change player skill mode");
     }
 }
Example #4
0
    public void ToggleAttackMode()
    {
        //Jos vaihdellaan kahden moden välillä
        //attackMode = attackMode == AttackMode.WeaponThrow ? AttackMode.SummonFamiliar : AttackMode.WeaponThrow;
        if ((int)attackMode < System.Enum.GetValues(typeof(PlayerSkillState)).Length - 1)
        {
            attackMode++;
        }
        else
        {
            attackMode = 0;
        }

        GameEvents.current.UpdateBattleLog("Player mode is: " + attackMode.ToString());
    }
Example #5
0
    /// <summary>
    /// 初始化状态机
    /// 状态和转换条件在这统一初始化添加
    /// 默认 除了skill和fight状态 其余状态要切换到其他状态的时候 要先切换到idle状态
    /// </summary>
    protected override void InitStateMachine()
    {
        stateDic   = new Dictionary <StateID, FSMState>();
        m_FSM      = new FSMSystem();
        idleState  = new PlayerIdleState();
        moveState  = new PlayerMoveState();
        fightState = new PlayerFightState();
        skillState = new PlayerSkillState();


        //attr = player.GetComponent<AttrController>();
        m_FSM.attr = attr;

        m_FSM.AddState(idleState, this);
        stateDic.Add(idleState.ID, idleState);
        idleState.AddTransition(Transition.IsIdle, StateID.Idle);
        idleState.AddTransition(Transition.IsMove, StateID.Move);
        idleState.AddTransition(Transition.IsDeath, StateID.Death);
        idleState.AddTransition(Transition.IsFight, StateID.Fight);
        idleState.AddTransition(Transition.IsCast_Skill, StateID.Cast_Skill);
        idleState.AddTransition(Transition.IsRiding, StateID.Riding);
        idleState.AddTransition(Transition.IsVigilance, StateID.Vigilance);
        idleState.AddTransition(Transition.IsChatStart, StateID.ChatStart);
        idleState.AddTransition(Transition.IsChatEnd, StateID.ChatEnd);


        m_FSM.AddState(moveState, this);
        stateDic.Add(moveState.ID, moveState);
        moveState.AddTransition(Transition.IsIdle, StateID.Idle);

        m_FSM.AddState(fightState, this);
        stateDic.Add(fightState.ID, fightState);
        fightState.AddTransition(Transition.IsIdle, StateID.Idle);
        fightState.AddTransition(Transition.IsCast_Skill, StateID.Cast_Skill);
        fightState.AddTransition(Transition.IsMove, StateID.Move);

        m_FSM.AddState(skillState, this);
        stateDic.Add(skillState.ID, skillState);
        skillState.AddTransition(Transition.IsIdle, StateID.Idle);
        skillState.AddTransition(Transition.IsFight, StateID.Fight);

        //初始状态分主城(Idle)和地下城(Fight)
        //设置初始状态(idle状态)

        if (AttrController.Instance.Fight())
        {
            m_FSM.SetCurrentState(fightState);
            m_FSM.CurrentState.m_MyJoystick = ETCInput.GetControlJoystick("MyJoystick");
            //m_FSM.attr.StartCoroutine(fightState.DoLogic());
        }
        else
        {
            m_FSM.SetCurrentState(idleState);
            m_FSM.CurrentState.m_MyJoystick = ETCInput.GetControlJoystick("MyJoystick");
        }
        //m_FSM.attr.StartCoroutine(idleState.DoLogic());
        //idleState.RunLogic();

        //测试战斗状态
        //m_FSM.SetCurrentState(fightState);
        //m_FSM.CurrentState.m_MyJoystick = ETCInput.GetControlJoystick("MyJoystick");
        //m_FSM.attr.StartCoroutine(fightState.DoLogic());
    }
Example #6
0
    //NPC有两个状态分别是在路径中巡逻和追逐玩家
    //如果他在第一个状态并且SawPlayer 过度状态被出发了,它就转变到ChasePlayer状态
    //如果他在ChasePlayer状态并且LostPlayer状态被触发了,它就转变到FollowPath状态

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

        idle.AddTransition(Transition.FreeWalk, StateID.Walk);
        idle.AddTransition(Transition.Dead, StateID.Dead);
        idle.AddTransition(Transition.Acct, StateID.Acct);
        idle.AddTransition(Transition.Skill, StateID.Skill);
        idle.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer);

        PlayerWalkState walk = new PlayerWalkState();

        walk.AddTransition(Transition.FreeWalk, StateID.Walk);
        walk.AddTransition(Transition.Acct, StateID.Acct);
        walk.AddTransition(Transition.Skill, StateID.Skill);
        walk.AddTransition(Transition.Dead, StateID.Dead);
        walk.AddTransition(Transition.Idle, StateID.Idle);
        walk.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer);

        PlayerDeadState dead = new PlayerDeadState();

        dead.AddTransition(Transition.Dead, StateID.Dead);
        dead.AddTransition(Transition.Idle, StateID.Idle);
        dead.AddTransition(Transition.FreeWalk, StateID.Walk);

        PlayerAcceState acce = new PlayerAcceState();

        acce.AddTransition(Transition.Acct, StateID.Acct);
        acce.AddTransition(Transition.Skill, StateID.Skill);
        acce.AddTransition(Transition.FreeWalk, StateID.Walk);
        acce.AddTransition(Transition.Dead, StateID.Dead);
        acce.AddTransition(Transition.Idle, StateID.Idle);
        acce.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer);

        PlayerSkillState skill = new PlayerSkillState();

        skill.AddTransition(Transition.Skill, StateID.Skill);
        skill.AddTransition(Transition.Acct, StateID.Acct);
        skill.AddTransition(Transition.FreeWalk, StateID.Walk);
        skill.AddTransition(Transition.Dead, StateID.Dead);
        skill.AddTransition(Transition.Idle, StateID.Idle);
        skill.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer);

        //PlayerSwitchState sw = new PlayerSwitchState();
        //sw.AddTransition(Transition.Skill, StateID.Skill);
        //sw.AddTransition(Transition.Acct, StateID.Acct);
        //sw.AddTransition(Transition.FreeWalk, StateID.Walk);
        //sw.AddTransition(Transition.Dead, StateID.Dead);
        //sw.AddTransition(Transition.Idle, StateID.Idle);
        //sw.AddTransition(Transition.CrashPlayer, StateID.CrashPlayer);

        PlayerCrashState crash = new PlayerCrashState();

        crash.AddTransition(Transition.Skill, StateID.Skill);
        crash.AddTransition(Transition.Acct, StateID.Acct);
        crash.AddTransition(Transition.FreeWalk, StateID.Walk);
        crash.AddTransition(Transition.Dead, StateID.Dead);
        crash.AddTransition(Transition.Idle, StateID.Idle);

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