Exemplo n.º 1
0
        /// <summary>
        /// Gets the chunk at the target chunk position.
        /// </summary>
        /// <param name="chunkPos">The chunk position.</param>
        /// <param name="create">Whether or not to create the chunk if it doesn't currently exist.</param>
        /// <returns>The chunk, or null if it doesn't exist.</returns>
        private Chunk GetChunk(ChunkPosition chunkPos, bool create)
        {
            var chunk = World.GetChunk(chunkPos);

            if (chunk != null || !create)
            {
                return(chunk);
            }

            chunk = World.CreateChunk(chunkPos);
            bool remesh = ChunkLoader.LoadSync(chunk);

            if (remesh)
            {
                m_DirtyChunks.Add(chunkPos);
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(0));
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(1));
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(2));
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(3));
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(4));
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(5));
                RemeshDirtyChunks();
            }

            return(chunk);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Determines which chunks should be remeshed based on the given block position.
        /// </summary>
        /// <param name="blockPos">The local block position.</param>
        /// <param name="chunkPos">The chunk position.</param>
        private void RemeshEffectedChunks(BlockPosition blockPos, ChunkPosition chunkPos)
        {
            m_DirtyChunks.Add(chunkPos);

            if (blockPos.X == 0)
            {
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(1));
            }

            if (blockPos.X == World.ChunkSize.Mask)
            {
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(0));
            }

            if (blockPos.Y == 0)
            {
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(3));
            }

            if (blockPos.Y == World.ChunkSize.Mask)
            {
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(2));
            }

            if (blockPos.Z == 0)
            {
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(5));
            }

            if (blockPos.Z == World.ChunkSize.Mask)
            {
                m_DirtyChunks.Add(chunkPos.ShiftAlongDirection(4));
            }
        }