public WorldChunkManager() { instance = this; chunkGenerator = new ChunkGenerator(); chunkGenerator.GenerateWorld(); Player.creatureManager.OnChunkPositionsVisibilityGained += (List <Vector2DInt> inSightedChunkPositions) => { foreach (Vector2DInt sightedChunkPosition in inSightedChunkPositions) { if (!_loadedChunks.ContainsKey(sightedChunkPosition)) { _loadedChunks.Add(sightedChunkPosition, chunkGenerator.LoadChunk(sightedChunkPosition)); } } }; Player.creatureManager.OnChunkPositionsVisibilityLost += (List <Vector2DInt> inLostVisibleChunks) => { foreach (Vector2DInt lostChunkPosition in inLostVisibleChunks) { if (_loadedChunks.ContainsKey(lostChunkPosition)) { chunkGenerator.UnloadChunk(_loadedChunks[lostChunkPosition]); _loadedChunks.Remove(lostChunkPosition); } } }; }