Advertisement
Guest User

DodgeScript

a guest
Mar 29th, 2015
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.21 KB | None | 0 0
  1. using CharacterEvents;
  2. using com.ootii.AI.Controllers;
  3. using com.ootii.Cameras;
  4. using UnityEngine;
  5. using System.Collections;
  6. public class Dodge : CharacterMotion {
  7.  
  8.     private const string STATE = "Dodge";
  9.     public readonly string[] STATES = new[] {
  10.         "Roll_F", "Roll_R", "Roll_B", "Roll_L",
  11.     };
  12.  
  13.     public Dodge(): base() {
  14.         mName = "Dodge";
  15.         mReactivationDelay = 0.25f;
  16.         _Priority = 5;
  17.         mIsStartable = true;
  18.         IsInterruptible = false;
  19.     }
  20.  
  21.     public Dodge(MotionController rController): base(rController) {
  22.         mName = "Dodge";
  23.         mReactivationDelay = 0.25f;
  24.         _Priority = 5;
  25.         mIsStartable = true;
  26.         IsInterruptible = false;
  27.     }
  28.  
  29.     public override void LoadAnimatorData() {
  30.         for (int i = 0; i < STATES.Length; i++) {
  31.             mController.AddAnimatorName(string.Format("Enter -> {0}{1}.{2}", StringConst.AnimationBaseLayer, STATE, STATES[i]));
  32.             mController.AddAnimatorName(string.Format("{0}{1}.{2}", StringConst.AnimationBaseLayer, STATE, STATES[i]));
  33.         }
  34.         mController.AddAnimatorName(string.Format("Entry -> {0}{1}.{2}", StringConst.AnimationBaseLayer, STATE, STATES[0]));
  35.         Events.AddListener<eDodge>(OnDodge);
  36.         Events.AddCondition<eDodge>(CanDodge);
  37.     }
  38.  
  39.     private bool CanDodge(EventStatus status) {
  40.         if (status != EventStatus.Start) {
  41.             return true;
  42.         }
  43.         if (IsActive || CharacterMC.IsUpperLayerActive) {
  44.             return false;
  45.         }
  46.         return CheckPriority();
  47.     }
  48.  
  49.     private void OnDodge(eDodge e) {
  50.         if (e.Status!= EventStatus.Start) {
  51.             return;
  52.         }
  53.         mController.ActivateMotion(this);
  54.     }
  55.  
  56.     public override bool TestActivate() {
  57.         return false;
  58.     }
  59.  
  60.     public override bool TestUpdate() {
  61.         return true;
  62.     }
  63.  
  64.     public override void UpdateMotion() {
  65.         if (!IsInMotion) {
  66.             return;
  67.         }
  68.         var normalizedTime = mController.State.AnimatorStates[mAnimatorLayerIndex].StateInfo.normalizedTime;
  69.         if (normalizedTime >= 0.95f) {
  70.             Deactivate();
  71.         }
  72.     }
  73.  
  74.     public override bool Activate(MotionControllerMotion rPrevMotion) {
  75.         if (mController.UseInput && mController.CameraRig != null) {
  76.             mController.CameraRig.TransitionToMode(EnumCameraMode.THIRD_PERSON_FIXED);
  77.         }
  78.         mPhase = MotionPhase.DodgeBack;
  79.         if (mController.State.InputMagnitudeTrend.Average > 0.3f) {
  80.             if (Mathf.Abs(CharacterMC.Movement.y) > Mathf.Abs(CharacterMC.Movement.x)) {
  81.                 mPhase = CharacterMC.Movement.y > 0 ? MotionPhase.DodgeForward : MotionPhase.DodgeBack;
  82.             }
  83.             else {
  84.                 mPhase = CharacterMC.Movement.x > 0 ? MotionPhase.DodgeRight : MotionPhase.DodgeLeft;
  85.             }
  86.         }
  87.         CharacterMC.ChangeState(mAnimatorLayerIndex, STATE);
  88.         mController.SetAnimatorMotionPhase(mAnimatorLayerIndex, mPhase);
  89.         return base.Activate(rPrevMotion);
  90.     }
  91.  
  92.     private bool IsInMotion {
  93.         get {
  94.             return  mController.GetAnimatorStateName(mMotionLayer.AnimatorLayerIndex).IndexOf(STATE) >= 0;
  95.         }
  96.     }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement