/// <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); } } }
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); }
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); }
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); } } }
public void Reset() { if (!CurrentAnimState.IsFinished()) { CurrentAnimState.SetFinished(true); CurrentAnimState.Reset(); } }
/// <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)); } }
protected void SwitchToNewStage(AnimAction action) { if (NextAnimState != null) { CurrentAnimState.Release(); CurrentAnimState.OnDeactivate(); CurrentAnimState = NextAnimState; CurrentAnimState.OnActivate(action); NextAnimState = null; } }
public void UpdateAnimStates() { AnimEngine.Update(); if (CurrentAnimState.IsFinished()) { CurrentAnimState.OnDeactivate(); CurrentAnimState = DefaultAnimState; CurrentAnimState.OnActivate(null); } CurrentAnimState.Update(); }
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); } }
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); } }
/// <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); } } }
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); } } }
///────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── /// <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; } }
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); } }
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); }
/// <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); }
///───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── /// <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); } } }
public virtual void Activate() { CurrentAnimState = DefaultAnimState; CurrentAnimState.OnActivate(null); NextAnimState = null; }
public void HandleMecAnimEvent(MecanimEvent animEvent) { CurrentAnimState.HandlemAnimatorEvent(animEvent); }
/// <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)); }