diff --git a/Shared/Debug.cs b/Shared/Debug.cs
index 6241e38..9927bc3 100644
--- a/Shared/Debug.cs
+++ b/Shared/Debug.cs
@@ -68,7 +68,7 @@ namespace SemiColinGames {
rects.Add(new DebugRect(rect, color));
}
- public static void AddRect(Aabb box, Color color) {
+ public static void AddRect(AABB box, Color color) {
Rectangle rect = new Rectangle(
(int) (box.Position.X - box.HalfSize.X), (int) (box.Position.Y - box.HalfSize.Y),
(int) (box.HalfSize.X * 2), (int) (box.HalfSize.Y * 2));
diff --git a/Shared/Geometry.cs b/Shared/Geometry.cs
index 085e144..ccb1545 100644
--- a/Shared/Geometry.cs
+++ b/Shared/Geometry.cs
@@ -6,17 +6,17 @@ using System;
namespace SemiColinGames {
public readonly struct Hit {
- public readonly Aabb Collider;
+ public readonly AABB Collider;
public readonly Vector2 Position;
public readonly Vector2 Delta;
public readonly Vector2 Normal;
public readonly float Time; // ranges from [0, 1].
- public Hit(Aabb collider, Vector2 position, Vector2 delta, Vector2 normal) :
+ public Hit(AABB collider, Vector2 position, Vector2 delta, Vector2 normal) :
this(collider, position, delta, normal, 0.0f) {
}
- public Hit(Aabb collider, Vector2 position, Vector2 delta, Vector2 normal, float time) {
+ public Hit(AABB collider, Vector2 position, Vector2 delta, Vector2 normal, float time) {
Collider = collider;
Position = position;
Delta = delta;
@@ -37,7 +37,7 @@ namespace SemiColinGames {
}
}
- public readonly struct Aabb {
+ public readonly struct AABB {
public readonly Vector2 Position; // centroid
public readonly Vector2 HalfSize;
@@ -51,12 +51,12 @@ namespace SemiColinGames {
}
}
- public Aabb(Vector2 position, Vector2 halfSize) {
+ public AABB(Vector2 position, Vector2 halfSize) {
Position = position;
HalfSize = halfSize;
}
- public Hit? Intersect(Aabb box) {
+ public Hit? Intersect(AABB box) {
float dx = box.Position.X - Position.X;
float px = box.HalfSize.X + HalfSize.X - Math.Abs(dx);
if (px <= 0) {
@@ -121,7 +121,7 @@ namespace SemiColinGames {
return new Hit(this, hitPos, hitDelta, normal, hitTime);
}
- public Sweep Sweep(Aabb box, Vector2 delta) {
+ public Sweep Sweep(AABB box, Vector2 delta) {
// fast-path case if the other box is static
if (delta.X == 0 && delta.Y == 0) {
Hit? staticHit = Intersect(box);
diff --git a/Shared/Player.cs b/Shared/Player.cs
index 2aa8d5a..12e156d 100644
--- a/Shared/Player.cs
+++ b/Shared/Player.cs
@@ -46,25 +46,26 @@ namespace SemiColinGames {
public Point Position { get { return position; } }
- public void Update(float modelTime, History input, Aabb[] collisionTargets) {
- Aabb BoxOffset(Point position, int yOffset) {
- return new Aabb(new Vector2(position.X, position.Y + yOffset), halfSize);
+ public void Update(float modelTime, History input, AABB[] collisionTargets) {
+ AABB BoxOffset(Point position, int yOffset) {
+ return new AABB(new Vector2(position.X, position.Y + yOffset), halfSize);
}
- Aabb Box(Point position) {
+ AABB Box(Point position) {
return BoxOffset(position, 0);
}
Vector2 movement = HandleInput(modelTime, input);
// Broad test: remove all collision targets nowhere near the player.
- var candidates = new List();
+ // TODO: don't allocate a list here.
+ var candidates = new List();
// Expand the box in the direction of movement. The center is the midpoint of the line
// between the player's current position and their desired movement. The width increases by
// the magnitude of the movement in each direction. We add 1 to each dimension just to be
// sure (the only downside is a small number of false-positive AABBs, which should be
// discarded by later tests anyhow.)
- Aabb largeBox = new Aabb(
+ AABB largeBox = new AABB(
new Vector2(position.X + movement.X / 2, position.Y + movement.Y / 2),
new Vector2(halfSize.X + Math.Abs(movement.X) + 1, halfSize.Y + Math.Abs(movement.Y) + 1));
foreach (var box in collisionTargets) {
@@ -80,7 +81,7 @@ namespace SemiColinGames {
int dy = movePoints[i].Y - movePoints[i - 1].Y;
if (dy != 0) {
Point newPosition = new Point(position.X, position.Y + dy);
- Aabb player = Box(newPosition);
+ AABB player = Box(newPosition);
bool reject = false;
foreach (var box in candidates) {
if (box.Intersect(player) != null) {
@@ -94,7 +95,7 @@ namespace SemiColinGames {
}
if (dx != 0) {
Point newPosition = new Point(position.X + dx, position.Y);
- Aabb player = Box(newPosition);
+ AABB player = Box(newPosition);
bool reject = false;
foreach (var box in candidates) {
if (box.Intersect(player) != null) {
@@ -109,7 +110,7 @@ namespace SemiColinGames {
}
bool standingOnGround = false;
- Aabb groundIntersect = BoxOffset(position, 1);
+ AABB groundIntersect = BoxOffset(position, 1);
foreach (var box in candidates) {
if (groundIntersect.Intersect(box) != null) {
standingOnGround = true;
diff --git a/Shared/World.cs b/Shared/World.cs
index 5f9f3b6..c1519ad 100644
--- a/Shared/World.cs
+++ b/Shared/World.cs
@@ -166,21 +166,21 @@ namespace SemiColinGames {
// Because we added tiles from left to right, the CollisionTargets are sorted by x-position.
// We maintain this invariant so that it's possible to efficiently find CollisionTargets that
// are nearby a given x-position.
- CollisionTargets = new Aabb[tiles.Length + 2];
+ CollisionTargets = new AABB[tiles.Length + 2];
// Add a synthetic collisionTarget on the left side of the world.
- CollisionTargets[0] = new Aabb(new Vector2(-1, 0), new Vector2(1, float.MaxValue));
+ CollisionTargets[0] = new AABB(new Vector2(-1, 0), new Vector2(1, float.MaxValue));
// Now add all the normal collisionTargets for every static terrain tile.
Vector2 halfSize = new Vector2(TileSize / 2, TileSize / 2);
for (int i = 0; i < tiles.Length; i++) {
Vector2 center = new Vector2(
tiles[i].Position.Left + halfSize.X, tiles[i].Position.Top + halfSize.Y);
- CollisionTargets[i + 1] = new Aabb(center, halfSize);
+ CollisionTargets[i + 1] = new AABB(center, halfSize);
}
// Add a final synthetic collisionTarget on the right side of the world.
- CollisionTargets[tiles.Length + 1] = new Aabb(
+ CollisionTargets[tiles.Length + 1] = new AABB(
new Vector2(Width + 1, 0), new Vector2(1, float.MaxValue));
}
@@ -190,6 +190,6 @@ namespace SemiColinGames {
}
}
- public Aabb[] CollisionTargets { get; }
+ public AABB[] CollisionTargets { get; }
}
}
diff --git a/SharedTests/GeometryTests.cs b/SharedTests/GeometryTests.cs
index f1f9e92..4ae36f2 100644
--- a/SharedTests/GeometryTests.cs
+++ b/SharedTests/GeometryTests.cs
@@ -7,13 +7,13 @@ namespace SemiColinGames.Tests {
public class GeometryTests {
[TestMethod]
public void TestIntersectSegmentNotColliding() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(8, 8));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(8, 8));
Assert.IsNull(box.IntersectSegment(new Vector2(-16, -16), new Vector2(32, 0)));
}
[TestMethod]
public void TestIntersectSegmentHit() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(8, 8));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(8, 8));
var point = new Vector2(-16, 4);
var delta = new Vector2(32, 0);
Hit? maybeHit = box.IntersectSegment(point, delta);
@@ -36,7 +36,7 @@ namespace SemiColinGames.Tests {
[TestMethod]
public void TestIntersectSegmentFromInsideBox() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(8, 8));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(8, 8));
var point = new Vector2(-4, 4);
var delta = new Vector2(32, 0);
Hit? maybeHit = box.IntersectSegment(point, delta);
@@ -59,7 +59,7 @@ namespace SemiColinGames.Tests {
[TestMethod]
public void TestIntersectSegmentWithPadding() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(8, 8));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(8, 8));
var point = new Vector2(-16, 4);
var delta = new Vector2(32, 0);
int padding = 4;
@@ -83,7 +83,7 @@ namespace SemiColinGames.Tests {
[TestMethod]
public void TestIntersectSegmentFromTwoDirections() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(32, 32));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(32, 32));
var farPos = new Vector2(64, 0);
var farToNearDelta = new Vector2(-32, 0);
Assert.IsNull(box.IntersectSegment(farPos, farToNearDelta));
@@ -95,7 +95,7 @@ namespace SemiColinGames.Tests {
[TestMethod]
public void TestIntersectSegmentXAxisAligned() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(16, 16));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(16, 16));
var pos = new Vector2(-32, 0);
var delta = new Vector2(64, 0);
Hit? maybeHit = box.IntersectSegment(pos, delta);
@@ -110,7 +110,7 @@ namespace SemiColinGames.Tests {
[TestMethod]
public void TestIntersectSegmentYAxisAligned() {
- Aabb box = new Aabb(new Vector2(0, 0), new Vector2(16, 16));
+ AABB box = new AABB(new Vector2(0, 0), new Vector2(16, 16));
var pos = new Vector2(0, -32);
var delta = new Vector2(0, 64);
Hit? maybeHit = box.IntersectSegment(pos, delta);