public List<StaticObject> GetWalls(Level level)
{
var gridSize = GridSpace.GetGridCoord(level.Size);
var final = new List<StaticObject>();
var walls = new List<StaticObject>();
var rows = new List<StaticObject>[(int)gridSize.Y];
var cols = new List<StaticObject>[(int)gridSize.X];
foreach (var entity in _mEntities)
if (entity.MType == XmlKeys.Walls)
walls.Add(new Tile(_mContent, .8f, entity));
CreateSortedIndicies(walls, rows, false);
for(var i = 0; i < rows.Length; i++)
{
var next = -1;
var collisionType = "";
var wall = new List<StaticObject>();
foreach (var obj in rows[i])
{
var gridLoc = GridSpace.GetGridCoord(obj.MPosition);
if ((gridLoc.X != next || !collisionType.Equals(obj.CollisionType)) && wall.Count > 0)
{
if (wall.Count > 1)
final.Add(new Wall(.8f, wall));
else
walls.Add(wall[0]);
next = -1;
collisionType = "";
wall.Clear();
}
if(wall.Count == 0)
{
walls.Remove(obj);
wall.Add(obj);
next = (int)gridLoc.X + 1;
collisionType = obj.CollisionType;
}
else if (gridLoc.X == next && collisionType.Equals(obj.CollisionType))
{
walls.Remove(obj);
wall.Add(obj);
next++;
}
}
if (wall.Count > 0)
{
if (wall.Count > 1)
final.Add(new Wall(.8f, wall));
else
walls.Add(wall[0]);
wall.Clear();
}
}
CreateSortedIndicies(walls, cols,true);
for (var i = 0; i < cols.Length; i++)
{
var next = -1;
var collisionType = "";
var wall = new List<StaticObject>();
foreach (var obj in cols[i])
{
var gridLoc = GridSpace.GetGridCoord(obj.MPosition);
if ((gridLoc.Y != next || !collisionType.Equals(obj.CollisionType)) && wall.Count > 0)
{
if (wall.Count > 1)
final.Add(new Wall(.8f, wall));
else
walls.Add(wall[0]);
next = -1;
wall.Clear();
}
if (wall.Count == 0)
{
walls.Remove(obj);
wall.Add(obj);
next = (int)gridLoc.Y + 1;
collisionType = obj.CollisionType;
}
else if (gridLoc.Y == next && collisionType.Equals(obj.CollisionType))
{
walls.Remove(obj);
wall.Add(obj);
next++;
}
}
if (wall.Count > 0)
{
if (wall.Count > 1)
final.Add(new Wall(.8f, wall));
else
walls.Add(wall[0]);
wall.Clear();
}
}
final.AddRange(walls);
return final;
}