示例#1
0
        /// <summary>
        /// Purges a chunk when inside the current buffer
        /// </summary>
        public IEnumerable <Point3> TryPurgeChunks(Point3 <double> position, int radius)
        {
            List <Point3> AllChunks;

            lock (BlockLocker)
                AllChunks = Blocks.Keys.ToList();

            // TODO: check y
            foreach (var chunk in AllChunks.Where(pair =>
            {
                var height = position.X - pair.X;
                var width = position.Z - pair.Z;
                var distance = Math.Sqrt((height * height) + (width * width));
                return(distance > radius);
            }))
            {
                Blocks.Remove(chunk);
                yield return(chunk);
            }

            if (AllChunks.Count > 0)
            {
                PendingChanges = true;
                BlockCount     = Blocks.Count;
            }
            AllChunks.Clear();
        }
示例#2
0
        private static void AsyncLoadChunk(Chunk c)
        {
            ++_AsyncLoaders;
            AllChunks.Add(c);
            RegionReader      reader = new RegionReader(ChunkToRegion(c.Position));
            LoadChunkDelegate del    = reader.LoadChunk;

            del.BeginInvoke(c, FinishLoadChunk, del);
        }