// Update is called once per frame void Update() { ArrayList o = new ArrayList(); lock (creationQueue) { int countCreation = 0; while (creationQueue.Count > 0 && countCreation < 1) { countCreation++; ChunkCreationParameters para = creationQueue.Dequeue(); o.Add(para); } } foreach (ChunkCreationParameters para in o) { chunkManager.CreateChunk(para.x, para.y, para.z, para.ids); } lock (relationQueue) { int countRelations = 0; while (relationQueue.Count > 0 && countRelations < 64) { countRelations++; Chunk c = relationQueue.Dequeue(); if (c.GetChunkDistanceToPlayer() > Chunk.renderDistanceSquared) { continue; } countRelations++; chunkManager.UpdateRelations(c); } } lock (renderQueue) { int countRender = 0; while (renderQueue.Count > 0 && countRender < 32) { Chunk c = renderQueue.Dequeue(); if (c.GetChunkDistanceToPlayer() > Chunk.renderDistanceSquared) { continue; } countRender++; c.RenderMesh(); } } }
public void QueueCreation(int x, int y, int z, byte[] ids) { ChunkCreationParameters c = new ChunkCreationParameters() { x = x, y = y, z = z, ids = ids }; lock (creationQueue) { creationQueue.Enqueue(c); } }