/// <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(); }
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); }