/// <summary> /// execute the render loop, which /// is actually pretty simple at this point /// </summary> public void Go() { frameTimer.Reset(); float frameTime; uint frameTimeMod50 = 0; SafeTimer timer = new SafeTimer(); Console.Out.WriteLine(timer.Diff / 1000.0f); float MAX_UPDATE = 1.0f / 60.0f; //float MAX_SPEED = 30.0f; // RenderOneFrame returns false when we Ogre // is done. Alternatively, we can not have // the loop and merely call root.StartRendering while (true) { frameTime = frameTimer.Milliseconds / 1000.0f; //update input inputMgr.PollInputs(); if (input.IsDown(Key.Escape)) { break; } // grab events GrabEvents((uint)timer.Time, null); // grab a ship, if there are any ICollection <ClientShip> ships = shipMgr.Ships; if (ships.Count > 0) { IEnumerator <ClientShip> e = ships.GetEnumerator(); e.MoveNext(); if (input.IsPressed(Key.Return)) { Util.Log("Current State:" + e.Current.SceneNode.Position); } } frameTimeMod50 += frameTimer.Milliseconds; frameTimer.Reset(); if (frameTimeMod50 > 50) { eventMgr.Update(); frameTimeMod50 -= 50; } //world update float diff = (float)timer.Diff / 1000.0f; while (diff > MAX_UPDATE) { this.world.update(MAX_UPDATE); diff -= MAX_UPDATE; } if (diff > 0) { this.world.update(diff); } // score update TextRenderer.UpdateTextBox("frameCtr", "FPS: " + (int)(1 / (frameTime))); shipCam.Update(); if (!root.RenderOneFrame()) { break; } } }