コード例 #1
0
    /// <summary>
    /// 子类实现该方法,每个角色在做一个操作时会传人操作对应的AgentAction.
    /// 该方法内执行状态切换和状态选择
    /// </summary>
    /// <param name="_action">_action.</param>
    public override void DoAction(AgentAction _action)
    {
        // 当前状态是否执行新的AgentAction,不执行就返回false,然后切换状态
        if (CurrentAnimState.HandleNewAction(_action))
        {
            NextAnimState = null;
        }
        else
        {
            // todo: switch AgentAction -> NextAnimState
            // 根据AgentAction选择下一个状态
//			if (_action is AgentActionIdle)
//				NextAnimState = AnimStates[(int)E_AnimState.E_Idle];
            if (_action is AgentActionMove)
            {
                NextAnimState = AnimStates[(int)E_AnimState.E_Move];
            }
            else if (_action is AgentActionAttack)
            {
                NextAnimState = AnimStates[(int)E_AnimState.E_Attack];
            }
//			else
//				Debug.Log("Not Find AnimState!!!");

            // 有下一个状态就切换到下一个状态
            if (null != NextAnimState)
            {
                ProgressToNextStage(_action);
            }
        }
    }
コード例 #2
0
ファイル: AnimFSMPlayer.cs プロジェクト: chenyunpet/MyGame
 public override void DoAction(AgentAction _action)
 {
     if (CurrentAnimState.HandleNewAction(_action))
     {
         NextAnimState = null;
     }
     else
     {
         //if (_action is AgentActionIdle)
         //{
         //    NextAnimState = AnimStates[(int)(E_AnimState.E_Idle)];
         //}
         if (_action is AgentActionMove)
         {
             NextAnimState = AnimStates[(int)(E_AnimState.E_Move)];
         }
         //else
         //{
         //    Debug.Log("Not Find AnimState");
         //}
         if (null != NextAnimState)
         {
             ProgressToNextStage(_action);
         }
     }
     //base.DoAction(_action);
 }
コード例 #3
0
 public override void DoAction(AgentAction _action)
 {
     if (CurrentAnimState.HandleNewAction(_action))
     {
         NextAnimState = null;
     }
     else
     {
         //if (_action is AgentActionIdle)
         //{
         //    NextAnimState = AnimStates[(int)(E_AnimState.E_Idle)];
         //}
         if (_action is AgentActionMove)
         {
             NextAnimState = AnimStates[(int)(E_AnimState.E_Move)];
             Debug.Log("AgentActionMove");
         }
         else if (_action is AgentActionAttack)
         {
             NextAnimState = AnimStates[(int)(E_AnimState.E_Attack)];
             Debug.Log("AgentActionAttack");
         }
         else if (_action is AgentActionGoTo)
         {
             NextAnimState = AnimStates[(int)(E_AnimState.E_GOTO)];
             Debug.Log("AgentActionGoTo");
         }
         if (null != NextAnimState)
         {
             ProgressToNextStage(_action);
         }
     }
     //base.DoAction(_action);
 }
コード例 #4
0
 public override void DoAction(AgentAction _action)
 {
     if (CurrentAnimState.HandleNewAction(_action))
     {
         NextAnimState = null;
     }
     else
     {
         //根据AgentAction选择下一个状态
         if (_action is AnimStateIdle)
         {
             NextAnimState = AnimStates[(int)E_animState.E_Idle];
         }
         else if (_action is AnimStateMove)
         {
             NextAnimState = AnimStates[(int)E_animState.E_Move];
         }
         else
         {
             Debug.Log(" none state");
         }
         if (NextAnimState != null)
         {
             ProgressToNextStage(_action);
         }
     }
 }
コード例 #5
0
 public void Reset()
 {
     if (!CurrentAnimState.IsFinished())
     {
         CurrentAnimState.SetFinished(true);
         CurrentAnimState.Reset();
     }
 }
コード例 #6
0
 /// <summary>
 /// Returns the if the Next or Current Animator State is tagged: tag
 /// </summary>
 public virtual bool RealAnimatorState(string tag, int layerIndex = 0)
 {
     if (layerIndex == 0)
     {
         return(NextAnimState.IsTag(tag) || CurrentAnimState.IsTag(tag));
     }
     else
     {
         return(Anim.GetNextAnimatorStateInfo(layerIndex).IsTag(tag) || Anim.GetCurrentAnimatorStateInfo(layerIndex).IsTag(tag));
     }
 }
コード例 #7
0
 protected void SwitchToNewStage(AnimAction action)
 {
     if (NextAnimState != null)
     {
         CurrentAnimState.Release();
         CurrentAnimState.OnDeactivate();
         CurrentAnimState = NextAnimState;
         CurrentAnimState.OnActivate(action);
         NextAnimState = null;
     }
 }
コード例 #8
0
    public void UpdateAnimStates()
    {
        AnimEngine.Update();

        if (CurrentAnimState.IsFinished())
        {
            CurrentAnimState.OnDeactivate();
            CurrentAnimState = DefaultAnimState;
            CurrentAnimState.OnActivate(null);
        }
        CurrentAnimState.Update();
    }
コード例 #9
0
    public override void DoAction(AgentAction action)
    {
        if (CurrentAnimState.HandleNewAction(action) == true)
        {
            //Debug.Log("AC - Do Action " + action.ToString());
            NextAnimState = null;
        }
        else
        {
            if (action is AgentActionGoTo)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_GOTO];
            }
            if (action is AgentActioCombatMove)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_COMBAT_MOVE];
            }
            else if (action is AgentActionRotate)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Rotate];
            }
            else if (action is AgentActionAttack)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_ATTACK_MELEE];
            }
            else if (action is AgentActionAttackRoll)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.AttackRoll];
            }
            else if (action is AgentActionWeaponShow)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_IDLE];
            }
            else if (action is AgentActionPlayAnim || action is AgentActionPlayIdleAnim)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_PLAY_ANIM];
            }
            else if (action is AgentActionInjury)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_INJURY];
            }
            else if (action is AgentActionBlock)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_BLOCK];
            }
            else if (action is AgentActionDeath)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_DEATH];
            }

            ProgressToNextStage(action);
        }
    }
コード例 #10
0
    public override void DoAction(ActionBase action)
    {
        if (CurrentAnimState.HandleNewAction(action) == true)
        {
            //Debug.Log("AC - Do Action " + action.ToString());
            NextAnimState = null;
        }
        else
        {
            if (action is ActionGoTo)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.GotoPos];
            }
            if (action is ActionCombatMove)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.CombatMove];
            }
            else if (action is ActionRotate)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Rotate];
            }
            else if (action is ActionAttack)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Attack];
            }
            else if (action is ActionWeaponShow)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Idle];
            }
            else if (action is ActionPlayAnim || action is ActionPlayIdleAnim)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.PlayAnim];
            }
            else if (action is ActionInjury)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Injury];
            }
            else if (action is ActionKnockdown)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Knockdown];
            }
            else if (action is ActionDeath)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Death];
            }
            else if (action is ActionAttackWhirl)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.AttackWhirl];
            }

            ProgressToNextStage(action);
        }
    }
コード例 #11
0
    /// <summary>
    /// 子类实现该方法,每个角色在做一个操作时会传人操作对应的AgentAction.
    /// 该方法内执行状态切换和状态选择
    /// </summary>
    /// <param name="_action">_action.</param>
    public override void DoAction(AgentAction action)
    {
        // 当前状态是否执行新的AgentAction,不执行就返回false,然后切换状态
        if (CurrentAnimState.HandleNewAction(action))
        {
            NextAnimState = null;
        }
        else
        {
            if (action is AgentActionGoTo)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_GOTO];
            }
            if (action is AgentActionMove)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_MOVE];
            }
            else if (action is AgentActionAttack)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_ATTACK_MELEE];
            }
            else if (action is AgentActionRoll)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_ROLL];
            }
            else if (action is AgentActionWeaponShow)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_IDLE];
            }
            else if (action is AgentActionUseLever)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_USE_LEVER];
            }
            else if (action is AgentActionTeleport)
            {
                NextAnimState = AnimStates [(int)E_AnimState.Teleport];
            }
            else if (action is AgentActionInjury)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_INJURY];
            }
            else if (action is AgentActionDeath)
            {
                NextAnimState = AnimStates [(int)E_AnimState.E_DEATH];
            }

            // 有下一个状态就切换到下一个状态
            if (null != NextAnimState)
            {
                ProgressToNextStage(action);
            }
        }
    }
コード例 #12
0
    public override void DoAction(AgentAction action)
    {
        if (CurrentAnimState.HandleNewAction(action) == true)
        {
            //Debug.Log("AC - Do Action " + action.ToString());
            NextAnimState = null;
        }
        else
        {
            if (action is AgentActionGoTo)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_GOTO];
            }
            if (action is AgentActionMove)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_MOVE];
            }
            else if (action is AgentActionAttack)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_ATTACK_MELEE];
            }
            else if (action is AgentActionRoll)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_ROLL];
            }
            else if (action is AgentActionWeaponShow)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_IDLE];
            }
            else if (action is AgentActionUseLever)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_USE_LEVER];
            }
            else if (action is AgentActionTeleport)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Teleport];
            }
            else if (action is AgentActionInjury)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_INJURY];
            }
            else if (action is AgentActionDeath)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.E_DEATH];
            }

            if (NextAnimState != null)
            {
                ProgressToNextStage(action);
            }
        }
    }
コード例 #13
0
        ///──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
        /// <summary>
        /// Fall Logic
        /// </summary>
        protected virtual void Falling()
        {
            //Don't Calcultate Fall Ray if the animal on any of these states
            if (CurrentAnimState.IsTag("Idle"))
            {
                return;
            }
            if (CurrentAnimState.IsTag("Sleep"))
            {
                return;
            }
            if (CurrentAnimState.IsTag("Action"))
            {
                return;
            }

            RaycastHit hitpos;

            float Multiplier = _Chest.multiplier * scaleFactor;

            if (CurrentAnimState.IsTag("Jump") || CurrentAnimState.IsTag("Fall"))
            {
                Multiplier *= FallRayMultiplier;
            }

            //Set the Fall Ray a bit farther from the front feet.



            _fallVector = _Chest.GetPivot +
                          (_transform.forward.normalized * (Shift ? GroundSpeed + 1 : GroundSpeed) * FallRayDistance * ScaleFactor);

            if (debug)
            {
                Debug.DrawRay(_fallVector, -transform.up * Multiplier, Color.magenta);
            }

            if (Physics.Raycast(_fallVector, -_transform.up, out hitpos, Multiplier, GroundLayer))
            {
                fall = false;
                if (Vector3.Angle(hitpos.normal, UpVector) > maxAngleSlope && isJumping())
                {
                    fall = true;                                                                        //if the ray found ground but is to Sloppy
                }
            }
            else
            {
                fall = true;
            }
        }
コード例 #14
0
    public override void DoAction(AgentAction action)
    {
        if (CurrentAnimState.HandleNewAction(action) == true)
        {
            //Debug.Log("AC - Do Action " + action.ToString());
            NextAnimState = null;
        }
        else
        {
            if (action is AgentActionGoTo)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.gotoPos];
            }
            if (action is AgentActioCombatMove)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.combatMove];
            }
            else if (action is AgentActionRotate)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.Rotate];
            }
            else if (action is AgentActionAttack)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.attackMelee];
            }
            else if (action is AgentActionWeaponShow)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.idle];
            }
            else if (action is AgentActionPlayAnim || action is AgentActionPlayIdleAnim)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.playAnim];
            }
            else if (action is AgentActionInjury)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.injury];
            }
            else if (action is AgentActionKnockdown)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.knockdown];
            }
            else if (action is AgentActionDeath)
            {
                NextAnimState = AnimStates[(int)E_MyAnimState.death];
            }


            ProgressToNextStage(action);
        }
    }
コード例 #15
0
 public bool DoAction(AnimAction action)
 {
     if (CurrentAnimState.HandleNewAction(action))
     {
         /*
          * 当前状态处理了该行为
          */
         NextAnimState = null;
         return(true);
     }
     if (AnimStates.ContainsKey(action.Type))
     {
         /*
          * 切换到该行为对应的状态
          */
         NextAnimState = AnimStates[action.Type];
         SwitchToNewStage(action);
         return(true);
     }
     return(false);
 }
コード例 #16
0
        /// <summary>
        /// This will check is the Animal is in any Jump State
        /// </summary>
        /// <param name="normalizedTime">The normalized time of the Jump Animation</param>
        /// <param name="half">True to check if is the First Half, False to check the Second Half</param>
        /// <returns></returns>
        public virtual bool isJumping(float normalizedTime, bool half)
        {
            if (half)  //if is jumping the first half
            {
                if (CurrentAnimState.IsTag("Jump"))
                {
                    if (CurrentAnimState.normalizedTime <= normalizedTime)
                    {
                        return(true);
                    }
                }

                if (NextAnimState.IsTag("Jump"))  //if is transitioning to jump
                {
                    if (NextAnimState.normalizedTime <= normalizedTime)
                    {
                        return(true);
                    }
                }
            }
            else //if is jumping the second half
            {
                if (CurrentAnimState.IsTag("Jump"))
                {
                    if (CurrentAnimState.normalizedTime >= normalizedTime)
                    {
                        return(true);
                    }
                }

                if (NextAnimState.IsTag("Jump"))  //if is transitioning to jump
                {
                    if (NextAnimState.normalizedTime >= normalizedTime)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
コード例 #17
0
        ///─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
        /// <summary>
        /// Add more Rotations to the current Turn Animations
        /// </summary>
        protected virtual void AdditionalTurn()
        {
            float Turn;

            Turn = TurnSpeed;

            if (!CurrentAnimState.IsTag("Locomotion"))
            {
                Turn = 0;
            }

            if (swim)
            {
                Turn = swimSpeed;
            }

            if (movementAxis.z >= 0)
            {
                _transform.Rotate(_transform.up, Turn * 3 * movementAxis.x * Time.deltaTime);
            }
            else
            {
                _transform.Rotate(_transform.up, Turn * 3 * -movementAxis.x * Time.deltaTime);
            }

            if (isJumping() || fall && (!fly && !swim && !stun && !RealAnimatorState("Action")))               //More Rotation when jumping and falling... in air rotation
            {
                if (movementAxis.z >= 0)
                {
                    _transform.Rotate(_transform.up, 100 * movementAxis.x * Time.deltaTime);
                }
                else
                {
                    _transform.Rotate(_transform.up, 100 * -movementAxis.x * Time.deltaTime);
                }
            }
        }
コード例 #18
0
 public virtual void Activate()
 {
     CurrentAnimState = DefaultAnimState;
     CurrentAnimState.OnActivate(null);
     NextAnimState = null;
 }
コード例 #19
0
 public void HandleMecAnimEvent(MecanimEvent animEvent)
 {
     CurrentAnimState.HandlemAnimatorEvent(animEvent);
 }
コード例 #20
0
 /// <summary>
 /// Returns the if the Next or Current Animator State is tagged: tag
 /// </summary>
 public virtual bool RealAnimatorState(string tag)
 {
     return(NextAnimState.IsTag(tag) || CurrentAnimState.IsTag(tag));
 }