/// <summary> /// Starts a Dodge. /// </summary> /// <param name="dir"></param> public void dodge(Utilities.direction dir) { becomeImmune(); rbd.velocity = new Vector2(0, 0); jumpTimer = 0f; float dashSpeed; if (state == Utilities.state.Air) { canDodge = false; rbd.gravityScale = 0f; if (fastFalling) { stopFastFalling(); } dashSpeed = airDodgeSpeed; state = Utilities.state.AirDodging; } else { state = Utilities.state.Dodging; dashSpeed = groundDodgeSpeed; } anim.Play("Dash"); switch (dir) { case Utilities.direction.Up: { rbd.AddForce(Vector2.up * dashSpeed, ForceMode2D.Impulse); } break; case Utilities.direction.Left: { rbd.AddForce(Vector2.left * dashSpeed, ForceMode2D.Impulse); } break; case Utilities.direction.Right: { rbd.AddForce(Vector2.right * dashSpeed, ForceMode2D.Impulse); } break; case Utilities.direction.Down: { rbd.AddForce(Vector2.down * dashSpeed, ForceMode2D.Impulse); } break; } }
protected void sideKnockBackEntity(Entity target, float totalKnockBack, Utilities.direction direction) { float camf = 0.1f; if (totalKnockBack > 30) { camf = 0.5f; } user.cam.transform.DOShakePosition(0.1f, camf, 1, 90, false, true); target.RigidBody.velocity = new Vector2(0, 0); float forceY = 0; if (target.State == Utilities.state.Air) { Vector2 forceDirection = (target.transform.position - user.transform.position); if (forceDirection.y > 0.5f) { forceY = totalKnockBack * 0.5f; } else if (forceDirection.y < -0.5f) { forceY = totalKnockBack * -0.5f; } else { forceY = forceDirection.y * totalKnockBack; } } else { forceY = totalKnockBack / 2; } if (direction == Utilities.direction.Right) { target.RigidBody.AddForce(new Vector2(totalKnockBack, forceY), ForceMode2D.Impulse); } else { target.RigidBody.AddForce(new Vector2(-totalKnockBack, forceY), ForceMode2D.Impulse); } target.StartCoroutine(target.hitStun(totalKnockBack)); }
private void diagonalKnockBackEntity(Entity target, float totalKnockBack, Utilities.direction direction) { float camf = 0.1f; if (totalKnockBack > 30) { camf = 0.5f; } user.cam.transform.DOShakePosition(0.1f, camf, 1, 90, false, true); target.RigidBody.velocity = new Vector2(0, 0); if (direction == Utilities.direction.Right) { target.RigidBody.AddForce(new Vector2(totalKnockBack / 2, totalKnockBack / 2), ForceMode2D.Impulse); } else { target.RigidBody.AddForce(new Vector2(-totalKnockBack / 2, totalKnockBack / 2), ForceMode2D.Impulse); } }
/// <summary> /// Lets go to specified direction /// </summary> /// <param name="dir">The desired direction</param> protected void letGo(Utilities.direction dir) { rbd.gravityScale = gravityAmount; state = Utilities.state.Air; grabbedEdge = null; becomeHittable(); if (dir == Utilities.direction.Down) { rbd.velocity = new Vector2(rbd.velocity.x, -1); } else if (dir == Utilities.direction.Right) { rbd.velocity = new Vector2(1, rbd.velocity.y); } else if (dir == Utilities.direction.Left) { rbd.velocity = new Vector2(-1, rbd.velocity.y); } }
public void setDirection(Utilities.direction dir) { thrownDirection = dir; }