Cleaned up project with better structure.

This commit is contained in:
2026-05-09 11:29:48 +02:00
parent 1ad3454f6a
commit 6708aa277f
95 changed files with 711 additions and 700 deletions
+144
View File
@@ -0,0 +1,144 @@
using System;
using System.Diagnostics;
using Godot;
public partial class UIHandler : Control
{
[Export] CodingWindow codingWindow;
[Export] RobotList robotList;
[Export] Camera3D mainCam;
[Export] Map map;
[Export] RichTextLabel FPS;
[Export] RichTextLabel RAM;
[Export] PanelContainer options;
[Export] Control uiContent;
[Export] PanelContainer menu;
[Export] PanelContainer inventory;
[Export] ResearchList researchList;
[Export] TextureRect robotAlarm;
private bool receivedRobotJumpSignal = false;
public override void _Ready()
{
robotList.OnRobotJumpTo += OnRobotJumpTo;
}
public override void _ExitTree()
{
robotList.OnRobotJumpTo -= OnRobotJumpTo;
}
public override void _Process(double delta)
{
DisplayStats();
DisplayRobotAlarm();
Control focused = GetViewport().GuiGetFocusOwner();
if (focused is LineEdit || focused is TextEdit)
return;
if (Input.IsActionJustPressed("map")) HandleMapButton();
if (Input.IsActionJustPressed("menu")) HandleMenuButton();
if (Input.IsActionJustPressed("robot_list")) HandleRobotListButton();
if (Input.IsActionJustPressed("inventory")) HandleInventoryButton();
if (Input.IsActionJustPressed("research")) HandleResearchButton();
}
public void HandleMenuButton()
{
OpenUIElement(menu);
}
public void HandleMenu()
{
HandleMenuButton();
}
public void ShowOptions()
{
OpenUIElement(options);
}
public void HandleMapButton()
{
OpenUIElement(map);
if (map.Visible) map.ShowMap();
}
public void HandleRobotListButton()
{
receivedRobotJumpSignal = false;
OpenUIElement(robotList);
}
public void HandleInventoryButton()
{
OpenUIElement(inventory);
}
public void HandleResearchButton()
{
OpenUIElement(researchList);
if (researchList.Visible) researchList.SetupGraph();
}
public void DisplayStats()
{
FPS.Text = Engine.GetFramesPerSecond().ToString() + " FPS";
double memory = Process.GetCurrentProcess().WorkingSet64 / (1024 * 1024);
string memoryDisplay = memory > 1024 ? Math.Round(memory / 1024, 2).ToString() + " GB" : memory.ToString() + " MB";
RAM.Text = memoryDisplay;
}
public void ExitGame()
{
GetTree().ChangeSceneToFile("res://Scenes/MainMenu.tscn");
}
public void OpenUIElement(Control element)
{
if (element.Visible)
{
element.Hide();
}
else
{
element.Show();
}
HideUIElements(element);
}
private void HideUIElements(Control element)
{
foreach (PanelContainer child in uiContent.GetChildren())
{
if (child == element) continue;
child.Visible = false;
}
}
private void DisplayRobotAlarm()
{
string messages = "";
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 OnRobotJumpTo(Robot robot)
{
if (receivedRobotJumpSignal) return;
receivedRobotJumpSignal = true;
mainCam.Position = new Vector3(robot.Position.X, mainCam.Position.Y, robot.Position.Z + 3f);
codingWindow.SetRobot(robot);
OpenUIElement(codingWindow);
}
}