Пример #1
0
        /// <summary>
        /// Load terrain, saved changes and resets
        /// the light for an empty chunk
        /// </summary>
        /// <param name="chunk">The chunk to generate and load for</param>
        protected virtual void GenAndLoadChunk(Chunk chunk)
        {
            try
            {
                m_TerrainGen.OnGenerateChunkColumn(chunk.Position);

                chunk.SetFlag(Chunk.Flag.TerrainGenerated, true);
            }
            catch (System.Exception ex)
            {
                Debug.LogError(ex);
                throw;
            }
        }
Пример #2
0
        void DeleteChunks()
        {
            var chunksToDelete = new List <BlockPos>();

            foreach (var chunk in World.Chunks)
            {
                Vector3 chunkPos = chunk.Key;
                float   distance = Vector3.Distance(
                    new Vector3(chunkPos.x, 0, chunkPos.z),
                    new Vector3(transform.position.x, 0, transform.position.z));

                if (distance > HertzVoxConfig.DISTANCE_TO_DELETE_CHUNKS * HertzVoxConfig.BlockSize)
                {
                    chunksToDelete.Add(chunk.Key);
                }
            }

            foreach (var chunk in chunksToDelete)
            {
                Chunk _chunk = World.GetChunk(chunk);
                _chunk.gameObject.SetActive(false);
                _chunk.SetFlag(Chunk.Flag.Loaded, false);
            }
        }
Пример #3
0
        public void LoadChunkColumn(BlockPos columnPosition)
        {
            for (int y = WorldMaxY; y >= WorldMinY; y -= Chunk.CHUNK_SIZE)
            {
                BlockPos pos   = new BlockPos(columnPosition.x, y, columnPosition.z);
                Chunk    chunk = World.GetChunk(pos);
                if (chunk != null)
                {
                    chunk.SetFlag(Chunk.Flag.Loaded, true);
                    chunk.gameObject.SetActive(true);
                }
            }

            // Start the threaded chunk generation
            if (HertzVoxConfig.UseMultiThreading)
            {
                Thread thread = new Thread(() => { LoadChunkColumnInner(columnPosition); });
                thread.Start();
            }
            else
            {
                LoadChunkColumnInner(columnPosition);
            }
        }