Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using CharacterEvents;
- using com.ootii.AI.Controllers;
- using com.ootii.Cameras;
- using UnityEngine;
- using System.Collections;
- public class Dodge : CharacterMotion {
- private const string STATE = "Dodge";
- public readonly string[] STATES = new[] {
- "Roll_F", "Roll_R", "Roll_B", "Roll_L",
- };
- public Dodge(): base() {
- mName = "Dodge";
- mReactivationDelay = 0.25f;
- _Priority = 5;
- mIsStartable = true;
- IsInterruptible = false;
- }
- public Dodge(MotionController rController): base(rController) {
- mName = "Dodge";
- mReactivationDelay = 0.25f;
- _Priority = 5;
- mIsStartable = true;
- IsInterruptible = false;
- }
- public override void LoadAnimatorData() {
- for (int i = 0; i < STATES.Length; i++) {
- mController.AddAnimatorName(string.Format("Enter -> {0}{1}.{2}", StringConst.AnimationBaseLayer, STATE, STATES[i]));
- mController.AddAnimatorName(string.Format("{0}{1}.{2}", StringConst.AnimationBaseLayer, STATE, STATES[i]));
- }
- mController.AddAnimatorName(string.Format("Entry -> {0}{1}.{2}", StringConst.AnimationBaseLayer, STATE, STATES[0]));
- Events.AddListener<eDodge>(OnDodge);
- Events.AddCondition<eDodge>(CanDodge);
- }
- private bool CanDodge(EventStatus status) {
- if (status != EventStatus.Start) {
- return true;
- }
- if (IsActive || CharacterMC.IsUpperLayerActive) {
- return false;
- }
- return CheckPriority();
- }
- private void OnDodge(eDodge e) {
- if (e.Status!= EventStatus.Start) {
- return;
- }
- mController.ActivateMotion(this);
- }
- public override bool TestActivate() {
- return false;
- }
- public override bool TestUpdate() {
- return true;
- }
- public override void UpdateMotion() {
- if (!IsInMotion) {
- return;
- }
- var normalizedTime = mController.State.AnimatorStates[mAnimatorLayerIndex].StateInfo.normalizedTime;
- if (normalizedTime >= 0.95f) {
- Deactivate();
- }
- }
- public override bool Activate(MotionControllerMotion rPrevMotion) {
- if (mController.UseInput && mController.CameraRig != null) {
- mController.CameraRig.TransitionToMode(EnumCameraMode.THIRD_PERSON_FIXED);
- }
- mPhase = MotionPhase.DodgeBack;
- if (mController.State.InputMagnitudeTrend.Average > 0.3f) {
- if (Mathf.Abs(CharacterMC.Movement.y) > Mathf.Abs(CharacterMC.Movement.x)) {
- mPhase = CharacterMC.Movement.y > 0 ? MotionPhase.DodgeForward : MotionPhase.DodgeBack;
- }
- else {
- mPhase = CharacterMC.Movement.x > 0 ? MotionPhase.DodgeRight : MotionPhase.DodgeLeft;
- }
- }
- CharacterMC.ChangeState(mAnimatorLayerIndex, STATE);
- mController.SetAnimatorMotionPhase(mAnimatorLayerIndex, mPhase);
- return base.Activate(rPrevMotion);
- }
- private bool IsInMotion {
- get {
- return mController.GetAnimatorStateName(mMotionLayer.AnimatorLayerIndex).IndexOf(STATE) >= 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement