Added robot follow button

This commit is contained in:
2026-05-11 19:37:28 +02:00
parent e43b0a8d37
commit 9a35a11df4
6 changed files with 54 additions and 1 deletions
+6
View File
@@ -33,6 +33,11 @@ layout_mode = 2
size_flags_horizontal = 3
text = "Jump to"
[node name="Follow" type="Button" parent="HBoxContainer" unique_id=101092106]
layout_mode = 2
size_flags_horizontal = 3
text = "Follow"
[node name="CurrentScript" type="RichTextLabel" parent="HBoxContainer" unique_id=425408407]
layout_mode = 2
size_flags_horizontal = 3
@@ -42,3 +47,4 @@ horizontal_alignment = 1
vertical_alignment = 1
[connection signal="pressed" from="HBoxContainer/Jump" to="." method="OnJumpToClicked"]
[connection signal="pressed" from="HBoxContainer/Follow" to="." method="OnFollowToClicked"]
@@ -85,6 +85,11 @@ public class SurvivalState
{
energy = Math.Clamp(energy + 40f, 0f, maxEnergy);
}
if (GameData.inventory.TryRemoveItem("coal", 1))
{
energy = Math.Clamp(energy + 10f, 0f, maxEnergy);
}
}
private void UpdateStatus()
+15
View File
@@ -6,6 +6,7 @@ public partial class Camera3d : Camera3D
[Export] public float Speed = 7.5f;
[Export] public float MouseSensitivity = 0.2f;
[Export] public float ScrollStrength = 5.0f;
private Robot robot;
public override void _Ready()
{
@@ -33,13 +34,27 @@ public partial class Camera3d : Camera3D
if (direction != Vector3.Zero)
{
if(robot != null) robot = null;
direction = direction.Normalized() * Speed * (Input.IsActionPressed("sprint") ? 2.5f : 1) * d;
Translate(direction);
}
else
{
if(robot != null)
{
Position = new Vector3(robot.Position.X, 10 - visibleLayer * 4, robot.Position.Z + 4f);
}
}
if (Position.Y != 10 - visibleLayer * 4)
{
Position = new Vector3(Position.X, 10 - visibleLayer * 4, Position.Z);
}
}
public void Follow(Robot robot)
{
this.robot = robot;
}
}
+14 -1
View File
@@ -6,7 +6,7 @@ public partial class UIHandler : Control
{
[Export] CodingWindow codingWindow;
[Export] RobotList robotList;
[Export] Camera3D mainCam;
[Export] Camera3d mainCam;
[Export] Map map;
[Export] RichTextLabel FPS;
[Export] RichTextLabel RAM;
@@ -27,15 +27,18 @@ public partial class UIHandler : Control
private bool receivedRobotJumpSignal = false;
private bool receivedRobotFollowSignal = false;
public override void _Ready()
{
UIStyle.Apply(this);
robotList.OnRobotJumpTo += OnRobotJumpTo;
robotList.OnRobotFollow += OnRobotFollow;
}
public override void _ExitTree()
{
robotList.OnRobotJumpTo -= OnRobotJumpTo;
robotList.OnRobotFollow -= OnRobotFollow;
}
public override void _Process(double delta)
@@ -81,6 +84,7 @@ public partial class UIHandler : Control
public void HandleRobotListButton()
{
receivedRobotFollowSignal = false;
receivedRobotJumpSignal = false;
OpenUIElement(robotList);
}
@@ -182,6 +186,15 @@ public partial class UIHandler : Control
OpenUIElement(codingWindow);
}
private void OnRobotFollow(Robot robot)
{
if (receivedRobotFollowSignal) return;
receivedRobotFollowSignal = true;
mainCam.Follow(robot);
OpenUIElement(codingWindow);
}
private void DisplaySurvivalStats()
{
energyLabel.Text = $"Energy: {GameData.survival.energy:0}/{GameData.survival.maxEnergy:0}";
+7
View File
@@ -6,6 +6,8 @@ public partial class RobotDisplay : PanelContainer
[Export] public RichTextLabel currentScript;
[Signal]
public delegate void OnRobotJumpToEventHandler(Robot robot);
[Signal]
public delegate void OnRobotFollowEventHandler(Robot robot);
public Robot robot;
public override void _Process(double delta)
@@ -22,4 +24,9 @@ public partial class RobotDisplay : PanelContainer
{
EmitSignal(SignalName.OnRobotJumpTo, robot);
}
public void OnFollowToClicked()
{
EmitSignal(SignalName.OnRobotFollow, robot);
}
}
+7
View File
@@ -7,6 +7,8 @@ public partial class RobotList : PanelContainer
[Export] Button spawnRobot;
[Signal]
public delegate void OnRobotJumpToEventHandler(Robot robot);
[Signal]
public delegate void OnRobotFollowEventHandler(Robot robot);
private PackedScene robotDisplayPrefab;
private string spawnId = "";
@@ -46,6 +48,11 @@ public partial class RobotList : PanelContainer
EmitSignal(SignalName.OnRobotJumpTo, robot);
Visible = false;
};
display.OnRobotFollow += (robot) =>
{
EmitSignal(SignalName.OnRobotFollow, robot);
Visible = false;
};
robotList.AddChild(display);
}
}