public void UpdateChunks(int x, int y, int chunkSize)
{
System.Drawing.RectangleF chunkBounds;
List<Vector> newChunks = new List<Vector>();
// Calculate Coordinates
int chunkX = (int)Numbers.ConvertCoordinate(x, chunkSize);
int chunkY = (int)Numbers.ConvertCoordinate(y, chunkSize);
// Calculate Moore neighborhood.
for(int offsetY = chunkY - 1; offsetY <= chunkY + 1; offsetY++)
{
for(int offsetX = chunkX - 1; offsetX <= chunkX + 1; offsetX++)
{
newChunks.Add(new Vector(offsetX, offsetY, 0));
}
}
// Get all the loaded Chunks.
List<TerrainChunk> AllChunks = GetChunks();
// Cull Chunks outside of neighbor range.
foreach (TerrainChunk chunk in AllChunks)
{
if (!newChunks.Contains(new Vector((int)chunk.Bounds.X, (int)chunk.Bounds.Y, 0)))
{
chunkBounds = new System.Drawing.RectangleF(chunk.Bounds.X, chunk.Bounds.Y, chunkSize, chunkSize);
UnloadChunk(chunkBounds);
}
}
// Load Neighbor Chunks
foreach (Vector chunk in newChunks)
{
chunkBounds = new System.Drawing.RectangleF(chunk.X * chunkSize, chunk.Y * chunkSize, chunkSize, chunkSize);
LoadChunk(chunkBounds);
}
}