/// <summary> /// Loop for committing saves and loads. /// </summary> private void commitLoop() { while (QuixelEngine.isActive()) { try { Thread.Sleep(3); if (saveQueue.Count > 0) { MeshFactory.nodesSaved++; lock (saveQueue) saveQueue.Dequeue().saveChanges(); } if (loadQueue.Count > 0) { Node node = null; lock (loadQueue) node = loadQueue.Dequeue(); if (node.loadChanges()) { MeshFactory.nodesLoaded++; lock (finishedLoadQueue) finishedLoadQueue.Enqueue(node); } } } catch (Exception e) { StreamWriter writer = new StreamWriter("Error Log.txt"); writer.WriteLine(e.Message + "\r\n" + e.StackTrace); writer.Close(); } } }
/// <summary> /// Continuously check if we have chunks to generate. /// </summary> private void generateLoop() { bool sleep = true; while (QuixelEngine.isActive()) { sleep = false; MeshFactory.MeshRequest req = MeshFactory.getNextRequest(); if (req == null) { sleep = true; } else { if (req.densities == null) { if (!req.hasDensities) { req.densities = DensityPool.getDensityData(); } else { req.densities = req.node.densityData; } } MeshFactory.GenerateMeshData(req); lock (finishedQueue) finishedQueue.Enqueue(req); } if (sleep) { Thread.Sleep(30); } else { Thread.Sleep(4); } } }
/// <summary> /// Continuously check if we have chunks to generate. /// </summary> private void recycleLoop() { while (QuixelEngine.isActive()) { Thread.Sleep(1); if (genQueue.Count > 0) { DensityData d = null; lock (genQueue) d = genQueue.Dequeue(); d.dispose(); lock (finishedQueue) finishedQueue.Enqueue(d); } else { Thread.Sleep(30); } } }