public override bool CheckInterrupt() { if (StateManager.CurrentStateFrame == 15) { StateManager.ChangeState((int)EntityStates.FALL); CombatManager.Cleanup(); return(true); } return(false); }
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(); }