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();
        }
Exemple #2
0
 /// <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);
Exemple #3
0
 /// <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);