public void JumpOffWall() { // Stops All Coroutines Just in Case OnWallEnter() has not stopped StopAllCoroutines(); characterPhysics.AddForce(Quaternion.Euler(0f, transform.eulerAngles.y, 0f) * new Vector3(0f, 1f, 1f), jumpOffWallForce); characterPhysics.currentGravityState = GravityState.JumpedOffWall; }
public override void Cast() { Health targetHealth; Character_Physics target = characterCombat.GetCombatCharacterComponents(abilityDistance, out targetHealth); if (target != null && characterPhysics.currentGravityState == GravityState.Grounded) { StartCoroutine(characterPhysics.PauseGroundCheck()); StartCoroutine(target.PauseGroundCheck()); target.SetMovementImpairingEffect(MovementImpairingEffect.Immobilization); target.currentGravityState = GravityState.InAir; characterPhysics.currentGravityState = GravityState.InAir; characterPhysics.AddForce(Vector3.up, 80f); target.AddOutsideForce(Vector3.up, 80f); targetHealth.DecreaseHealth(damage.GetAmount() * 2f); } }
private IEnumerator CalculateDash(Vector3 inputDirection) { // Calculate the angle of dash based on the Character Rotation Angle float targetAngle = Mathf.Atan2(inputDirection.x, inputDirection.z) * Mathf.Rad2Deg; Vector3 dashDirection = Quaternion.Euler(0f, transform.eulerAngles.y + targetAngle, 0f) * Vector3.forward; // Coroutine for Dash Cooldown StartCoroutine(ResetDash()); // If Character is Falling also Pushes the Character Down if (characterPhysics.currentGravityState == GravityState.Falling) { dashDirection += Vector3.down; } characterPhysics.AddForce(dashDirection, dashForce); // Reseting Impact After dash is done yield return(new WaitForSeconds(dashDuration)); characterPhysics.ResetImpact(); }