Azmyth.Assets.World.UpdateChunks C# (CSharp) Method

UpdateChunks() public method

Loads Moore Neighborhood of chunks around central chunk specified by X/Y paramters.
public UpdateChunks ( int x, int y, int chunkSize ) : void
x int X Origin of central chunk
y int Y Origin of central chunk<
chunkSize int size of chunks to load
return void
        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);
            }
        }