diff --git a/Prefabs/Robot/RobotDisplay.tscn b/Prefabs/Robot/RobotDisplay.tscn index 00ed7f6..dc6daee 100644 --- a/Prefabs/Robot/RobotDisplay.tscn +++ b/Prefabs/Robot/RobotDisplay.tscn @@ -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"] diff --git a/Scripts/Gameplay/Survival/SurvivalState.cs b/Scripts/Gameplay/Survival/SurvivalState.cs index f298bf2..5e92378 100644 --- a/Scripts/Gameplay/Survival/SurvivalState.cs +++ b/Scripts/Gameplay/Survival/SurvivalState.cs @@ -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() diff --git a/Scripts/UI/Common/Camera3d.cs b/Scripts/UI/Common/Camera3d.cs index 0d4f20e..589af56 100644 --- a/Scripts/UI/Common/Camera3d.cs +++ b/Scripts/UI/Common/Camera3d.cs @@ -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; + } } diff --git a/Scripts/UI/Common/UIHandler.cs b/Scripts/UI/Common/UIHandler.cs index 7fb8893..763d83d 100644 --- a/Scripts/UI/Common/UIHandler.cs +++ b/Scripts/UI/Common/UIHandler.cs @@ -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}"; diff --git a/Scripts/UI/Robots/RobotDisplay.cs b/Scripts/UI/Robots/RobotDisplay.cs index 347f21c..1154f92 100644 --- a/Scripts/UI/Robots/RobotDisplay.cs +++ b/Scripts/UI/Robots/RobotDisplay.cs @@ -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); + } } diff --git a/Scripts/UI/Robots/RobotList.cs b/Scripts/UI/Robots/RobotList.cs index 3e73dd0..4e2ccfb 100644 --- a/Scripts/UI/Robots/RobotList.cs +++ b/Scripts/UI/Robots/RobotList.cs @@ -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); } }