示例#1
0
 /// <summary>
 /// Primary game loop.
 /// </summary>
 public void GameLoop()
 {
     while (Running)
     {
         _resetEvent.WaitOne(1);
         FCounter.Update();
         try {
             if (WorldLoaded && GameTime != null)
             {
                 Users.Frame();
                 if (GameTime.Update())                          // every second
                 {
                     if (GameTime.TickIncrease)                  // update when enough seconds pass to increase tick.
                     {
                         Logger.Log("Updating world. Tick: {0}", GameTime.Tick.ToString());
                         Users.TickUpdate();
                         Structures.TickUpdate();
                         _taskQueue.Update();
                         Save();
                         SockServ.Broadcast("tick", GameTime.Tick.ToString());
                     }
                 }
             }
             //Net.Update();
             _taskQueue.Update();                 // run items queued during frame.
             Logger.Update();                     // print items sent to log during frame.
         }
         catch (Exception e) {
             Logger.LogError("{0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);
         }
     }
 }
示例#2
0
 /// <summary>
 /// Save and exit server.
 /// </summary>
 public void Exit()
 {
     WorldLoaded = false;
     SockServ.Stop("stopping server...");
     TaskQueue.Close();
     Running = false;
     autoSaver.Stop();
     _tickThread.Abort();
 }