Пример #1
0
    public void playBasicMove(BasicMoveInfo basicMove, float interpolationSpeed)
    {
        if (GetComponent <Animation>().IsPlaying(basicMove.name) || controlsScript.isBlocking)
        {
            return;
        }
        GetComponent <Animation>().CrossFade(basicMove.name, interpolationSpeed);

        _playBasicMove(basicMove);
    }
Пример #2
0
 private void setBasicMoveAnimation(BasicMoveInfo basicMove, string animName, WrapMode wrapMode)
 {
     if (basicMove.animationClip == null)
     {
         return;
     }
     basicMove.name = animName;
     //if (animation[animName] != null) animation.RemoveClip(animName);
     attachAnimation(basicMove.animationClip, animName, basicMove.animationSpeed, wrapMode);
 }
Пример #3
0
    public void playBasicMove(BasicMoveInfo basicMove)
    {
        if (animation.IsPlaying(basicMove.name) || controlsScript.isBlocking)
        {
            return;
        }
        animation.CrossFade(basicMove.name, controlsScript.myInfo.interpolationSpeed);

        _playBasicMove(basicMove);
    }
Пример #4
0
    private void _playBasicMove(BasicMoveInfo basicMove)
    {
        if (basicMove.soundEffect != null && UFE.config.soundfx)
        {
            Camera.main.GetComponent <AudioSource>().PlayOneShot(basicMove.soundEffect);
        }

        if (basicMove.particleEffect.prefab != null)
        {
            GameObject pTemp = (GameObject)Instantiate(basicMove.particleEffect.prefab);
            pTemp.transform.parent        = transform;
            pTemp.transform.localPosition = basicMove.particleEffect.position;
            Destroy(pTemp, basicMove.particleEffect.duration);
        }
    }
Пример #5
0
    public void basicMoveBlock(string label, BasicMoveInfo basicMove, bool speedToggle, bool hasSound)
    {
        basicMove.editorToggle = EditorGUILayout.Foldout(basicMove.editorToggle, label, foldStyle);
        if (basicMove.editorToggle)
        {
            EditorGUILayout.BeginVertical(subArrayElementStyle); {
                EditorGUILayout.Space();
                EditorGUI.indentLevel      += 1;
                EditorGUIUtility.labelWidth = 180;
                basicMove.animationClip     = (AnimationClip)EditorGUILayout.ObjectField("Animation Clip:", basicMove.animationClip, typeof(UnityEngine.AnimationClip), false);

                if (speedToggle)
                {
                    EditorGUI.BeginDisabledGroup(true);
                    EditorGUILayout.TextField("Animation Speed:", "(Automatic)");
                    EditorGUI.EndDisabledGroup();
                }
                else
                {
                    basicMove.animationSpeed = EditorGUILayout.FloatField("Animation Speed:", basicMove.animationSpeed);
                }

                if (hasSound)
                {
                    basicMove.soundEffect     = (AudioClip)EditorGUILayout.ObjectField("Sound Effect:", basicMove.soundEffect, typeof(UnityEngine.AudioClip), true);
                    basicMove.continuousSound = EditorGUILayout.Toggle("Continuous Sound", basicMove.continuousSound, toggleStyle);
                }

                basicMove.particleEffect.editorToggle = EditorGUILayout.Foldout(basicMove.particleEffect.editorToggle, "Particle Effect", foldStyle);
                if (basicMove.particleEffect.editorToggle)
                {
                    EditorGUILayout.BeginVertical(subGroupStyle); {
                        EditorGUILayout.Space();

                        basicMove.particleEffect.prefab   = (GameObject)EditorGUILayout.ObjectField("Particle Prefab:", basicMove.particleEffect.prefab, typeof(UnityEngine.GameObject), true);
                        basicMove.particleEffect.duration = EditorGUILayout.FloatField("Duration (seconds):", basicMove.particleEffect.duration);
                        basicMove.particleEffect.position = EditorGUILayout.Vector3Field("Position (relative):", basicMove.particleEffect.position);

                        EditorGUILayout.Space();
                    } EditorGUILayout.EndVertical();
                }

                EditorGUIUtility.labelWidth = 150;
                EditorGUI.indentLevel      -= 1;
                EditorGUILayout.Space();
            } EditorGUILayout.EndVertical();
        }
    }
Пример #6
0
    public bool IsBasicMovePlaying(BasicMoveInfo basicMove)
    {
        if (basicMove.clip1 != null && IsAnimationPlaying(basicMove.name))
        {
            return(true);
        }
        if (basicMove.clip2 != null && IsAnimationPlaying(basicMove.name + "2"))
        {
            return(true);
        }
        if (basicMove.clip3 != null && IsAnimationPlaying(basicMove.name + "3"))
        {
            return(true);
        }

        return(false);
    }
Пример #7
0
    public string GetAnimationString(BasicMoveInfo basicMove, int clipNum)
    {
        if (clipNum == 1)
        {
            return(basicMove.name);
        }
        if (clipNum == 2 && basicMove.clip2 != null)
        {
            return(basicMove.name + "_2");
        }
        if (clipNum == 3 && basicMove.clip3 != null)
        {
            return(basicMove.name + "_3");
        }

        return(basicMove.name);
    }
Пример #8
0
    public void PlayBasicMove(BasicMoveInfo basicMove, string clipName, float blendingTime, bool replay)
    {
        if (IsAnimationPlaying(clipName) && !replay)
        {
            return;
        }

        PlayAnimation(clipName, blendingTime);

        if (playerScript.strongStunnedTime > 0)
        {
            PlayWithEffects(basicMove, true);
        }
        else
        {
            PlayWithEffects(basicMove, false);
        }
    }
Пример #9
0
    private static void BasicMoveUpdate(BasicMoveInfo basicMove)
    {
        if (basicMove.clip1 != null)
        {
            basicMove.animMap[0].clip   = basicMove.clip1;
            basicMove.animMap[0].length = basicMove.clip1.length;
        }
        if (basicMove.clip2 != null)
        {
            basicMove.animMap[1].clip   = basicMove.clip2;
            basicMove.animMap[1].length = basicMove.clip2.length;
        }
        if (basicMove.clip3 != null)
        {
            basicMove.animMap[2].clip   = basicMove.clip3;
            basicMove.animMap[2].length = basicMove.clip3.length;
        }
        if (basicMove.clip4 != null)
        {
            basicMove.animMap[3].clip   = basicMove.clip4;
            basicMove.animMap[3].length = basicMove.clip4.length;
        }
        if (basicMove.clip5 != null)
        {
            basicMove.animMap[4].clip   = basicMove.clip5;
            basicMove.animMap[4].length = basicMove.clip5.length;
        }
        if (basicMove.clip6 != null)
        {
            basicMove.animMap[5].clip   = basicMove.clip6;
            basicMove.animMap[5].length = basicMove.clip6.length;
        }

        basicMove._animationSpeed      = basicMove.animationSpeed;
        basicMove._restingClipInterval = basicMove.restingClipInterval;
        basicMove._blendingIn          = basicMove.blendingIn;
        basicMove._blendingOut         = basicMove.blendingOut;
    }
Пример #10
0
    private void PlayWithEffects(BasicMoveInfo basicMove, bool stun)
    {
        if (basicMove == null)
        {
            Debug.Log("ㅇㅅㅇ");
        }

        if (CSceneManager.Instance.MyRandom(basicMove.soundPlayRandomValue))
        {
            CGameManager.PlaySoundFX(basicMove.soundEffects);
        }

        if (basicMove.hitEffect.prefab != null)
        {
            if (stun)
            {
                GameObject stunnedParticle = (GameObject)Instantiate(basicMove.hitEffect.prefab);
                stunnedParticle.transform.parent = GetOwnerPartObject(basicMove.hitEffect.bodyPart).transform;
                Vector3 newPos = new Vector3(-0.4f, 0, 0);
                newPos.z += basicMove.hitEffect.positionOffSet.z;
                stunnedParticle.transform.localPosition = newPos;
                stunnedParticle.transform.localRotation = Quaternion.Euler(new Vector3(0, -90, 0));
                stunnedParticle.transform.localScale    = new Vector3(0.5f, 0.5f, 0.5f);

                Destroy(stunnedParticle, CSceneManager.Instance.hurtOptions.strongStunnedMaxTime);
            }
            else
            {
                GameObject temp   = (GameObject)Instantiate(basicMove.hitEffect.prefab);
                Vector3    newPos = playerScript.myHitScript.GetPosition(basicMove.hitEffect.bodyPart);
                newPos.x += basicMove.hitEffect.positionOffSet.x * playerScript.mirror;
                newPos.y += basicMove.hitEffect.positionOffSet.y;
                newPos.z += basicMove.hitEffect.positionOffSet.z;
                temp.transform.position = newPos;
            }
        }
    }
Пример #11
0
 public void PlayBasicMove(BasicMoveInfo basicMove, bool replay)
 {
     PlayBasicMove(basicMove, basicMove.name, replay);
 }
Пример #12
0
 public void PlayBasicMove(BasicMoveInfo basicMove, string clipName)
 {
     PlayBasicMove(basicMove, basicMove.name, playerScript.myCharacterInfo.blendingTime, true);
 }
Пример #13
0
 public void PlayBasicMove(BasicMoveInfo basicMove)
 {
     PlayBasicMove(basicMove, basicMove.name);
 }
Пример #14
0
    public void ApplyForces(MoveInfo move)
    {
        // pure freeze
        if (freeze && myControlsScript.strongStunnedTime < 0)
        {
            return;
        }

        float appliedFriction = (moveDirection != 0 || myControlsScript.myCharacterInfo.physics.highMovingFriction) ?
                                CGameManager.selectStateOption.groundFriction : myControlsScript.myCharacterInfo.physics.friction;

        if (!IsGrounded())
        {
            appliedFriction = 0;
            if (verticalForce == 0)
            {
                verticalForce = -.1f;
            }
        }

        if (horizontalForce != 0 && !isTakingOff)
        {
            if (horizontalForce > 0)
            {
                horizontalForce -= appliedFriction * Time.fixedDeltaTime;
                horizontalForce  = Mathf.Max(0, horizontalForce);
            }
            else if (horizontalForce < 0)
            {
                horizontalForce += appliedFriction * Time.fixedDeltaTime;
                horizontalForce  = Mathf.Min(0, horizontalForce);
            }

            transform.Translate(0, 0, horizontalForce * Time.fixedDeltaTime);
        }

        if (move == null || (move != null && !move.ignoreGravity))
        {
            if ((verticalForce < 0 && !IsGrounded()) || verticalForce > 0)
            {
                verticalForce -= appliedGravity * Time.fixedDeltaTime;
                transform.Translate(moveDirection * myControlsScript.myCharacterInfo.physics.jumpDistance * Time.fixedDeltaTime
                                    , verticalForce * Time.fixedDeltaTime
                                    , 0);
            }
            else if (verticalForce < 0 && IsGrounded() && myControlsScript.currentSubState != PlayerSubState.stunned)
            {
                verticalForce = 0;
            }
        }

        float minDist = myControlsScript.opPlayerScript.transform.position.x - myControlsScript.cameraScript.maxDistance;
        float maxDist = myControlsScript.opPlayerScript.transform.position.x + myControlsScript.cameraScript.maxDistance;

        transform.position = new Vector3(Mathf.Clamp(transform.position.x, minDist, maxDist),
                                         transform.position.y,
                                         transform.position.z);
        transform.position = new Vector3(Mathf.Clamp(transform.position.x,
                                                     CGameManager.selectStateOption.leftBoundary,
                                                     CGameManager.selectStateOption.rightBoundary)
                                         , transform.position.y
                                         , transform.position.z);

        // 2017.07.14 ~ add script kimmiso
        if (IsGrounded() && myControlsScript.currentState != PlayerState.down)
        {
            if (verticalForce != 0)
            {
                #region ground bouncing

                if (groundBounceTimes < CSceneManager.Instance.groundBounceOptions.maximumBounceForce &&
                    myControlsScript.currentSubState == PlayerSubState.stunned &&
                    CSceneManager.Instance.groundBounceOptions.bounceForce != Sizes.none &&
                    verticalForce <= -CSceneManager.Instance.groundBounceOptions.minimumBounceForce &&
                    myControlsScript.currentHit.groundBounce)
                {
                    switch (CSceneManager.Instance.groundBounceOptions.bounceForce)
                    {
                    case Sizes.small:
                        AddForce(new Vector2(0, -verticalForce / 1.7f), -1);
                        break;

                    case Sizes.medium:
                        AddForce(new Vector2(0, -verticalForce / 1.5f), -1);
                        break;

                    case Sizes.high:
                        AddForce(new Vector2(0, -verticalForce / 1.2f), -1);
                        break;
                    }

                    groundBounceTimes++;

                    if (!isGroundBouncing)
                    {
                        myControlsScript.stunTime += airTime + CSceneManager.Instance.knockDownOptions.air.knockedOutTime;

                        if (myControlsScript.moveSetScript.basicMoves.fallingFromGroundBounce.clip1 != null)
                        {
                            myControlsScript.currentHitAnimation = myControlsScript.moveSetScript.basicMoves.fallingFromGroundBounce.name;
                            myControlsScript.moveSetScript.PlayBasicMove(myControlsScript.moveSetScript.basicMoves.fallingFromGroundBounce);
                        }

                        if (CSceneManager.Instance.groundBounceOptions.bounceEffectPrefab != null)
                        {
                        }
                        // play sound

                        isGroundBouncing = true;
                    }
                    return;
                }

                #endregion

                verticalTotalForce = 0;
                airTime            = 0;
                myControlsScript.moveSetScript.totalAirMoves = 0;
                currentAirJumps = 0;

                BasicMoveInfo airAnimation = null;
                string        downAnimtion = "";

                isGroundBouncing  = false;
                groundBounceTimes = 0;

                float animationSpeed = 0;
                float delayTime      = 0;

                if (myControlsScript.currentMove != null && myControlsScript.currentMove.hitAnimationOverride)
                {
                    return;
                }

                if (myControlsScript.currentSubState == PlayerSubState.stunned)
                {
                    myControlsScript.stunTime = CSceneManager.Instance.knockDownOptions.air.knockedOutTime + CSceneManager.Instance.knockDownOptions.air.standUpTime;

                    if (myControlsScript.moveSetScript.basicMoves.fallDownAirHit.clip1 == null)
                    {
                        Debug.LogError("'fallDownAirHit' animation clip is not found! have to input it data on Player num -> model name -> MecanimScript -> 'fallDownAirHit'");
                    }

                    airAnimation = myControlsScript.moveSetScript.basicMoves.fallDownAirHit;
                    downAnimtion = myControlsScript.moveSetScript.GetAnimationString(airAnimation, 1);

                    myControlsScript.currentState = PlayerState.down;
                }
                else if (myControlsScript.currentState != PlayerState.stand)
                {
                    //  landing  //
                    if (myControlsScript.moveSetScript.basicMoves.landing.clip1 != null &&
                        (myControlsScript.currentMove == null ||
                         (myControlsScript.currentMove != null && myControlsScript.currentMove.cancelMoveWheLanding)))
                    {
                        myControlsScript.isAirRecovering = false;
                        airAnimation  = myControlsScript.moveSetScript.basicMoves.landing;
                        moveDirection = 0;
                        myControlsScript.currentSubState = PlayerSubState.resting;
                        isLanding = true;
                        myControlsScript.KillCurrentMove();
                        delayTime = (float)myControlsScript.myCharacterInfo.physics.landingDelay / CSceneManager.Instance.fps;
                        //ResetLanding(); >>>> 코루틴으로 처리하겠음

                        StartCoroutine(CallResetLandingFunc(delayTime));

                        if (airAnimation.isAutoSpeed)
                        {
                            animationSpeed = myControlsScript.moveSetScript.GetAnimationLength(airAnimation.name) / delayTime;
                        }
                    }

                    if (myControlsScript.currentState != PlayerState.crouch)
                    {
                        myControlsScript.currentState = PlayerState.stand;
                    }
                }

                if (airAnimation != null)
                {
                    if (downAnimtion != "")
                    {
                        myControlsScript.moveSetScript.PlayBasicMove(airAnimation, downAnimtion);
                    }
                    else
                    {
                        myControlsScript.moveSetScript.PlayBasicMove(airAnimation);
                    }

                    if (animationSpeed != 0)
                    {
                        myControlsScript.moveSetScript.SetAnimationSpeed(airAnimation.name, animationSpeed);
                    }
                }
            }

            #region walk / back-walk
            if (myControlsScript.currentSubState != PlayerSubState.stunned &&
                !myControlsScript.isGuarding &&
                !myControlsScript.guardStunned &&
                move == null &&
                !isTakingOff &&
                !isLanding &&
                myControlsScript.currentState == PlayerState.stand)
            {
                if (moveDirection > 0 && myControlsScript.mirror == -1 || // 1p
                    moveDirection > 0 && myControlsScript.mirror == 1)
                {
                    if (myControlsScript.moveSetScript.basicMoves.walkForward.clip1 == null)
                    {
                        Debug.LogError("walkForward 애니메이션 클립 없음 넣으셈");
                    }

                    if (!myControlsScript.moveSetScript.IsAnimationPlaying(myControlsScript.moveSetScript.basicMoves.walkForward.name))
                    {
                        myControlsScript.moveSetScript.PlayBasicMove(myControlsScript.moveSetScript.basicMoves.walkForward);
                    }
                }
                else if (moveDirection < 0 && myControlsScript.mirror == 1 ||
                         moveDirection < 0 && myControlsScript.mirror == -1) // 1p
                {
                    if (myControlsScript.moveSetScript.basicMoves.walkBack.clip1 == null)
                    {
                        Debug.LogError("walkBack 애니메이션 클립 없음 넣으셈");
                    }

                    if (!myControlsScript.moveSetScript.IsAnimationPlaying(myControlsScript.moveSetScript.basicMoves.walkBack.name))
                    {
                        myControlsScript.moveSetScript.PlayBasicMove(myControlsScript.moveSetScript.basicMoves.walkBack);
                    }
                }
            }
            #endregion
        }
        else if (verticalForce > 0 || !IsGrounded())
        {
            //  jump straight, fall straight  //

            if (move != null && myControlsScript.currentState == PlayerState.stand)
            {
                myControlsScript.currentState = PlayerState.neutralJump;
            }

            if (move == null && verticalForce / verticalTotalForce > 0 && verticalForce / verticalTotalForce <= 1)
            {
                if (isGroundBouncing)
                {
                    return;
                }

                if (moveDirection == 0)
                {
                    myControlsScript.currentState = PlayerState.neutralJump;
                }
                else
                {
                    if (moveDirection > 0)
                    {
                        myControlsScript.currentState = PlayerState.forwardJump;
                    }

                    if (moveDirection < 0)
                    {
                        myControlsScript.currentState = PlayerState.backJump;
                    }
                }

                BasicMoveInfo airAnimation = myControlsScript.moveSetScript.basicMoves.jumpStraight;
                if (myControlsScript.currentSubState == PlayerSubState.stunned)
                {
                    if (isWallBouncing && myControlsScript.moveSetScript.basicMoves.airWallBounce.clip1 != null)
                    {
                        airAnimation = myControlsScript.moveSetScript.basicMoves.airWallBounce;
                    }
                    else if (myControlsScript.moveSetScript.basicMoves.getHitKnockBack.clip1 != null &&
                             Mathf.Abs(horizontalForce) > CSceneManager.Instance.comboOptions.knockBackMinForce &&
                             CSceneManager.Instance.comboOptions.knockBackMinForce > 0)
                    {
                        airAnimation = myControlsScript.moveSetScript.basicMoves.getHitKnockBack;
                        airTime     *= 2;
                    }
                    else
                    {
                        if (myControlsScript.moveSetScript.basicMoves.getHitAir.clip1 == null)
                        {
                            Debug.LogError("'getHitAir' animation clip not found. you have input animation at MoveSetScript -> BasicMoves -> 'getHitAir' clip1 ");
                        }

                        airAnimation = myControlsScript.moveSetScript.basicMoves.getHitAir;
                    }
                }
                else if (myControlsScript.isAirRecovering &&
                         (myControlsScript.moveSetScript.basicMoves.airRecovery.clip1 != null))
                {
                    airAnimation = myControlsScript.moveSetScript.basicMoves.airRecovery;
                }

                if (!isOverrideAirAnimation && !myControlsScript.moveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    myControlsScript.moveSetScript.PlayBasicMove(airAnimation);

                    if (airAnimation.isAutoSpeed)
                    {
                        myControlsScript.moveSetScript.SetAnimationNomalizedSpeed(airAnimation.name, myControlsScript.moveSetScript.GetAnimationLength(airAnimation.name) / airTime);
                    }
                }
            }
            else if (move == null && (verticalForce / verticalTotalForce <= 0))
            {
                BasicMoveInfo airAnimation = myControlsScript.moveSetScript.basicMoves.fallStraight;
                if (isGroundBouncing && myControlsScript.moveSetScript.basicMoves.fallingFromGroundBounce.clip1 != null)
                {
                    airAnimation = myControlsScript.moveSetScript.basicMoves.fallingFromGroundBounce;
                }
                else if (isWallBouncing && myControlsScript.moveSetScript.basicMoves.airWallBounce.clip1 != null)
                {
                }
                else
                {
                    if (myControlsScript.currentSubState == PlayerSubState.stunned)
                    {
                        if (myControlsScript.moveSetScript.basicMoves.getHitKnockBack.clip1 != null &&
                            Mathf.Abs(horizontalForce) > CSceneManager.Instance.comboOptions.knockBackMinForce &&
                            CSceneManager.Instance.comboOptions.knockBackMinForce > 0)
                        {
                            airAnimation = myControlsScript.moveSetScript.basicMoves.getHitKnockBack;
                        }
                        else
                        {
                            airAnimation = myControlsScript.moveSetScript.basicMoves.getHitAir;
                            if (myControlsScript.moveSetScript.basicMoves.getHitAir.clip1 == null)
                            {
                                Debug.LogError("'getHitAir' animation clip not found. you have input animation at MoveSetScript -> BasicMoves -> F'getHitAir' clip1 ");
                            }
                        }
                    }
                    else if (myControlsScript.isAirRecovering && (myControlsScript.moveSetScript.basicMoves.airRecovery.clip1 != null))
                    {
                    }
                    else
                    {
                        // late add foward jump and back jump

                        if (myControlsScript.moveSetScript.basicMoves.fallStraight.clip1 == null)
                        {
                            Debug.LogError("'fallStraight' animation clip not found. you have input animation at MoveSetScript -> BasicMoves -> 'fallStraight' clip1 ");
                        }

                        airAnimation = myControlsScript.moveSetScript.basicMoves.fallStraight;
                    }
                }

                if (!isOverrideAirAnimation && !myControlsScript.moveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    myControlsScript.moveSetScript.PlayBasicMove(airAnimation);

                    if (airAnimation.isAutoSpeed)
                    {
                        myControlsScript.moveSetScript.SetAnimationNomalizedSpeed(airAnimation.name, (myControlsScript.moveSetScript.GetAnimationLength(airAnimation.name) / airTime));
                    }
                }
            }
        }
        if (horizontalForce == 0 && verticalForce == 0)
        {
            moveDirection = 0;
        }
    }
Пример #15
0
 private string GetHitAnimation(BasicMoveInfo hitMove, Hit hit)
 {
     if (hit.hitStrength == HitStrengh.Weak) return hitMove.name;
     if (hitMove.clip2 != null && hit.hitStrength == HitStrengh.Medium) return myMoveSetScript.GetAnimationString(hitMove, 2);
     if (hitMove.clip3 != null && hit.hitStrength == HitStrengh.Heavy) return myMoveSetScript.GetAnimationString(hitMove, 3);
     if (hitMove.clip4 != null && hit.hitStrength == HitStrengh.Custom1) return myMoveSetScript.GetAnimationString(hitMove, 4);
     if (hitMove.clip5 != null && hit.hitStrength == HitStrengh.Custom2) return myMoveSetScript.GetAnimationString(hitMove, 5);
     if (hitMove.clip6 != null && hit.hitStrength == HitStrengh.Custom3) return myMoveSetScript.GetAnimationString(hitMove, 6);
     return hitMove.name;
 }
Пример #16
0
 public void PlayBasicMove(BasicMoveInfo basicMove, string clipName, bool replay)
 {
     PlayBasicMove(basicMove, clipName, playerScript.myCharacterInfo.blendingTime, replay);
 }
Пример #17
0
    public void ApplyForces(MoveInfo move)
    {
        if (freeze)
        {
            return;
        }

        controlScript.normalizedJumpArc = (Fix64)1 - ((verticalForce + verticalTotalForce) / (verticalTotalForce * 2));


        Fix64 appliedFriction = (moveDirection != 0 || controlScript.myInfo.physics.highMovingFriction) ?
                                UFE.config.selectedStage._groundFriction : controlScript.myInfo.physics._friction;


        if (move != null && move.ignoreFriction)
        {
            appliedFriction = 0;
        }

        if (controlScript.activePullIn != null)
        {
            worldTransform.position = FPVector.Lerp(worldTransform.position,
                                                    controlScript.activePullIn.position,
                                                    UFE.fixedDeltaTime * controlScript.activePullIn.speed);

            if (controlScript.activePullIn.forceStand && !IsGrounded())
            {
                ForceGrounded();
            }

            if (FPVector.Distance(controlScript.activePullIn.position, worldTransform.position) <= controlScript.activePullIn._targetDistance ||
                controlScript.currentSubState != SubStates.Stunned)
            {
                controlScript.activePullIn = null;
            }
        }
        else
        {
            if (!IsGrounded())
            {
                appliedFriction = 0;
                if (verticalForce == 0)
                {
                    verticalForce = -.1;
                }
            }

            if (horizontalForce != 0 && !isTakingOff)
            {
                if (horizontalForce > 0)
                {
                    horizontalForce -= appliedFriction * UFE.fixedDeltaTime;
                    horizontalForce  = FPMath.Max(0, horizontalForce);
                }
                else if (horizontalForce < 0)
                {
                    horizontalForce += appliedFriction * UFE.fixedDeltaTime;
                    horizontalForce  = FPMath.Min(0, horizontalForce);
                }

                Fix64 leftCameraBounds  = opWorldTransform.position.x - (UFE.config.cameraOptions._maxDistance / 2);
                Fix64 rightCameraBounds = opWorldTransform.position.x + (UFE.config.cameraOptions._maxDistance / 2);

                bool bouncingOnCamera = false;
                if (controlScript.currentHit != null &&
                    controlScript.currentHit.bounceOnCameraEdge &&
                    (worldTransform.position.x <= leftCameraBounds ||
                     worldTransform.position.x >= rightCameraBounds))
                {
                    bouncingOnCamera = true;
                }


                if (wallBounceTimes < UFE.config.wallBounceOptions._maximumBounces &&
                    controlScript.currentSubState == SubStates.Stunned &&
                    controlScript.currentState != PossibleStates.Down &&
                    UFE.config.wallBounceOptions.bounceForce != Sizes.None &&
                    FPMath.Abs(horizontalForce) >= UFE.config.wallBounceOptions._minimumBounceForce &&
                    (worldTransform.position.x <= UFE.config.selectedStage._leftBoundary ||
                     worldTransform.position.x >= UFE.config.selectedStage._rightBoundary || bouncingOnCamera) &&
                    controlScript.currentHit != null && controlScript.currentHit.wallBounce &&
                    !isWallBouncing)
                {
                    if (controlScript.currentHit.overrideForcesOnWallBounce)
                    {
                        if (controlScript.currentHit.resetWallBounceHorizontalPush)
                        {
                            horizontalForce = 0;
                        }
                        if (controlScript.currentHit.resetWallBounceVerticalPush)
                        {
                            verticalForce = 0;
                        }

                        Fix64 addedH = -controlScript.currentHit._wallBouncePushForce.x;
                        Fix64 addedV = controlScript.currentHit._wallBouncePushForce.y;

                        AddForce(new FPVector(addedH, addedV, 0), controlScript.mirror);
                    }
                    else
                    {
                        if (UFE.config.wallBounceOptions.bounceForce == Sizes.Small)
                        {
                            horizontalForce /= -1.4;
                        }
                        else if (UFE.config.wallBounceOptions.bounceForce == Sizes.Medium)
                        {
                            horizontalForce /= -1.2;
                        }
                        else if (UFE.config.wallBounceOptions.bounceForce == Sizes.High)
                        {
                            horizontalForce *= -1;
                        }
                    }

                    wallBounceTimes++;

                    if (verticalForce > 0 || !IsGrounded())
                    {
                        if (moveSetScript.basicMoves.airWallBounce.animMap[0].clip != null)
                        {
                            controlScript.currentHitAnimation = moveSetScript.basicMoves.airWallBounce.name;
                        }
                    }
                    else
                    {
                        if (controlScript.currentHit.knockOutOnWallBounce)
                        {
                            moveSetScript.PlayBasicMove(moveSetScript.basicMoves.standingWallBounceKnockdown);
                            controlScript.currentHitAnimation = moveSetScript.basicMoves.standingWallBounceKnockdown.name;
                        }
                        else
                        {
                            moveSetScript.PlayBasicMove(moveSetScript.basicMoves.standingWallBounce);
                            controlScript.currentHitAnimation = moveSetScript.basicMoves.standingWallBounce.name;
                        }
                    }

                    if (UFE.config.wallBounceOptions.bouncePrefab != null)
                    {
                        GameObject pTemp = UFE.SpawnGameObject(UFE.config.wallBounceOptions.bouncePrefab, transform.position, Quaternion.identity, Mathf.RoundToInt(UFE.config.wallBounceOptions.bounceKillTime * UFE.config.fps));
                        pTemp.transform.rotation = UFE.config.wallBounceOptions.bouncePrefab.transform.rotation;
                        if (UFE.config.wallBounceOptions.sticky)
                        {
                            pTemp.transform.parent = transform;
                        }
                        //pTemp.transform.localPosition = Vector3.zero;
                    }

                    if (UFE.config.wallBounceOptions.shakeCamOnBounce)
                    {
                        controlScript.shakeCameraDensity = UFE.config.wallBounceOptions._shakeDensity;
                    }

                    UFE.PlaySound(UFE.config.wallBounceOptions.bounceSound);
                    isWallBouncing = true;
                }

                worldTransform.Translate((horizontalForce * UFE.fixedDeltaTime), 0, 0);
            }

            if (move == null || (move != null && !move.ignoreGravity))
            {
                if ((verticalForce < 0 && !IsGrounded()) || verticalForce > 0)
                {
                    verticalForce -= appliedGravity * UFE.fixedDeltaTime;
                    worldTransform.Translate((moveDirection * UFE.fixedDeltaTime) * controlScript.myInfo.physics._jumpDistance, (verticalForce * UFE.fixedDeltaTime), 0);
                }
                else if (verticalForce < 0 &&
                         IsGrounded() &&
                         controlScript.currentSubState != SubStates.Stunned)
                {
                    verticalForce = 0;
                }
            }
        }

        Fix64 minDist = opWorldTransform.position.x - UFE.config.cameraOptions._maxDistance;
        Fix64 maxDist = opWorldTransform.position.x + UFE.config.cameraOptions._maxDistance;

        worldTransform.position = new FPVector(FPMath.Clamp(worldTransform.position.x, minDist, maxDist), worldTransform.position.y, worldTransform.position.z);

        worldTransform.position = new FPVector(
            FPMath.Clamp(worldTransform.position.x,
                         UFE.config.selectedStage._leftBoundary,
                         UFE.config.selectedStage._rightBoundary),
            FPMath.Max(worldTransform.position.y, UFE.config.selectedStage._groundHeight),
            worldTransform.position.z);

        if (controlScript.currentState == PossibleStates.Down)
        {
            return;
        }

        if (IsGrounded() && controlScript.currentState != PossibleStates.Down)
        {
            if (verticalTotalForce != 0)
            {
                if (groundBounceTimes < UFE.config.groundBounceOptions._maximumBounces &&
                    controlScript.currentSubState == SubStates.Stunned &&
                    UFE.config.groundBounceOptions.bounceForce != Sizes.None &&
                    verticalForce <= -UFE.config.groundBounceOptions._minimumBounceForce &&
                    controlScript.currentHit.groundBounce)
                {
                    if (controlScript.currentHit.overrideForcesOnGroundBounce)
                    {
                        if (controlScript.currentHit.resetGroundBounceHorizontalPush)
                        {
                            horizontalForce = 0;
                        }
                        if (controlScript.currentHit.resetGroundBounceVerticalPush)
                        {
                            verticalForce = 0;
                        }

                        Fix64 addedH = controlScript.currentHit._groundBouncePushForce.x;
                        Fix64 addedV = controlScript.currentHit._groundBouncePushForce.y;

                        AddForce(new FPVector(addedH, addedV, 0), controlScript.mirror);
                    }
                    else
                    {
                        if (UFE.config.groundBounceOptions.bounceForce == Sizes.Small)
                        {
                            AddForce(new FPVector(0, (-verticalForce / 2.4), 0), 1);
                        }
                        else if (UFE.config.groundBounceOptions.bounceForce == Sizes.Medium)
                        {
                            AddForce(new FPVector(0, (-verticalForce / 1.8), 0), 1);
                        }
                        else if (UFE.config.groundBounceOptions.bounceForce == Sizes.High)
                        {
                            AddForce(new FPVector(0, (-verticalForce / 1.2), 0), 1);
                        }
                    }

                    groundBounceTimes++;

                    if (!isGroundBouncing)
                    {
                        controlScript.stunTime += airTime + UFE.config.knockDownOptions.air._knockedOutTime;

                        if (moveSetScript.basicMoves.groundBounce.animMap[0].clip != null)
                        {
                            controlScript.currentHitAnimation = moveSetScript.basicMoves.groundBounce.name;
                            moveSetScript.PlayBasicMove(moveSetScript.basicMoves.groundBounce);
                        }

                        if (UFE.config.groundBounceOptions.bouncePrefab != null)
                        {
                            GameObject pTemp = UFE.SpawnGameObject(UFE.config.groundBounceOptions.bouncePrefab, transform.position, Quaternion.identity, Mathf.RoundToInt(UFE.config.groundBounceOptions.bounceKillTime * UFE.config.fps));
                            pTemp.transform.rotation = UFE.config.groundBounceOptions.bouncePrefab.transform.rotation;
                            if (UFE.config.groundBounceOptions.sticky)
                            {
                                pTemp.transform.parent = transform;
                            }
                            //pTemp.transform.localPosition = Vector3.zero;
                        }
                        if (UFE.config.groundBounceOptions.shakeCamOnBounce)
                        {
                            controlScript.shakeCameraDensity = UFE.config.groundBounceOptions._shakeDensity;
                        }
                        UFE.PlaySound(UFE.config.groundBounceOptions.bounceSound);
                        isGroundBouncing = true;
                    }
                    return;
                }
                verticalTotalForce          = 0;
                airTime                     = 0;
                moveSetScript.totalAirMoves = 0;
                currentAirJumps             = 0;

                BasicMoveInfo airAnimation  = null;
                string        downAnimation = "";

                isGroundBouncing  = false;
                groundBounceTimes = 0;

                Fix64 animationSpeed = 0;
                Fix64 delayTime      = 0;
                if (controlScript.currentMove != null && controlScript.currentMove.hitAnimationOverride)
                {
                    return;
                }
                if (controlScript.currentSubState == SubStates.Stunned)
                {
                    if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.airRecovery.name))
                    {
                        controlScript.stunTime     = 0;
                        controlScript.currentState = PossibleStates.Stand;
                    }
                    else
                    {
                        controlScript.stunTime = UFE.config.knockDownOptions.air._knockedOutTime + UFE.config.knockDownOptions.air._standUpTime;

                        // Hit Clips
                        if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.getHitKnockBack.name) &&
                            moveSetScript.basicMoves.getHitKnockBack.animMap[1].clip != null)
                        {
                            airAnimation  = moveSetScript.basicMoves.getHitKnockBack;
                            downAnimation = moveSetScript.GetAnimationString(airAnimation, 2);
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.getHitHighKnockdown.name) &&
                                 moveSetScript.basicMoves.getHitHighKnockdown.animMap[1].clip != null)
                        {
                            airAnimation           = moveSetScript.basicMoves.getHitHighKnockdown;
                            downAnimation          = moveSetScript.GetAnimationString(airAnimation, 2);
                            controlScript.stunTime = UFE.config.knockDownOptions.high._knockedOutTime + UFE.config.knockDownOptions.high._standUpTime;
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.getHitMidKnockdown.name) &&
                                 moveSetScript.basicMoves.getHitMidKnockdown.animMap[1].clip != null)
                        {
                            airAnimation           = moveSetScript.basicMoves.getHitMidKnockdown;
                            downAnimation          = moveSetScript.GetAnimationString(airAnimation, 2);
                            controlScript.stunTime = UFE.config.knockDownOptions.highLow._knockedOutTime + UFE.config.knockDownOptions.highLow._standUpTime;
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.getHitSweep.name) &&
                                 moveSetScript.basicMoves.getHitSweep.animMap[1].clip != null)
                        {
                            airAnimation           = moveSetScript.basicMoves.getHitSweep;
                            downAnimation          = moveSetScript.GetAnimationString(airAnimation, 2);
                            controlScript.stunTime = UFE.config.knockDownOptions.sweep._knockedOutTime + UFE.config.knockDownOptions.sweep._standUpTime;
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.getHitCrumple.name) &&
                                 moveSetScript.basicMoves.getHitCrumple.animMap[1].clip != null)
                        {
                            airAnimation  = moveSetScript.basicMoves.getHitCrumple;
                            downAnimation = moveSetScript.GetAnimationString(airAnimation, 2);

                            // Stage Clips
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.standingWallBounceKnockdown.name) &&
                                 moveSetScript.basicMoves.standingWallBounceKnockdown.animMap[1].clip != null)
                        {
                            airAnimation           = moveSetScript.basicMoves.standingWallBounceKnockdown;
                            downAnimation          = moveSetScript.GetAnimationString(airAnimation, 2);
                            controlScript.stunTime = UFE.config.knockDownOptions.wallbounce._knockedOutTime + UFE.config.knockDownOptions.wallbounce._standUpTime;
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.airWallBounce.name) &&
                                 moveSetScript.basicMoves.airWallBounce.animMap[1].clip != null)
                        {
                            airAnimation           = moveSetScript.basicMoves.airWallBounce;
                            downAnimation          = moveSetScript.GetAnimationString(airAnimation, 2);
                            controlScript.stunTime = UFE.config.knockDownOptions.wallbounce._knockedOutTime + UFE.config.knockDownOptions.wallbounce._standUpTime;

                            // Fall Clips
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.fallingFromAirHit.name) &&
                                 moveSetScript.basicMoves.fallingFromAirHit.animMap[1].clip != null)
                        {
                            airAnimation  = moveSetScript.basicMoves.fallingFromAirHit;
                            downAnimation = moveSetScript.GetAnimationString(airAnimation, 2);
                        }
                        else if (moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.fallingFromGroundBounce.name) &&
                                 moveSetScript.basicMoves.fallingFromGroundBounce.animMap[1].clip != null)
                        {
                            airAnimation  = moveSetScript.basicMoves.fallingFromGroundBounce;
                            downAnimation = moveSetScript.GetAnimationString(airAnimation, 2);
                        }
                        else
                        {
                            if (moveSetScript.basicMoves.fallDown.animMap[0].clip == null)
                            {
                                Debug.LogError("Fall Down From Air Hit animation not found! Make sure you have it set on Character -> Basic Moves -> Fall Down From Air Hit");
                            }

                            airAnimation  = moveSetScript.basicMoves.fallDown;
                            downAnimation = moveSetScript.GetAnimationString(airAnimation, 1);
                        }

                        controlScript.currentState = PossibleStates.Down;
                    }
                }
                else if (controlScript.currentState != PossibleStates.Stand)
                {
                    if (moveSetScript.basicMoves.landing.animMap[0].clip != null &&
                        (controlScript.currentMove == null ||
                         (controlScript.currentMove != null && controlScript.currentMove.cancelMoveWheLanding)))
                    {
                        controlScript.isAirRecovering = false;
                        airAnimation  = moveSetScript.basicMoves.landing;
                        moveDirection = 0;
                        isLanding     = true;
                        controlScript.KillCurrentMove();
                        delayTime = (Fix64)controlScript.myInfo.physics.landingDelay / (Fix64)UFE.config.fps;
                        UFE.DelaySynchronizedAction(ResetLanding, delayTime);

                        if (airAnimation.autoSpeed)
                        {
                            animationSpeed = moveSetScript.GetAnimationLength(airAnimation.name) / delayTime;
                        }
                    }

                    if (controlScript.currentState != PossibleStates.Crouch)
                    {
                        controlScript.currentState = PossibleStates.Stand;
                    }
                }

                if (airAnimation != null)
                {
                    if (downAnimation != "")
                    {
                        moveSetScript.PlayBasicMove(airAnimation, downAnimation);
                    }
                    else
                    {
                        moveSetScript.PlayBasicMove(airAnimation);
                    }

                    if (animationSpeed != 0)
                    {
                        moveSetScript.SetAnimationSpeed(airAnimation.name, animationSpeed);
                    }
                }
            }

            if (controlScript.currentSubState != SubStates.Stunned &&
                !controlScript.isBlocking && !controlScript.blockStunned &&
                move == null &&
                !isTakingOff &&
                !isLanding &&
                controlScript.currentState == PossibleStates.Stand)
            {
                if (moveDirection > 0 && controlScript.mirror == -1 ||
                    moveDirection < 0 && controlScript.mirror == 1)
                {
                    if (moveSetScript.basicMoves.moveForward.animMap[0].clip == null)
                    {
                        Debug.LogError("Move Forward animation not found! Make sure you have it set on Character -> Basic Moves -> Move Forward");
                    }
                    if (!moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.moveForward.name))
                    {
                        moveSetScript.PlayBasicMove(moveSetScript.basicMoves.moveForward);
                    }
                }
                else if (moveDirection > 0 && controlScript.mirror == 1 ||
                         moveDirection < 0 && controlScript.mirror == -1)
                {
                    if (moveSetScript.basicMoves.moveBack.animMap[0].clip == null)
                    {
                        Debug.LogError("Move Back animation not found! Make sure you have it set on Character -> Basic Moves -> Move Back");
                    }
                    if (!moveSetScript.IsAnimationPlaying(moveSetScript.basicMoves.moveBack.name))
                    {
                        moveSetScript.PlayBasicMove(moveSetScript.basicMoves.moveBack);
                    }
                }
            }
        }
        else if (verticalForce > 0 || !IsGrounded())
        {
            if (move != null && controlScript.currentState == PossibleStates.Stand)
            {
                controlScript.currentState = PossibleStates.NeutralJump;
            }
            if (move == null && verticalForce / verticalTotalForce > 0 && verticalForce / verticalTotalForce <= 1)
            {
                if (isGroundBouncing)
                {
                    return;
                }

                if (moveDirection == 0)
                {
                    controlScript.currentState = PossibleStates.NeutralJump;
                }
                else
                {
                    if (moveDirection > 0 && controlScript.mirror == -1 ||
                        moveDirection < 0 && controlScript.mirror == 1)
                    {
                        controlScript.currentState = PossibleStates.ForwardJump;
                    }

                    if (moveDirection > 0 && controlScript.mirror == 1 ||
                        moveDirection < 0 && controlScript.mirror == -1)
                    {
                        controlScript.currentState = PossibleStates.BackJump;
                    }
                }

                BasicMoveInfo airAnimation = moveSetScript.basicMoves.jumpStraight;
                if (controlScript.currentSubState == SubStates.Stunned)
                {
                    if (isWallBouncing && moveSetScript.basicMoves.airWallBounce.animMap[0].clip != null)
                    {
                        airAnimation = moveSetScript.basicMoves.airWallBounce;
                    }
                    else if (moveSetScript.basicMoves.getHitKnockBack.animMap[0].clip != null &&
                             FPMath.Abs(horizontalForce) > UFE.config.comboOptions._knockBackMinForce &&
                             UFE.config.comboOptions._knockBackMinForce > 0)
                    {
                        airAnimation = moveSetScript.basicMoves.getHitKnockBack;
                        airTime     *= (Fix64)2;
                    }
                    else
                    {
                        if (moveSetScript.basicMoves.getHitAir.animMap[0].clip == null)
                        {
                            Debug.LogError("Get Hit Air animation not found! Make sure you have it set on Character -> Basic Moves -> Get Hit Air");
                        }

                        airAnimation = moveSetScript.basicMoves.getHitAir;
                    }
                    if (overrideStunAnimation != null)
                    {
                        airAnimation = overrideStunAnimation;
                    }
                }
                else if (controlScript.isAirRecovering &&
                         (moveSetScript.basicMoves.airRecovery.animMap[0].clip != null))
                {
                    airAnimation = moveSetScript.basicMoves.airRecovery;
                }
                else
                {
                    if (moveSetScript.basicMoves.jumpForward.animMap[0].clip != null && controlScript.currentState == PossibleStates.ForwardJump)
                    {
                        airAnimation = moveSetScript.basicMoves.jumpForward;
                    }
                    else if (moveSetScript.basicMoves.jumpBack.animMap[0].clip != null && controlScript.currentState == PossibleStates.BackJump)
                    {
                        airAnimation = moveSetScript.basicMoves.jumpBack;
                    }
                    else
                    {
                        if (moveSetScript.basicMoves.jumpStraight.animMap[0].clip == null)
                        {
                            Debug.LogError("Jump animation not found! Make sure you have it set on Character -> Basic Moves -> Jump Straight");
                        }

                        airAnimation = moveSetScript.basicMoves.jumpStraight;
                    }
                }

                if (!overrideAirAnimation && !moveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    moveSetScript.PlayBasicMove(airAnimation);

                    if (airAnimation.autoSpeed)
                    {
                        moveSetScript.SetAnimationNormalizedSpeed(airAnimation.name, (moveSetScript.GetAnimationLength(airAnimation.name) / airTime));
                    }
                }
            }
            else if (move == null && verticalForce / verticalTotalForce <= 0)
            {
                BasicMoveInfo airAnimation = moveSetScript.basicMoves.fallStraight;
                if (isGroundBouncing && moveSetScript.basicMoves.fallingFromGroundBounce.animMap[0].clip != null)
                {
                    airAnimation = moveSetScript.basicMoves.fallingFromGroundBounce;
                }
                else if (isWallBouncing && moveSetScript.basicMoves.airWallBounce.animMap[0].clip != null)
                {
                    airAnimation = moveSetScript.basicMoves.airWallBounce;
                }
                else
                {
                    if (controlScript.currentSubState == SubStates.Stunned)
                    {
                        if (moveSetScript.basicMoves.getHitKnockBack.animMap[0].clip != null &&
                            FPMath.Abs(horizontalForce) > UFE.config.comboOptions._knockBackMinForce &&
                            UFE.config.comboOptions._knockBackMinForce > 0)
                        {
                            airAnimation = moveSetScript.basicMoves.getHitKnockBack;
                        }
                        else
                        {
                            airAnimation = moveSetScript.basicMoves.getHitAir;
                            if (moveSetScript.basicMoves.fallingFromAirHit.animMap[0].clip != null)
                            {
                                airAnimation = moveSetScript.basicMoves.fallingFromAirHit;
                            }
                            else if (moveSetScript.basicMoves.getHitAir.animMap[0].clip == null)
                            {
                                Debug.LogError("Air Juggle animation not found! Make sure you have it set on Character -> Basic Moves -> Air Juggle");
                            }
                        }
                        if (overrideStunAnimation != null)
                        {
                            airAnimation = overrideStunAnimation;
                        }
                    }
                    else if (controlScript.isAirRecovering &&
                             (moveSetScript.basicMoves.airRecovery.animMap[0].clip != null))
                    {
                        airAnimation = moveSetScript.basicMoves.airRecovery;
                    }
                    else
                    {
                        if (moveSetScript.basicMoves.fallForward.animMap[0].clip != null && controlScript.currentState == PossibleStates.ForwardJump)
                        {
                            airAnimation = moveSetScript.basicMoves.fallForward;
                        }
                        else if (moveSetScript.basicMoves.fallBack.animMap[0].clip != null && controlScript.currentState == PossibleStates.BackJump)
                        {
                            airAnimation = moveSetScript.basicMoves.fallBack;
                        }
                        else
                        {
                            if (moveSetScript.basicMoves.fallStraight.animMap[0].clip == null)
                            {
                                Debug.LogError("Fall animation not found! Make sure you have it set on Character -> Basic Moves -> Fall Straight");
                            }

                            airAnimation = moveSetScript.basicMoves.fallStraight;
                        }
                    }
                }

                if (!overrideAirAnimation && !moveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    moveSetScript.PlayBasicMove(airAnimation);

                    if (airAnimation.autoSpeed)
                    {
                        moveSetScript.SetAnimationNormalizedSpeed(airAnimation.name, (moveSetScript.GetAnimationLength(airAnimation.name) / airTime));
                    }
                }
            }
        }
        if (horizontalForce == 0 && verticalForce == 0)
        {
            moveDirection = 0;
        }
    }
Пример #18
0
    public void applyForces(MoveInfo move)
    {
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text = "isBouncing = " + isBouncing + "\n";
        if (freeze)
        {
            return;
        }

        float appliedFriction = (moveDirection != 0 || myControlsScript.myInfo.physics.highMovingFriction) ? 100 : myControlsScript.myInfo.physics.friction;

        if (!isGrounded())
        {
            appliedFriction = 0;
            if (verticalForce == 0)
            {
                verticalForce = -.1f;
            }
        }

        if (horizontalForce != 0)
        {
            if (horizontalForce > 0)
            {
                horizontalForce -= appliedFriction * Time.deltaTime;
                horizontalForce  = Mathf.Max(0, horizontalForce);
            }
            else if (horizontalForce < 0)
            {
                horizontalForce += appliedFriction * Time.deltaTime;
                horizontalForce  = Mathf.Min(0, horizontalForce);
            }
            transform.Translate(horizontalForce * Time.deltaTime, 0, 0);
        }

        if (move == null || (move != null && !move.ignoreGravity))
        {
            if ((verticalForce < 0 && !isGrounded()) || verticalForce > 0)
            {
                verticalForce -= appliedGravity * Time.deltaTime;
                transform.Translate(moveDirection * myControlsScript.myInfo.physics.jumpDistance * Time.deltaTime, verticalForce * Time.deltaTime, 0);
            }
            else if (verticalForce < 0 && isGrounded())
            {
                currentAirJumps = 0;
                verticalForce   = 0;
            }
        }

        /*if (myControlsScript.debugger != null) {
         *      myControlsScript.debugger.text = "isBouncing = " + isBouncing + "\n";
         *      myControlsScript.debugger.text += "controlsScript.stunTime = " + controlsScript.stunTime + "\n";
         *      myControlsScript.debugger.text += "Animations:\n";
         *      foreach(AnimationState animState in character.animation){
         *              if (character.animation.IsPlaying(animState.name)){
         *                      myControlsScript.debugger.text += "<color=#003300>"+ animState.name +"</color>\n";
         *                      myControlsScript.debugger.text += "<color=#003300>"+ animState.speed +"</color>\n";
         *              }
         *      }
         * }*/

        if (isGrounded())
        {
            if (verticalTotalForce != 0)
            {
                if (bounceTimes < UFE.config.bounceOptions.maximumBounces && myControlsScript.stunned &&
                    UFE.config.bounceOptions.bounceForce != Sizes.None &&
                    verticalForce <= -UFE.config.bounceOptions.minimumBounceForce)
                {
                    if (!UFE.config.bounceOptions.bounceHitBoxes)
                    {
                        myHitBoxesScript.hideHitBoxes();
                    }
                    if (UFE.config.bounceOptions.bounceForce == Sizes.Small)
                    {
                        addForce(new Vector2(0, -verticalForce / 2.4f), 1);
                    }
                    else if (UFE.config.bounceOptions.bounceForce == Sizes.Medium)
                    {
                        addForce(new Vector2(0, -verticalForce / 1.8f), 1);
                    }
                    else if (UFE.config.bounceOptions.bounceForce == Sizes.High)
                    {
                        addForce(new Vector2(0, -verticalForce / 1.2f), 1);
                    }
                    bounceTimes++;
                    if (!isBouncing)
                    {
                        myControlsScript.stunTime += airTime + UFE.config.knockDownOptions.knockedOutTime;
                        myMoveSetScript.playBasicMove(myMoveSetScript.basicMoves.bounce);
                        if (UFE.config.bounceOptions.bouncePrefab != null)
                        {
                            GameObject pTemp = (GameObject)Instantiate(UFE.config.bounceOptions.bouncePrefab);
                            pTemp.transform.parent        = transform;
                            pTemp.transform.localPosition = Vector3.zero;
                            Destroy(pTemp, 3);
                        }
                        isBouncing = true;
                    }
                    return;
                }
                verticalTotalForce            = 0;
                airTime                       = 0;
                myMoveSetScript.totalAirMoves = 0;
                BasicMoveInfo airAnimation = null;
                if (myControlsScript.stunned)
                {
                    myControlsScript.stunTime = UFE.config.knockDownOptions.knockedOutTime + UFE.config.knockDownOptions.getUpTime;
                    airAnimation = myMoveSetScript.basicMoves.fallDown;
                    myControlsScript.currentState = PossibleStates.Down;
                    if (!UFE.config.knockDownOptions.knockedOutHitBoxes)
                    {
                        myHitBoxesScript.hideHitBoxes();
                    }
                }
                else
                {
                    if ((myControlsScript.currentMove != null && myControlsScript.currentMove.cancelMoveWheLanding) ||
                        myControlsScript.currentMove == null)
                    {
                        airAnimation = myMoveSetScript.basicMoves.landing;
                        myControlsScript.KillCurrentMove();
                    }
                    myControlsScript.currentState = PossibleStates.Stand;
                }
                isBouncing  = false;
                bounceTimes = 0;
                if (airAnimation != null && !character.GetComponent <Animation>().IsPlaying(airAnimation.name))
                {
                    myMoveSetScript.playBasicMove(airAnimation);
                }
            }

            if (!myControlsScript.stunned && move == null)
            {
                if (moveDirection < 0 && myControlsScript.mirror == -1 ||
                    moveDirection > 0 && myControlsScript.mirror == 1)
                {
                    myMoveSetScript.playBasicMove(myMoveSetScript.basicMoves.moveForward);
                }

                if (moveDirection < 0 && myControlsScript.mirror == 1 ||
                    moveDirection > 0 && myControlsScript.mirror == -1)
                {
                    myMoveSetScript.playBasicMove(myMoveSetScript.basicMoves.moveBack);
                }
            }
        }
        else if (verticalForce > 0 || !isGrounded())
        {
            if (move != null && myControlsScript.currentState == PossibleStates.Stand)
            {
                myControlsScript.currentState = PossibleStates.StraightJump;
            }
            if (move == null && verticalForce / verticalTotalForce > 0 && verticalForce / verticalTotalForce <= 1)
            {
                if (isBouncing)
                {
                    return;
                }
                BasicMoveInfo airAnimation = myControlsScript.stunned?
                                             myMoveSetScript.basicMoves.getHitAir : myMoveSetScript.basicMoves.jumping;

                if (moveDirection == 0)
                {
                    myControlsScript.currentState = PossibleStates.StraightJump;
                }
                else
                {
                    if (moveDirection < 0 && myControlsScript.mirror == -1 ||
                        moveDirection > 0 && myControlsScript.mirror == 1)
                    {
                        myControlsScript.currentState = PossibleStates.ForwardJump;
                    }

                    if (moveDirection < 0 && myControlsScript.mirror == 1 ||
                        moveDirection > 0 && myControlsScript.mirror == -1)
                    {
                        myControlsScript.currentState = PossibleStates.BackJump;
                    }
                }

                if (!character.GetComponent <Animation>().IsPlaying(airAnimation.name))
                {
                    //character.animation[airAnimation].speed = character.animation[airAnimation].length * (appliedGravity/verticalTotalForce);
                    character.GetComponent <Animation>()[airAnimation.name].speed = character.GetComponent <Animation>()[airAnimation.name].length / airTime;
                    myMoveSetScript.playBasicMove(airAnimation);
                }
            }
            else if (move == null && verticalForce / verticalTotalForce <= 0)
            {
                BasicMoveInfo airAnimation;
                if (isBouncing)
                {
                    airAnimation = myMoveSetScript.basicMoves.fallingFromBounce;
                }
                else
                {
                    airAnimation = myControlsScript.stunned?
                                   myMoveSetScript.basicMoves.getHitAir : myMoveSetScript.basicMoves.falling;
                }

                if (!character.GetComponent <Animation>().IsPlaying(airAnimation.name))
                {
                    //character.animation[airAnimation].speed = character.animation[airAnimation].length * (appliedGravity/verticalTotalForce);
                    //character.animation.CrossFade(airAnimation, GlobalScript.getCurrentMoveSet(myControlsScript.myInfo).interpolationSpeed);
                    character.GetComponent <Animation>()[airAnimation.name].speed = character.GetComponent <Animation>()[airAnimation.name].length / airTime;
                    myMoveSetScript.playBasicMove(airAnimation);
                }
            }
        }
        if (horizontalForce == 0 && verticalForce == 0)
        {
            moveDirection = 0;
        }

        if (UFE.normalizedCam)
        {
            Vector3 cameraLeftBounds  = Camera.main.ViewportToWorldPoint(new Vector3(0, 0, -Camera.main.transform.position.z - 10));
            Vector3 cameraRightBounds = Camera.main.ViewportToWorldPoint(new Vector3(1, 0, -Camera.main.transform.position.z - 10));

            transform.position = new Vector3(
                Mathf.Clamp(transform.position.x, cameraLeftBounds.x, cameraRightBounds.x),
                transform.position.y,
                transform.position.z);
        }

        transform.position = new Vector3(
            Mathf.Clamp(transform.position.x,
                        UFE.config.selectedStage.leftBoundary,
                        UFE.config.selectedStage.rightBoundary),
            transform.position.y,
            transform.position.z);
    }
Пример #19
0
    public void ApplyForces(MoveInfo move)
    {
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text = "";
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text = "IsGrounded = " + IsGrounded() + "\n";
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text += "verticalForce = " + verticalForce + "\n";
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text += "verticalTotalForce = " + verticalTotalForce + "\n";
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text += "normalizedJumpArc = " + myControlsScript.normalizedJumpArc + "\n";
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text += "isTakingOff = " + isTakingOff + "\n";
        //if (myControlsScript.debugger != null) myControlsScript.debugger.text += "myControlsScript.currentState = " + myControlsScript.currentState + "\n";

        if (freeze)
        {
            return;
        }

        myControlsScript.normalizedJumpArc = 1 - ((verticalForce + verticalTotalForce) / (verticalTotalForce * 2));

        float appliedFriction = (moveDirection != 0 || myControlsScript.myInfo.physics.highMovingFriction) ?
                                UFE.config.selectedStage.groundFriction : myControlsScript.myInfo.physics.friction;


        if (move != null && move.ignoreFriction)
        {
            appliedFriction = 0;
        }

        if (myControlsScript.activePullIn != null)
        {
            transform.position = Vector3.Lerp(transform.position,
                                              myControlsScript.activePullIn.position,
                                              Time.fixedDeltaTime * myControlsScript.activePullIn.speed);

            if (myControlsScript.activePullIn.forceStand && !IsGrounded())
            {
                ForceGrounded();
            }

            if (Vector3.Distance(myControlsScript.activePullIn.position, transform.position) <= myControlsScript.activePullIn.targetDistance ||
                myControlsScript.currentSubState != SubStates.Stunned)
            {
                myControlsScript.activePullIn = null;
            }

            //if (transform.position.z != 0) transform.Translate(new Vector3(0, 0, -transform.position.z));
        }
        else
        {
            if (!IsGrounded())
            {
                appliedFriction = 0;
                if (verticalForce == 0)
                {
                    verticalForce = -.1f;
                }
            }

            if (horizontalForce != 0 && !isTakingOff)
            {
                if (horizontalForce > 0)
                {
                    horizontalForce -= appliedFriction * Time.fixedDeltaTime;
                    horizontalForce  = Mathf.Max(0, horizontalForce);
                }
                else if (horizontalForce < 0)
                {
                    horizontalForce += appliedFriction * Time.fixedDeltaTime;
                    horizontalForce  = Mathf.Min(0, horizontalForce);
                }


                transform.Translate(horizontalForce * Time.fixedDeltaTime, 0, 0);
            }

            if (move == null || (move != null && !move.ignoreGravity))
            {
                if ((verticalForce < 0 && !IsGrounded()) || verticalForce > 0)
                {
                    verticalForce -= appliedGravity * Time.fixedDeltaTime;
                    transform.Translate(moveDirection * myControlsScript.myInfo.physics.jumpDistance * Time.fixedDeltaTime, verticalForce * Time.fixedDeltaTime, 0);
                }
                else if (verticalForce < 0 && IsGrounded())
                {
                    currentAirJumps = 0;
                    verticalForce   = 0;
                }
            }
        }

        /*if (myControlsScript.debugger != null) {
         *      myControlsScript.debugger.text = "isBouncing = " + isBouncing + "\n";
         *      myControlsScript.debugger.text += "controlsScript.stunTime = " + controlsScript.stunTime + "\n";
         *      myControlsScript.debugger.text += "Animations:\n";
         *      foreach(AnimationState animState in character.animation){
         *              if (myMoveSetScript.IsAnimationPlaying(animState.name)){
         *                      myControlsScript.debugger.text += "<color=#003300>"+ animState.name +"</color>\n";
         *                      myControlsScript.debugger.text += "<color=#003300>"+ animState.speed +"</color>\n";
         *              }
         *      }
         * }*/

        /*if (UFE.normalizedCam) {
         *      Vector3 cameraLeftBounds = Camera.main.ViewportToWorldPoint(new Vector3(0,0,-Camera.main.transform.position.z - 10));
         *      Vector3 cameraRightBounds = Camera.main.ViewportToWorldPoint(new Vector3(1,0,-Camera.main.transform.position.z - 10));
         *
         *      transform.position = new Vector3(
         *              Mathf.Clamp(transform.position.x,cameraLeftBounds.x,cameraRightBounds.x),
         *              transform.position.y,
         *              transform.position.z);
         * }*/

        float minDist = myControlsScript.opponent.transform.position.x - UFE.config.cameraOptions.maxDistance;
        float maxDist = myControlsScript.opponent.transform.position.x + UFE.config.cameraOptions.maxDistance;

        transform.position = new Vector3(Mathf.Clamp(transform.position.x, minDist, maxDist), transform.position.y, transform.position.z);

        transform.position = new Vector3(
            Mathf.Clamp(transform.position.x,
                        UFE.config.selectedStage.leftBoundary,
                        UFE.config.selectedStage.rightBoundary),
            transform.position.y,
            transform.position.z);


        if (myControlsScript.currentState == PossibleStates.Down)
        {
            return;
        }

        if (IsGrounded() && myControlsScript.currentState != PossibleStates.Down)
        {
            if (verticalTotalForce != 0)
            {
                if (bounceTimes < UFE.config.bounceOptions.maximumBounces && myControlsScript.currentSubState == SubStates.Stunned &&
                    UFE.config.bounceOptions.bounceForce != Sizes.None &&
                    verticalForce <= -UFE.config.bounceOptions.minimumBounceForce)
                {
                    if (!UFE.config.bounceOptions.bounceHitBoxes)
                    {
                        myHitBoxesScript.HideHitBoxes(true);
                    }
                    if (UFE.config.bounceOptions.bounceForce == Sizes.Small)
                    {
                        AddForce(new Vector2(0, -verticalForce / 2.4f), 1);
                    }
                    else if (UFE.config.bounceOptions.bounceForce == Sizes.Medium)
                    {
                        AddForce(new Vector2(0, -verticalForce / 1.8f), 1);
                    }
                    else if (UFE.config.bounceOptions.bounceForce == Sizes.High)
                    {
                        AddForce(new Vector2(0, -verticalForce / 1.2f), 1);
                    }
                    bounceTimes++;
                    if (!isBouncing)
                    {
                        if (myMoveSetScript.basicMoves.bounce.clip1 == null)
                        {
                            Debug.LogError("Bounce animation not found! Make sure you have it set on Character -> Basic Moves -> Bounce");
                        }

                        myControlsScript.stunTime += airTime + UFE.config.knockDownOptions.air.knockedOutTime;
                        myMoveSetScript.PlayBasicMove(myMoveSetScript.basicMoves.bounce);
                        if (UFE.config.bounceOptions.bouncePrefab != null)
                        {
                            GameObject pTemp = (GameObject)Instantiate(UFE.config.bounceOptions.bouncePrefab);
                            pTemp.transform.parent        = transform;
                            pTemp.transform.localPosition = Vector3.zero;
                            Destroy(pTemp, UFE.config.bounceOptions.bounceKillTime);
                        }
                        if (UFE.config.bounceOptions.shakeCamOnBounce)
                        {
                            myControlsScript.shakeDensity = UFE.config.bounceOptions.shakeDensity;
                        }
                        UFE.PlaySound(UFE.config.bounceOptions.bounceSound);
                        isBouncing = true;
                    }
                    return;
                }
                verticalTotalForce            = 0;
                airTime                       = 0;
                myMoveSetScript.totalAirMoves = 0;
                BasicMoveInfo airAnimation = null;
                isBouncing  = false;
                bounceTimes = 0;
                float animationSpeed = 0;
                float delayTime      = 0;
                if (myControlsScript.currentMove != null && myControlsScript.currentMove.hitAnimationOverride)
                {
                    return;
                }
                if (myControlsScript.currentSubState == SubStates.Stunned)
                {
                    myControlsScript.stunTime = UFE.config.knockDownOptions.air.knockedOutTime + UFE.config.knockDownOptions.air.standUpTime;

                    if (myMoveSetScript.basicMoves.fallDown.clip1 == null)
                    {
                        Debug.LogError("Fall Down From Air Hit animation not found! Make sure you have it set on Character -> Basic Moves -> Fall Down From Air Hit");
                    }

                    airAnimation = myMoveSetScript.basicMoves.fallDown;
                    myControlsScript.currentState = PossibleStates.Down;
                    if (!UFE.config.knockDownOptions.air.standUpHitBoxes)
                    {
                        myHitBoxesScript.HideHitBoxes(true);
                    }
                }
                else if (myControlsScript.currentState != PossibleStates.Stand)
                {
                    if (myMoveSetScript.basicMoves.landing.clip1 != null &&
                        ((myControlsScript.currentMove != null && myControlsScript.currentMove.cancelMoveWheLanding) ||
                         myControlsScript.currentMove == null))
                    {
                        airAnimation  = myMoveSetScript.basicMoves.landing;
                        moveDirection = 0;
                        isLanding     = true;
                        myControlsScript.KillCurrentMove();

                        delayTime = (float)myControlsScript.myInfo.physics.landingDelay / UFE.config.fps;
                        UFE.DelaySynchronizedAction(ResetLanding, delayTime);

                        if (airAnimation.autoSpeed)
                        {
                            animationSpeed = myMoveSetScript.GetAnimationLengh(airAnimation.name) / delayTime;
                        }
                    }

                    if (myControlsScript.currentState != PossibleStates.Crouch)
                    {
                        myControlsScript.currentState = PossibleStates.Stand;
                    }
                }
                if (airAnimation != null && !myMoveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    myMoveSetScript.PlayBasicMove(airAnimation);
                    if (animationSpeed != 0)
                    {
                        myMoveSetScript.SetAnimationSpeed(airAnimation.name, animationSpeed);
                    }
                }
            }

            if (myControlsScript.currentSubState != SubStates.Stunned && !myControlsScript.isBlocking && !myControlsScript.blockStunned &&
                move == null && !isTakingOff && !isLanding && myControlsScript.currentState == PossibleStates.Stand)
            {
                if (moveDirection > 0 && myControlsScript.mirror == -1 ||
                    moveDirection < 0 && myControlsScript.mirror == 1)
                {
                    if (myMoveSetScript.basicMoves.moveForward.clip1 == null)
                    {
                        Debug.LogError("Move Forward animation not found! Make sure you have it set on Character -> Basic Moves -> Move Forward");
                    }
                    if (!myMoveSetScript.IsAnimationPlaying(myMoveSetScript.basicMoves.moveForward.name))
                    {
                        myMoveSetScript.PlayBasicMove(myMoveSetScript.basicMoves.moveForward);
                    }
                }
                else if (moveDirection > 0 && myControlsScript.mirror == 1 ||
                         moveDirection < 0 && myControlsScript.mirror == -1)
                {
                    if (myMoveSetScript.basicMoves.moveBack.clip1 == null)
                    {
                        Debug.LogError("Move Back animation not found! Make sure you have it set on Character -> Basic Moves -> Move Back");
                    }
                    if (!myMoveSetScript.IsAnimationPlaying(myMoveSetScript.basicMoves.moveBack.name))
                    {
                        myMoveSetScript.PlayBasicMove(myMoveSetScript.basicMoves.moveBack);
                    }
                }
            }
        }
        else if ((verticalForce > 0 || !IsGrounded()))
        {
            if (move != null && myControlsScript.currentState == PossibleStates.Stand)
            {
                myControlsScript.currentState = PossibleStates.StraightJump;
            }
            if (move == null && verticalForce / verticalTotalForce > 0 && verticalForce / verticalTotalForce <= 1)
            {
                if (isBouncing)
                {
                    return;
                }

                if (moveDirection == 0)
                {
                    myControlsScript.currentState = PossibleStates.StraightJump;
                }
                else
                {
                    if (moveDirection > 0 && myControlsScript.mirror == -1 ||
                        moveDirection < 0 && myControlsScript.mirror == 1)
                    {
                        myControlsScript.currentState = PossibleStates.ForwardJump;
                    }

                    if (moveDirection > 0 && myControlsScript.mirror == 1 ||
                        moveDirection < 0 && myControlsScript.mirror == -1)
                    {
                        myControlsScript.currentState = PossibleStates.BackJump;
                    }
                }

                BasicMoveInfo airAnimation;
                if (myControlsScript.currentSubState == SubStates.Stunned)
                {
                    if (myMoveSetScript.basicMoves.getHitKnockBack.clip1 != null &&
                        Mathf.Abs(horizontalForce) > UFE.config.comboOptions.knockBackMinForce &&
                        UFE.config.comboOptions.knockBackMinForce > 0)
                    {
                        airAnimation = myMoveSetScript.basicMoves.getHitKnockBack;
                    }
                    else
                    {
                        if (myMoveSetScript.basicMoves.getHitAir.clip1 == null)
                        {
                            Debug.LogError("Get Hit Air animation not found! Make sure you have it set on Character -> Basic Moves -> Get Hit Air");
                        }

                        airAnimation = myMoveSetScript.basicMoves.getHitAir;
                    }
                }
                else
                {
                    if (myMoveSetScript.basicMoves.jumpForward.clip1 != null && myControlsScript.currentState == PossibleStates.ForwardJump)
                    {
                        airAnimation = myMoveSetScript.basicMoves.jumpForward;
                    }
                    else if (myMoveSetScript.basicMoves.jumpBack.clip1 != null && myControlsScript.currentState == PossibleStates.BackJump)
                    {
                        airAnimation = myMoveSetScript.basicMoves.jumpBack;
                    }
                    else
                    {
                        if (myMoveSetScript.basicMoves.jumpStraight.clip1 == null)
                        {
                            Debug.LogError("Jump animation not found! Make sure you have it set on Character -> Basic Moves -> Jump Straight");
                        }

                        airAnimation = myMoveSetScript.basicMoves.jumpStraight;
                    }
                }

                if (!myMoveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    myMoveSetScript.PlayBasicMove(airAnimation);
                    if (airAnimation.autoSpeed)
                    {
                        myMoveSetScript.SetAnimationNormalizedSpeed(airAnimation.name, (myMoveSetScript.GetAnimationLengh(airAnimation.name) / (airTime * 2)));
                    }
                    //if (airAnimation.autoSpeed || myControlsScript.currentSubState == SubStates.Stunned) {
                    //myMoveSetScript.SetAnimationNormalizedSpeed(airAnimation.name, (myMoveSetScript.GetAnimationLengh(airAnimation.name) / airTime));
                }
            }
            else if (move == null && verticalForce / verticalTotalForce <= 0)
            {
                BasicMoveInfo airAnimation;
                if (isBouncing)
                {
                    if (myMoveSetScript.basicMoves.fallingFromBounce.clip1 == null)
                    {
                        Debug.LogError("Falling From Bounce animation not found! Make sure you have it set on Character -> Basic Moves -> Falling From Bounce");
                    }

                    airAnimation = myMoveSetScript.basicMoves.fallingFromBounce;
                    if (myMoveSetScript.basicMoves.fallingFromBounce.invincible)
                    {
                        myHitBoxesScript.HideHitBoxes(true);
                    }
                }
                else
                {
                    if (myControlsScript.currentSubState == SubStates.Stunned)
                    {
                        if (myMoveSetScript.basicMoves.getHitKnockBack.clip1 != null &&
                            Mathf.Abs(horizontalForce) > UFE.config.comboOptions.knockBackMinForce &&
                            UFE.config.comboOptions.knockBackMinForce > 0)
                        {
                            airAnimation = myMoveSetScript.basicMoves.getHitKnockBack;
                        }
                        else
                        {
                            if (myMoveSetScript.basicMoves.getHitAir.clip1 == null)
                            {
                                Debug.LogError("Get Hit Air animation not found! Make sure you have it set on Character -> Basic Moves -> Get Hit Air");
                            }

                            airAnimation = myMoveSetScript.basicMoves.getHitAir;
                        }
                    }
                    else
                    {
                        if (myMoveSetScript.basicMoves.fallForward.clip1 != null && myControlsScript.currentState == PossibleStates.ForwardJump)
                        {
                            airAnimation = myMoveSetScript.basicMoves.fallForward;
                        }
                        else if (myMoveSetScript.basicMoves.fallBack.clip1 != null && myControlsScript.currentState == PossibleStates.BackJump)
                        {
                            airAnimation = myMoveSetScript.basicMoves.fallBack;
                        }
                        else
                        {
                            if (myMoveSetScript.basicMoves.fallStraight.clip1 == null)
                            {
                                Debug.LogError("Fall animation not found! Make sure you have it set on Character -> Basic Moves -> Fall Straight");
                            }

                            airAnimation = myMoveSetScript.basicMoves.fallStraight;
                        }
                    }
                }

                if (!myMoveSetScript.IsAnimationPlaying(airAnimation.name))
                {
                    myMoveSetScript.PlayBasicMove(airAnimation);

                    if (airAnimation.autoSpeed)
                    {
                        myMoveSetScript.SetAnimationNormalizedSpeed(airAnimation.name, (myMoveSetScript.GetAnimationLengh(airAnimation.name) / (airTime * 2)));
                    }
                }
            }
        }
        if (horizontalForce == 0 && verticalForce == 0)
        {
            moveDirection = 0;
        }
    }