more fixed math stuff
parent
41d1c593cf
commit
85f21b7859
|
@ -28,7 +28,7 @@ namespace MoonWorks.Collision.Fixed
|
|||
|
||||
private (int, int) Hash(Vector2 position)
|
||||
{
|
||||
return ((int) Fix64.Floor(position.X / cellSize), (int) Fix64.Floor(position.Y / cellSize));
|
||||
return ((int) (position.X / cellSize), (int) (position.Y / cellSize));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -30,6 +30,9 @@ namespace MoonWorks.Math.Fixed
|
|||
const int LUT_SIZE = (int)(PI_OVER_2 >> 15);
|
||||
static readonly Fix64 LutInterval = (Fix64)(LUT_SIZE - 1) / PiOver2;
|
||||
|
||||
public bool IsFractional => (RawValue & 0x00000000FFFFFFFF) != 0;
|
||||
public bool IsIntegral => (RawValue & 0x00000000FFFFFFFF) == 0;
|
||||
|
||||
private Fix64(long value)
|
||||
{
|
||||
RawValue = value;
|
||||
|
@ -95,8 +98,7 @@ namespace MoonWorks.Math.Fixed
|
|||
/// </summary>
|
||||
public static Fix64 Ceiling(Fix64 value)
|
||||
{
|
||||
var hasFractionalPart = (value.RawValue & 0x00000000FFFFFFFF) != 0;
|
||||
return hasFractionalPart ? Floor(value) + One : value;
|
||||
return value.IsFractional ? Floor(value) + One : value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -697,12 +699,12 @@ namespace MoonWorks.Math.Fixed
|
|||
|
||||
public static bool operator >(Fix64 x, int y)
|
||||
{
|
||||
return ((int) x) > y;
|
||||
return x > ((Fix64) y);
|
||||
}
|
||||
|
||||
public static bool operator <(Fix64 x, int y)
|
||||
{
|
||||
return ((int) x) < y;
|
||||
return x < ((Fix64) y);
|
||||
}
|
||||
|
||||
public static bool operator >=(Fix64 x, Fix64 y)
|
||||
|
@ -717,12 +719,12 @@ namespace MoonWorks.Math.Fixed
|
|||
|
||||
public static bool operator >=(Fix64 x, int y)
|
||||
{
|
||||
return ((int) x) >= y;
|
||||
return x >= ((Fix64) y);
|
||||
}
|
||||
|
||||
public static bool operator <=(Fix64 x, int y)
|
||||
{
|
||||
return ((int) x) <= y;
|
||||
return x <= ((Fix64) y);
|
||||
}
|
||||
|
||||
// Casting
|
||||
|
|
|
@ -6,7 +6,21 @@ namespace MoonWorks.Math.Fixed
|
|||
public Fix64 Rotation { get; }
|
||||
public Vector2 Scale { get; }
|
||||
|
||||
public Matrix3x2 TransformMatrix { get; }
|
||||
private bool transformMatrixCalculated = false;
|
||||
private Matrix3x2 transformMatrix = Matrix3x2.Identity;
|
||||
public Matrix3x2 TransformMatrix
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!transformMatrixCalculated)
|
||||
{
|
||||
transformMatrix = CreateTransformMatrix(Position, Rotation, Scale);
|
||||
transformMatrixCalculated = true;
|
||||
}
|
||||
|
||||
return transformMatrix;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsAxisAligned => Rotation % Fix64.PiOver2 == Fix64.Zero;
|
||||
public bool IsUniformScale => Scale.X == Scale.Y;
|
||||
|
@ -18,7 +32,6 @@ namespace MoonWorks.Math.Fixed
|
|||
Position = Vector2.Zero;
|
||||
Rotation = Fix64.Zero;
|
||||
Scale = Vector2.One;
|
||||
TransformMatrix = CreateTransformMatrix(Position, Rotation, Scale);
|
||||
}
|
||||
|
||||
public Transform2D(Vector2 position)
|
||||
|
@ -26,7 +39,6 @@ namespace MoonWorks.Math.Fixed
|
|||
Position = position;
|
||||
Rotation = Fix64.Zero;
|
||||
Scale = Vector2.One;
|
||||
TransformMatrix = CreateTransformMatrix(Position, Rotation, Scale);
|
||||
}
|
||||
|
||||
public Transform2D(Vector2 position, Fix64 rotation)
|
||||
|
@ -34,7 +46,6 @@ namespace MoonWorks.Math.Fixed
|
|||
Position = position;
|
||||
Rotation = rotation;
|
||||
Scale = Vector2.One;
|
||||
TransformMatrix = CreateTransformMatrix(Position, Rotation, Scale);
|
||||
}
|
||||
|
||||
public Transform2D(Vector2 position, Fix64 rotation, Vector2 scale)
|
||||
|
@ -42,7 +53,6 @@ namespace MoonWorks.Math.Fixed
|
|||
Position = position;
|
||||
Rotation = rotation;
|
||||
Scale = scale;
|
||||
TransformMatrix = CreateTransformMatrix(Position, Rotation, Scale);
|
||||
}
|
||||
|
||||
public Transform2D Compose(Transform2D other)
|
||||
|
|
|
@ -218,6 +218,14 @@ namespace MoonWorks.Math.Fixed
|
|||
return Fix64.Atan2(Y, X);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns this Vector2 with the fractional components cut off.
|
||||
/// </summary>
|
||||
public Vector2 Truncated()
|
||||
{
|
||||
return new Vector2((int) X, (int) Y);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a <see cref="String"/> representation of this <see cref="Vector2"/> in the format:
|
||||
/// {X:[<see cref="X"/>] Y:[<see cref="Y"/>]}
|
||||
|
|
Loading…
Reference in New Issue