99 lines
2.5 KiB
C#
99 lines
2.5 KiB
C#
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<RichTextLabel>("./VBoxContainer/Content").Text = $"[font_size=32]{message}\r";
|
|
gameOver.Show();
|
|
}
|
|
|
|
public void HideGameOver()
|
|
{
|
|
gameOver.Hide();
|
|
}
|
|
}
|