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;
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        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;
                            }
                        }
                    }
                }
            }
        }