protected override void ComputeVelocityBeforeMovement() { // When going in opposite direction from previous movement, transit to it. if (isGoingXOppositeSide || ((lastMovement.x != 0) && !Mathm.HaveDifferentSign(lastMovement.x - movement.x, lastMovement.x))) { isGoingXOppositeSide = true; // About-Turn. if ((movement.x != 0) && Mathm.HaveDifferentSign(lastMovement.x, movement.x)) { movement.x = Mathf.MoveTowards(lastMovement.x, movement.x, speed * GameManager.DeltaTime * attributes.AboutTurnAccel); } // Deceleration. else if (lastMovement.x != movement.x) { movement.x = Mathf.MoveTowards(lastMovement.x, movement.x, GameManager.DeltaTime * attributes.MovementDecel); } else { isGoingXOppositeSide = false; } } if (isGoingYOppositeSide || ((lastMovement.y != 0) && !Mathm.HaveDifferentSign(lastMovement.y - movement.y, lastMovement.y))) { isGoingYOppositeSide = true; // About-Turn. if ((movement.y != 0) && Mathm.HaveDifferentSign(lastMovement.y, movement.y)) { movement.y = Mathf.MoveTowards(lastMovement.y, movement.y, speed * GameManager.DeltaTime * attributes.AboutTurnAccel); } // Deceleration. else if (lastMovement.y != movement.y) { movement.y = Mathf.MoveTowards(lastMovement.y, movement.y, GameManager.DeltaTime * attributes.MovementDecel); } else { isGoingYOppositeSide = false; } } lastMovement.Set(movement.x, movement.y); base.ComputeVelocityBeforeMovement(); }
/// <summary> /// Rotates this vector of a certain angle. /// </summary> /// <param name="_vector">Vector to rotate.</param> /// <param name="_angle">Angle to rotate vector by.</param> /// <returns>Returns new rotated vector.</returns> public static Vector2 Rotate(this Vector2 _vector, float _angle) => Mathm.RotateVector(_vector, _angle);
/// <summary> /// Get if a Vector2 is null, that is /// if its x & y values are equal to zero. /// </summary> /// <param name="_vector">Vector to check.</param> /// <returns>Returns true if both x & y Vector2 values /// are equal to zero, false otherwise.</returns> public static bool IsNull(this Vector2 _vector) => Mathm.IsVectorNull(_vector);