protected override void OnUpdate(float dt) { if (m_justPressed >= 0) { m_justPressed = -1; UpdateColours(); } // Update status text if (Visible) { m_statusText[0].String = string.Format("FPS: {0:F0}Hz Tris/Calls: {1}/{2}", App.FPS, RenderStats.Triangles, RenderStats.DrawCalls); var level = (m_game.CurrentState is LevelState) ? ((LevelState)m_game.CurrentState).LevelLoadPath : null; m_statusText[1].String = (level != null) ? level : ""; var cameraTransInv = m_game.Camera.Transform; MathUtils.FastInvert(ref cameraTransInv); var cameraPos = Vector3.TransformPosition(Vector3.Zero, cameraTransInv); if (m_game.CurrentState is LevelState) { var levelTransInv = ((LevelState)m_game.CurrentState).Level.Transform; MathUtils.FastInvert(ref levelTransInv); cameraPos = Vector3.TransformPosition(cameraPos, levelTransInv); } m_statusText[2].String = string.Format("{0:N2},{1:N2},{2:N2}", cameraPos.X, cameraPos.Y, cameraPos.Z); } // Update log if (Visible) { string[] log = App.RecentLog.ToArray(); for (int i = 0; i < m_recentLogText.Length; ++i) { var logIndex = i - (m_recentLogText.Length - log.Length); if (logIndex >= 0) { var text = log[logIndex]; var error = text.ToLowerInvariant().Contains("error"); m_recentLogText[i].String = text; m_recentLogText[i].Colour = error ? UIColours.Important : UIColours.Text; } else { m_recentLogText[i].String = ""; } } } // Handle option selection if (Screen.Keyboard.Keys[Key.F1].Pressed) { Visible = !Visible; if (Visible) { GC.Collect(); } m_justPressed = 1; UpdateColours(); } if (Screen.Keyboard.Keys[Key.F2].Pressed) { m_pendingScreenshot = m_game.QueueScreenshot(); m_justPressed = 2; UpdateColours(); } if (Screen.Keyboard.Keys[Key.F3].Pressed) { m_game.RenderUI = !m_game.RenderUI; m_justPressed = 3; UpdateColours(); } if (Screen.Keyboard.Keys[Key.F4].Pressed) { m_game.UseDebugCamera = !m_game.UseDebugCamera; m_justPressed = 4; UpdateColours(); } if (Screen.Keyboard.Keys[Key.F5].Pressed) { App.Log("Reloading assets"); Assets.ReloadAll(); TextureAtlas.ReloadAll(); LuaAnimation.ReloadAll(); var state = m_game.CurrentState; if (state is LevelState) { ((LevelState)state).OnReloadAssets(); } GC.Collect(); m_justPressed = 5; UpdateColours(); App.Log("Assets reloaded", LogLevel.User); } if (Screen.Keyboard.Keys[Key.F6].Pressed) { if (m_game.Language.IsDebug) { var desiredLanguageCode = m_game.Network.LocalUser.Language; if (m_game.User.Settings.Language != "system") { desiredLanguageCode = m_game.User.Settings.Language; } m_game.Language = Language.GetMostSimilarTo(desiredLanguageCode); } else { m_game.Language = Language.Get("languages/debug.lang"); } var state = m_game.CurrentState; if (state is LevelState) { ((LevelState)state).OnReloadAssets(); } m_justPressed = 6; UpdateColours(); } if (Screen.Keyboard.Keys[Key.F11].Pressed) { m_game.Window.Fullscreen = !m_game.Window.Fullscreen; m_game.User.Settings.Fullscreen = m_game.Window.Fullscreen; m_game.User.Settings.Save(); m_justPressed = 7; UpdateColours(); } // Handle requested screenshots if (m_pendingScreenshot != null && m_pendingScreenshot.Status != Status.Waiting) { if (m_pendingScreenshot.Status == Status.Complete) { var screenshot = m_pendingScreenshot.Result; screenshot.Save( Path.Combine( App.SavePath, Path.Combine("screenshots", DateTime.Now.ToString("s").Replace(":", "-") + ".png") ) ); screenshot.Dispose(); } m_pendingScreenshot = null; } }