|
|
@ -20,6 +20,16 @@ namespace SemiColinGames { |
|
|
|
public static float Cos(double degrees) { |
|
|
|
return (float) Math.Cos(degrees); |
|
|
|
} |
|
|
|
|
|
|
|
public static T Clamp<T>(T value, T min, T max) where T : IComparable { |
|
|
|
if (value.CompareTo(min) == -1) { |
|
|
|
return min; |
|
|
|
} else if (value.CompareTo(max) == 1) { |
|
|
|
return max; |
|
|
|
} else { |
|
|
|
return value; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public readonly struct Hit { |
|
|
@ -58,16 +68,6 @@ namespace SemiColinGames { |
|
|
|
public readonly Vector2 Position; // centroid
|
|
|
|
public readonly Vector2 HalfSize; |
|
|
|
|
|
|
|
static float Clamp(float value, float min, float max) { |
|
|
|
if (value < min) { |
|
|
|
return min; |
|
|
|
} else if (value > max) { |
|
|
|
return max; |
|
|
|
} else { |
|
|
|
return value; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public AABB(Vector2 position, Vector2 halfSize) { |
|
|
|
Position = position; |
|
|
|
HalfSize = halfSize; |
|
|
@ -188,10 +188,10 @@ namespace SemiColinGames { |
|
|
|
Vector2 direction = Vector2.Normalize(delta); |
|
|
|
// TODO: why is this calculation made, and then thrown away?
|
|
|
|
Vector2 sweepHitPos = new Vector2( |
|
|
|
Clamp(hit.Position.X + direction.X * box.HalfSize.X, |
|
|
|
FMath.Clamp(hit.Position.X + direction.X * box.HalfSize.X, |
|
|
|
Position.X - HalfSize.X, |
|
|
|
Position.X + HalfSize.X), |
|
|
|
Clamp(hit.Position.Y + direction.Y * box.HalfSize.Y, |
|
|
|
FMath.Clamp(hit.Position.Y + direction.Y * box.HalfSize.Y, |
|
|
|
Position.Y - HalfSize.Y, |
|
|
|
Position.Y + HalfSize.Y)); |
|
|
|
return new Sweep(hit, hitPos, hit.Time); |
|
|
|