Exemplo n.º 1
0
        public VoxelChunk GetVoxelChunkAtWorldLocation(Vector3 worldLocation)
        {
            VoxelChunk returnChunk = null;

            ChunkMap.TryGetValue(GetChunkID(worldLocation), out returnChunk);

            return(returnChunk);
        }
Exemplo n.º 2
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;
                        }
                    }
                }
            }
        }