Пример #1
0
        public void SetBlock(int x, int y, int z, Block block)
        {
            _voxelData.SetData(x, y, z, (ushort)block);
            QueueMeshGeneration();

            Region  region;
            IntVec3 dataPosition = _voxelData.GetDataPosition();

            if (x == 0)
            {
                if (dataPosition.x > 0)
                {
                    region = _regionCollection.GetRegion(dataPosition.x - 1, dataPosition.y, dataPosition.z);
                    if (region != null)
                    {
                        region.QueueMeshGeneration();
                    }
                    else
                    {
                        region = _regionCollection.CreateRegion(dataPosition.x - 1, dataPosition.y, dataPosition.z);
                        region.QueueMeshGeneration();
                    }
                }
            }
            else if (x == VoxelData.SIZE - 1 && dataPosition.x < _regionCollection.GetDimensions().x - 1)
            {
                region = _regionCollection.GetRegion(dataPosition.x + 1, dataPosition.y, dataPosition.z);
                if (region != null)
                {
                    region.QueueMeshGeneration();
                }
                else
                {
                    region = _regionCollection.CreateRegion(dataPosition.x + 1, dataPosition.y, dataPosition.z);
                    region.QueueMeshGeneration();
                }
            }
            if (y == 0)
            {
                if (dataPosition.y > 0)
                {
                    region = _regionCollection.GetRegion(dataPosition.x, dataPosition.y - 1, dataPosition.z);
                    if (region != null)
                    {
                        region.QueueMeshGeneration();
                    }
                    else
                    {
                        region = _regionCollection.CreateRegion(dataPosition.x, dataPosition.y - 1, dataPosition.z);
                        region.QueueMeshGeneration();
                    }
                }
            }
            else if (y == VoxelData.SIZE - 1 && dataPosition.y < _regionCollection.GetDimensions().y - 1)
            {
                region = _regionCollection.GetRegion(dataPosition.x, dataPosition.y + 1, dataPosition.z);
                if (region != null)
                {
                    region.QueueMeshGeneration();
                }
                else
                {
                    region = _regionCollection.CreateRegion(dataPosition.x, dataPosition.y + 1, dataPosition.z);
                    region.QueueMeshGeneration();
                }
            }
            if (z == 0)
            {
                if (dataPosition.z > 0)
                {
                    region = _regionCollection.GetRegion(dataPosition.x, dataPosition.y, dataPosition.z - 1);
                    if (region != null)
                    {
                        region.QueueMeshGeneration();
                    }
                    else
                    {
                        region = _regionCollection.CreateRegion(dataPosition.x, dataPosition.y, dataPosition.z - 1);
                        region.QueueMeshGeneration();
                    }
                }
            }
            else if (z == VoxelData.SIZE - 1 && dataPosition.z < _regionCollection.GetDimensions().z - 1)
            {
                region = _regionCollection.GetRegion(dataPosition.x, dataPosition.y, dataPosition.z + 1);
                if (region != null)
                {
                    region.QueueMeshGeneration();
                }
                else
                {
                    region = _regionCollection.CreateRegion(dataPosition.x, dataPosition.y, dataPosition.z + 1);
                    region.QueueMeshGeneration();
                }
            }
        }