Ejemplo n.º 1
0
        /// <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();
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
                }
            }
        }
Ejemplo n.º 3
0
        /// <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);
                }
            }
        }