public void UnloadChunk(Chunk chunk) { var point = chunk.Position; Debug.Log("Unloading chunk " + point); if (_goCache.ContainsKey(point)) { var go = _goCache[point]; Destroy(go); _goCache.Remove(point); } if (_chunks.ContainsKey(point)) { if (loader != null) { loader.SaveChunk(chunk); } chunk.Dispose(); _chunks.Remove(point); } }
public override Chunk LoadChunkAt(Vector3 worldOrigin) { int size = world.chunkSize; float scale = world.voxelSize; int buffer = size + 1; if (!_jobs.ContainsKey(worldOrigin)) { var job = CreateJob(worldOrigin); var handle = job.Schedule(); //Check to see if we completed it if (handle.IsCompleted) { handle.Complete(); var sample = ChunkFromJob(job); var c = new Chunk(world.OriginToPoint(worldOrigin), sample, size, world.Height); c.Recalculate(size, scale, worldOrigin, true); if (fileLoader != null) { fileLoader.SaveChunk(c); } _jobs.Remove(worldOrigin); return(c); } var holder = new JobHolder() { job = job, handle = handle, startTime = Time.time }; _jobs.Add(worldOrigin, holder); } else { var holder = _jobs[worldOrigin]; if (holder.handle.IsCompleted) { holder.handle.Complete(); var sample = ChunkFromJob(holder.job); var c = new Chunk(world.OriginToPoint(worldOrigin), sample, size, world.Height); c.Recalculate(size, scale, worldOrigin, true); if (fileLoader != null) { fileLoader.SaveChunk(c); } _jobs.Remove(worldOrigin); float duration = Time.time - holder.startTime; runningSum += duration; JobsCompleted++; TimeSpentAverage = runningSum / JobsCompleted; return(c); } } return(null); }