public void LoadAroundChunk(int x, int y, int z) { foreach (var coordinates in _voxelSpace.Select(kvp => kvp.Key).ToList()) { if (!AreaContainsChunk(coordinates)) { UnloadChunk(coordinates); } } var chunksLoaded = 0; for (int xOffset = -LoadRadius; xOffset <= LoadRadius; xOffset++) { for (int zOffset = -LoadRadius; zOffset <= LoadRadius; zOffset++) { if ((xOffset * xOffset + zOffset * zOffset) <= LoadRadius * LoadRadius) { for (int yLoad = 0; yLoad < LoadHeight; yLoad++) { var coordinates = new Vector3i(x + xOffset, yLoad, z + zOffset); if (!_voxelSpace.ContainsMember(coordinates)) { var chunk = _world.CreateEntity(); chunk.Set(new NetworkedEntity() { Id = Guid.NewGuid() }); chunk.Set(new Transform(chunk) { Position = new Vector3(coordinates.X * _chunkLength * 1, coordinates.Y * _chunkLength * 1, coordinates.Z * _chunkLength * 1) }); _setVoxelRendering(chunk); chunk.Set(new Chunk()); chunk.Set(new VoxelStaticBody()); chunk.Set(new PhysicsBlocks()); chunk.Set(new VoxelGrid(_chunkLength, 1, _voxelSpace, coordinates)); chunk.Set(new EntityMetaData() { Name = $"Chunk {coordinates}" }); _voxelSpace[coordinates] = chunk; chunksLoaded++; if (chunksLoaded == LoadHeight) { return; } } } } } } }
public void SetCenterChunk(int x, int y, int z) { CenterChunk = new Vector3i(x, y, z); foreach (var coordinates in _voxelSpace.Select(kvp => kvp.Key).ToList()) { if (!AreaContainsChunk(coordinates)) { UnloadChunk(coordinates); } } var columnsLoaded = 0; for (int xOffset = -LoadRadius; xOffset <= LoadRadius; xOffset++) { for (int zOffset = -LoadRadius; zOffset <= LoadRadius; zOffset++) { if ((xOffset * xOffset + zOffset * zOffset) <= LoadRadius * LoadRadius) { if (!_voxelSpace.ContainsMember(new Vector3i(x + xOffset, 0, z + zOffset))) { for (int yLoad = 0; yLoad < LoadHeight; yLoad++) { var coordinates = new Vector3i(x + xOffset, yLoad, z + zOffset); if (!_voxelSpace.ContainsMember(coordinates)) { var chunk = _world.CreateEntity(); chunk.Set(new Transform() { Position = new Vector3(coordinates.X * _chunkLength * 1, coordinates.Y * _chunkLength * 1, coordinates.Z * _chunkLength * 1) }); _setVoxelRendering(chunk); chunk.Set(new Chunk()); chunk.Set(new VoxelStaticBody()); chunk.Set(new PhysicsBlocks()); chunk.Set(new LightVertexResources()); chunk.Set(new VoxelGrid(_chunkLength, 1, _voxelSpace, coordinates)); _voxelSpace[coordinates] = chunk; } } columnsLoaded++; if (columnsLoaded == 2) { return; } } } } } }