class DebugMonitor { protected bool m_IsUsingKBM; private Widget m_WidgetRoot; private TextWidget m_WindowLabelText; private TextWidget m_VersionValue; private TextWidget m_HealthValue; private TextWidget m_BloodValue; private TextWidget m_DmgSourceValue; private TextWidget m_MapTileValue; private TextWidget m_PositionValue; private TextWidget m_CopyPositionInfo; private TextWidget m_FPSValue; private TextWidget m_FPSMinValue; private TextWidget m_FPSMaxValue; private TextWidget m_FPSAvgValue; private int m_FPSTextDefaultColor; void DebugMonitor() { m_WidgetRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/debug/day_z_debug_monitor.layout"); m_WidgetRoot.Show(false); m_VersionValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("VersionValue")); m_HealthValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("HealthValue")); m_BloodValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("BloodValue")); m_DmgSourceValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("DmgSourceValue")); m_MapTileValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("MapTileValue")); m_PositionValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("PositionValue")); m_CopyPositionInfo = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("CopyPositionInfo")); m_FPSValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("FPSCurrentValue")); m_FPSMinValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("FPSMinValue")); m_FPSMaxValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("FPSMaxValue")); m_FPSAvgValue = TextWidget.Cast(m_WidgetRoot.FindAnyWidget("FPSAvgValue")); m_FPSTextDefaultColor = m_FPSValue.GetColor(); } void Init() { string version; g_Game.GetVersion(version); m_VersionValue.SetText(" " + version); GetGame().GetMission().GetOnInputDeviceChanged().Insert(OnInputDeviceChanged); if (GetGame().GetInput().IsKeyboardConnected()) m_IsUsingKBM = true; m_WidgetRoot.Show(true); } void SetHealth(float value) { string health = string.Format(" %1", value.ToString()); m_HealthValue.SetText(health); } void SetBlood(float value) { string blood = string.Format(" %1", value.ToString()); m_BloodValue.SetText(blood); } void SetLastDamage(string value) { if (value != "") m_DmgSourceValue.SetText(" " + value); else m_DmgSourceValue.SetText(" -"); } /*! Update the framerate values displayed within the debug monitor with new ones. */ void SetFramerate(float current, float min, float max, float avg) { SetFramerateText(m_FPSValue, current); SetFramerateText(m_FPSMinValue, min); SetFramerateText(m_FPSMaxValue, max); SetFramerateText(m_FPSAvgValue, avg); } /*! Sets the provided text `widget` to display framerate `value`. Formats and colors the widget according to the value. */ protected void SetFramerateText(TextWidget widget, float value) { // Ideally we would poll the refresh rate and base the values as // percentage thereof, but there is no such API in scripts. #ifdef PLATFORM_CONSOLE // default [30, inf] ; orange [20, 29] ; red [0, 19] if (value > 29) widget.SetColor(m_FPSTextDefaultColor); else if (value > 19) widget.SetColor(0xFFFF8000); // COLOR_ORANGE else widget.SetColor(COLOR_RED); #else // default [60, inf] ; yellow [40, 59] ; orange [30, 39] ; red [0, 29] if (value > 59) widget.SetColor(m_FPSTextDefaultColor); else if (value > 39) widget.SetColor(COLOR_YELLOW); else if (value > 29) widget.SetColor(0xFFFF8000); // COLOR_ORANGE else widget.SetColor(COLOR_RED); #endif widget.SetTextFormat("%1", Math.Round(value)); } void SetPosition(vector value) { m_MapTileValue.SetText(" " + CalculateMapTile(value)); string position = string.Format(" %1 %2 %3", value[0].ToString(), value[1].ToString(), value[2].ToString()); m_PositionValue.SetText(position); if (GetUApi().GetInputByID(UAUICopyDebugMonitorPos).LocalPress()) { string adjusted = (value[0] + 200000).ToString() + " " + value[2].ToString(); GetGame().CopyToClipboard(adjusted); } if (m_IsUsingKBM) m_CopyPositionInfo.SetText(" (P to clipboard)"); else m_CopyPositionInfo.SetText(""); } void Show() { m_WidgetRoot.Show(true); } void Hide() { m_WidgetRoot.Show(false); } string CalculateMapTile(vector pos) { string tile; float worldSize = GetGame().GetWorld().GetWorldSize(); float tileX = Math.InverseLerp(0, worldSize, pos[0]); float tileY = Math.InverseLerp(0, worldSize, pos[2]); tile = GetTileFomFraction(tileX).ToString() + GetTileFomFraction(tileY).ToString(); return tile; } int GetTileFomFraction(float fraction) { if (fraction < 0.25) return 0; else if (fraction < 0.5) return 1; else if (fraction < 0.75) return 2; else return 3; } void OnInputDeviceChanged(EInputDeviceType pInputDeviceType) { if (pInputDeviceType == EInputDeviceType.MOUSE_AND_KEYBOARD) m_IsUsingKBM = true; else m_IsUsingKBM = false; } bool IsVisible() { return m_WidgetRoot.IsVisible(); } };