using System; using System.Diagnostics; using Godot; public partial class UIHandler { public void DisplayStats() { FPS.Text = Engine.GetFramesPerSecond().ToString() + " FPS"; RAM.Text = GetMemoryDisplay(); DisplaySurvivalStats(); DisplayWorldStats(); DisplayLoseCondition(); } private string GetMemoryDisplay() { double memory = Process.GetCurrentProcess().WorkingSet64 / (1024 * 1024); if (memory > 1024) { return Math.Round(memory / 1024, 2).ToString() + " GB"; } return memory.ToString() + " MB"; } private void DisplayRobotAlarm() { string messages = ""; if (GameData.survival.isDead) { messages += GameData.survival.currentStatus + "\r"; } foreach (Robot robot in GameData.robots) { if (robot.currentMessage.Length > 0) { messages += $"{robot.Name}: {robot.currentMessage}\r"; } } robotAlarm.Visible = messages.Length > 0; robotAlarm.TooltipText = messages; } private void DisplaySurvivalStats() { energyLabel.Text = $"Energy: {GameData.survival.energy:0}/{GameData.survival.maxEnergy:0}"; waterLabel.Text = $"Water: {GameData.survival.thirst:0}/{GameData.survival.maxThirst:0}"; hungerLabel.Text = $"Food: {GameData.survival.hunger:0}/{GameData.survival.maxHunger:0}"; survivalStatus.Text = GameData.survival.currentStatus; survivalStatus.Modulate = GameData.survival.currentStatus.Contains("critical") ? UIStyle.GetWarningColor() : Colors.White; if (GameData.survival.isDead) { ShowGameOver(); } } private void DisplayWorldStats() { currentLayer.Text = $"Layer: {GameData.currentLayer + 1}/{GameData.ruinSize}"; deepestLayer.Text = $"Gate depth: {GameData.lowestLayer}"; if (GameData.lowestLayer == GameData.ruinSize) { unlockLayer.Visible = false; return; } unlockLayer.TooltipText = "Gate requirements:\r" + GameData.map[GameData.lowestLayer].DisplayGateIngredients(); unlockLayer.Disabled = !GameData.inventory.CanCraft(GameData.map[GameData.lowestLayer].gateIngredients, 1); } private void DisplayLoseCondition() { if (!GameData.HasNoRobotRecovery()) return; ShowGameOver("No robots remain and no robot can be spawned from inventory."); } public void ShowGameOver() { ShowGameOver($"You died!\rReason: {GameData.survival.deathReason}\rBetter luck next time."); } public void ShowGameOver(string message) { if (gameOver.Visible) return; gameOver.GetNode("./VBoxContainer/Content").Text = $"[font_size=32]{message}\r"; gameOver.Show(); } public void HideGameOver() { gameOver.Hide(); } }