/// <summary>
/// Add a new CollisionUnit to the CollisionChief.
/// </summary>
/// <param name="unit">The CollisionUnit to add to the CollisionChief.</param>
public void AddCollisionUnit(CollisionUnit unit)
{
Vector2 circleCenter;
int circleRadius;
Vector2 lineStart;
Vector2 lineEnd;
Point topLeftCell;
Point bottomRightCell;
if (unit.GetCollisionType() == CollisionUnit.CollisionType.COLLISION_CIRCLE)
{
circleCenter = unit.GetCircleCenter();
circleRadius = unit.GetCircleRadius();
// put in appropriate cells
topLeftCell = CalculateCircleTopLeftCell(circleCenter, circleRadius);
bottomRightCell = CalculateCircleBottomRightCell(circleCenter, circleRadius);
for (int i = topLeftCell.X; i <= bottomRightCell.X; i++)
{
for (int j = topLeftCell.Y; j <= bottomRightCell.Y; j++)
{
mCollisionGrid.Cells[i,j].AddCollisionUnit(unit);
}
}
}
else if (unit.GetCollisionType() == CollisionUnit.CollisionType.COLLISION_LINE)
{
lineStart = unit.GetLineStart();
lineEnd = unit.GetLineEnd();
// TODO: put in appropriate cells
}
else if (unit.GetCollisionType() == CollisionUnit.CollisionType.COLLISION_BOX)
{
topLeftCell = CalculateCellPosition(unit.GetUpperLeft());
bottomRightCell = CalculateCellPosition(unit.GetLowerRight());
for (int i = topLeftCell.X; i <= bottomRightCell.X; i++)
{
for (int j = topLeftCell.Y; j <= bottomRightCell.Y; j++)
{
mCollisionGrid.Cells[i, j].AddCollisionUnit(unit);
}
}
}
}