private void TerrainDataCalculateThread(Action <float[, , ]> callback) { float[,] heightmap = GenerateHeightMap(); float[,,] densitymap = GenerateDensityMap(heightmap); TerrainThreadInfo threadInfo = new TerrainThreadInfo(callback, densitymap); lock (ChunkManager.Instance.terrainThreadInfoQueue) { ChunkManager.Instance.terrainThreadInfoQueue.Enqueue(threadInfo); } }
private void Update() { if (terrainThreadInfoQueue.Count > 0) { for (int i = 0; i < terrainThreadInfoQueue.Count; i++) { TerrainThreadInfo threadInfo = terrainThreadInfoQueue.Dequeue(); threadInfo.callback(threadInfo.calculatedInfo); } } currentPos = GetChunkAtPosition(GameManager.PlayerPosition); if (!currentPos.Equals(prevPos)) { prevPos = currentPos; UpdateTerrain(currentPos, renderDistance); } }
void Update() { if (terrainThreadInfoQueue.Count > 0) { for (int i = 0; i < terrainThreadInfoQueue.Count; i++) { TerrainThreadInfo <Terrain> threadInfo = terrainThreadInfoQueue.Dequeue(); threadInfo.callback.Invoke(threadInfo.parameter); } } if (meshDataThreadInfoQueue.Count > 0) { for (int i = 0; i < meshDataThreadInfoQueue.Count; i++) { TerrainThreadInfo <MeshData> threadInfo = meshDataThreadInfoQueue.Dequeue(); threadInfo.callback.Invoke(threadInfo.parameter); } } }