public override bool CheckInterrupt()
 {
     if (StateManager.CurrentStateFrame == 15)
     {
         StateManager.ChangeState((int)EntityStates.FALL);
         CombatManager.Cleanup();
         return(true);
     }
     return(false);
 }
Exemple #2
0
 public override void Initialize()
 {
     base.Initialize();
     forceBackup = controller.visualTransform.InverseTransformDirection(PhysicsManager.forceMovement);
     PhysicsManager.forceMovement = Vector3.zero;
     PhysicsManager.forceGravity  = Vector3.zero;
     controller.ResetAirActions();
     controller.currentAirJump = -1;
     CombatManager.Cleanup();
 }
        public override void OnUpdate()
        {
            AttackDefinition currentAttack = (TUF.Combat.AttackDefinition)CombatManager.CurrentAttack.attackDefinition;

            // Rotate towards target.
            for (int i = 0; i < currentAttack.faceLockonTargetWindows.Count; i++)
            {
                if (StateManager.CurrentStateFrame >= currentAttack.faceLockonTargetWindows[i].startFrame &&
                    StateManager.CurrentStateFrame <= currentAttack.faceLockonTargetWindows[i].endFrame)
                {
                    Vector3 mov        = controller.InputManager.GetAxis2D((int)EntityInputs.Movement);
                    Vector3 forwardDir = controller.visualTransform.forward;
                    // We're currently locked on to something.
                    if (controller.LockedOn)
                    {
                        forwardDir = controller.LockonForward;
                    }
                    // Movement is neutral, so Soft Target.
                    else if (mov.magnitude < InputConstants.movementMagnitude)
                    {
                        if (controller.LockonTarget)
                        {
                            forwardDir   = (controller.LockonTarget.transform.position - controller.transform.position);
                            forwardDir.y = 0;
                            forwardDir.Normalize();
                        }
                    }
                    // Movement is pointing in a direction, so face that direction.
                    else
                    {
                        forwardDir = controller.GetMovementVector(mov.x, mov.y);
                    }
                    controller.RotateVisual(forwardDir, currentAttack.faceLockonTargetWindows[i].amount);
                }
            }

            // Create hitbox grou ps.
            for (int i = 0; i < currentAttack.boxGroups.Count; i++)
            {
                HandleBoxGroup(i, (BoxGroup)currentAttack.boxGroups[i]);
            }

            // Check if this move was canceled with another action.
            if (CheckCancelWindows(currentAttack))
            {
                CombatManager.Cleanup();
                return;
            }

            // Check if we can special or command attack cancel.
            if (TrySpecialCancel(currentAttack) ||
                TryCommandAttackCancel(currentAttack))
            {
                return;
            }

            // Execute events.
            bool eventCancel = false;

            for (int i = 0; i < currentAttack.events.Count; i++)
            {
                if (HandleEvents(currentAttack.events[i]))
                {
                    eventCancel = true;
                    return;
                }
            }

            // Only increment the frame if the event didn't stop it.
            if (!eventCancel && !HandleChargeLevels((TUF.Entities.EntityManager)Manager, currentAttack))
            {
                controller.StateManager.IncrementFrame();
            }

            CheckInterrupt();
        }