void MoveWorld() { Vector3 cp = Chunk.GetChunkPos((int)transform.position.x, (int)transform.position.y, (int)transform.position.z); if (Math.Abs(cp.x) > 2 || Math.Abs(cp.y) > 2 || Math.Abs(cp.z) > 2) { ChunkGameObjectHandler.UpdateChunkPositions(cp); } }
static void CheckCompletedDrawingWork(CompletedSubChunkDrawingWork cscdw) { AssignedWorkContainer awc; AssignedWork.TryGetValue(cscdw.ChunkPos, out awc); AssignedJob aj = awc.TryGetAssignedJob(JobType.Draw); aj.CompletedCount += 1; Chunk c; ChunkHandler.TryGetChunk(aj.OwnerChunkPos, out c); if (aj.IsCompleted) { awc.RemoveAssignedJob(JobType.Draw); ChunkGameObjectHandler.UpdateMesh(c.ChunkPos, c.GetMesh()).transform.position = c.ChunkPos * Chunk.CHUNKSIZE; } }
public static void DrawChunk(Vector3 chunkPos) { AssignedWorkContainer awc = GetWorkContainer(chunkPos); if (!awc.ContainsWork(JobType.Draw)) { Chunk c; TryGetChunk(chunkPos, out c); ThreadedSubChunkDrawingWork[] workArr = c.GetSubChunksToDraw(); if (workArr.Length > 0) { awc.AddAssignedJob(JobType.Draw, new AssignedJob(chunkPos, JobType.Draw, workArr)); ThreadHandler.EnqueuWork(workArr); } else { ChunkGameObjectHandler.UpdateMesh(c.ChunkPos, c.GetMesh()).transform.position = c.ChunkPos * Chunk.CHUNKSIZE; } } }
static void CheckCompletedViewDistanceUnloaderWork(CompletedThreadedViewDistanceUnloader ctcduw) { foreach (Vector3 v in ctcduw.DrawnChunksToUnload) { ChunkGameObjectHandler.PoolChunk(v); } int prevCount = ChunkCollection.Count; foreach (Vector3 v in ctcduw.LoadedChunksToUnload) { RemoveChunk(v); AssignedWork.Remove(v); } int finalCount = prevCount - ChunkCollection.Count; if (finalCount > 0) { Debug.Log($"Unloaded {finalCount} chunks"); Debug.Log($"There are currently {ChunkCollection.Count} loaded chunks"); } NonChunkSpecificWork.Remove(JobType.UnloadOutsideViewDistance); }