Example #1
0
        public List <LiquidPrimitive> GetAllLiquidPrimitives()
        {
            List <LiquidPrimitive> toReturn = new List <LiquidPrimitive>();

            foreach (VoxelChunk chunk in ChunkMap.Select(chunks => chunks.Value))
            {
                toReturn.AddRange(chunk.Liquids.Values);
            }

            return(toReturn);
        }
Example #2
0
        public void SetMaxViewingLevel(float level, ChunkManager.SliceMode slice)
        {
            Slice           = slice;
            MaxViewingLevel = Math.Max(Math.Min(level, ChunkSizeY), 1);

            foreach (VoxelChunk c in ChunkMap.Select(chunks => chunks.Value).Where(c => c.NeedsViewingLevelChange()))
            {
                c.ShouldRecalculateLighting = false;
                c.ShouldRebuild             = true;
            }
        }
Example #3
0
        public void RecomputeNeighbors()
        {
            foreach (VoxelChunk chunk in ChunkMap.Select(chunks => chunks.Value))
            {
                chunk.Neighbors.Clear();
            }

            foreach (KeyValuePair <Point3, VoxelChunk> chunks in ChunkMap)
            {
                VoxelChunk        chunk     = chunks.Value;
                List <VoxelChunk> adjacents = GetAdjacentChunks(chunk);
                foreach (VoxelChunk c in adjacents)
                {
                    if (!c.Neighbors.ContainsKey(chunk.ID) && chunk != c)
                    {
                        c.Neighbors[chunk.ID] = (chunk);
                    }
                    chunk.Neighbors[c.ID] = c;
                }
            }
        }
Example #4
0
        public void RecomputeNeighbors()
        {
            foreach (VoxelChunk chunk in ChunkMap.Select(chunks => chunks.Value))
            {
                chunk.Neighbors.Clear();
                chunk.EuclidianNeighbors.Clear();
            }

            foreach (KeyValuePair <Point3, VoxelChunk> chunks in ChunkMap)
            {
                VoxelChunk chunk = chunks.Value;

                Point3 successor = new Point3(0, 0, 0);
                for (successor.X = -1; successor.X < 2; successor.X++)
                {
                    for (successor.Z = -1; successor.Z < 2; successor.Z++)
                    {
                        for (successor.Y = -1; successor.Y < 2; successor.Y++)
                        {
                            Point3     sideChunkID = chunk.ID + successor;
                            VoxelChunk sideChunk;
                            ChunkMap.TryGetValue(sideChunkID, out sideChunk);
                            if (successor.Y == 0 && sideChunk != null)
                            {
                                if (!sideChunk.Neighbors.ContainsKey(chunk.ID) && chunk != sideChunk)
                                {
                                    chunk.Neighbors[chunk.ID] = chunk;
                                }
                                chunk.Neighbors[sideChunkID] = sideChunk;
                            }
                            chunk.EuclidianNeighbors[VoxelChunk.SuccessorToEuclidianLookupKey(successor)] = sideChunk;
                        }
                    }
                }
            }
        }