From 21199f8026e654f7475b4a809d9e8e43e3445f23 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sun, 26 Apr 2026 13:44:15 +0200 Subject: [PATCH] Adding robots to the game and the ability to click on them --- Assets/Objects/Robot.glb | Bin 92820 -> 95504 bytes Game.tscn | 42 +++++++++++++++++++++++++++++++ Prefabs/Robot.tscn | 18 ++++++++++--- Prefabs/RobotVisual.tscn | 5 ++++ Scripts/Camera3d.cs | 38 ++++++++++++++++++++++++++++ Scripts/Helpers/GameData.cs | 2 ++ Scripts/Helpers/UIHandler.cs | 19 ++++++++++++++ Scripts/Helpers/UIHandler.cs.uid | 1 + Scripts/Robot.cs | 14 +++++++++++ Scripts/Robot.cs.uid | 1 + Scripts/World.cs | 13 +++++----- project.godot | 11 ++++++++ 12 files changed, 155 insertions(+), 9 deletions(-) create mode 100644 Prefabs/RobotVisual.tscn create mode 100644 Scripts/Helpers/UIHandler.cs create mode 100644 Scripts/Helpers/UIHandler.cs.uid create mode 100644 Scripts/Robot.cs create mode 100644 Scripts/Robot.cs.uid diff --git a/Assets/Objects/Robot.glb b/Assets/Objects/Robot.glb index 943d273c26e87f05cf909669b1e6ece8cb488947..c839f8650a2b65940f29b9f36290bf1d8f2dbd5e 100644 GIT binary patch literal 95504 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 Gg#RByKb=(o literal 92820 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 UKRVauIQ$oMUW$3vOEnMrFYV*&iU0rr diff --git a/Game.tscn b/Game.tscn index 9c82753..d0d9037 100644 --- a/Game.tscn +++ b/Game.tscn @@ -3,6 +3,7 @@ [ext_resource type="Script" uid="uid://br2udyi6t8yvf" path="res://Scripts/World.cs" id="1_xkndl"] [ext_resource type="Script" uid="uid://dqrdb3bvws6b6" path="res://Scripts/SteamworksHandler.cs" id="2_xkndl"] [ext_resource type="Script" uid="uid://c7khr6oist3ku" path="res://Scripts/Camera3d.cs" id="3_u44n3"] +[ext_resource type="Script" uid="uid://bm7knir4552j5" path="res://Scripts/Helpers/UIHandler.cs" id="4_sb48q"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_u44n3"] @@ -16,6 +17,7 @@ sky_material = SubResource("PanoramaSkyMaterial_u44n3") background_mode = 1 background_color = Color(0.27141052, 0.1874483, 0.13788113, 1) sky = SubResource("Sky_u44n3") +glow_enabled = true [node name="Main" type="Node3D" unique_id=234207355] @@ -32,3 +34,43 @@ script = ExtResource("3_u44n3") [node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=377970686] environment = SubResource("Environment_sb48q") + +[node name="Control" type="Control" parent="." unique_id=1713248285] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -2.0 +offset_bottom = 2.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("4_sb48q") + +[node name="CodingWindow" type="Panel" parent="Control" unique_id=1765248892] +layout_mode = 1 +anchors_preset = 11 +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -500.0 +grow_horizontal = 0 +grow_vertical = 2 + +[node name="Button" type="Button" parent="Control/CodingWindow" unique_id=2015284121] +layout_mode = 0 +offset_left = 100.0 +offset_top = 600.0 +offset_right = 400.0 +offset_bottom = 635.0 +text = "Move" + +[node name="PositionInput" type="LineEdit" parent="Control/CodingWindow" unique_id=1834676849] +layout_mode = 0 +offset_left = 125.0 +offset_top = 50.0 +offset_right = 375.0 +offset_bottom = 85.0 +placeholder_text = "Position... (X/Y OR X,Y)" +alignment = 1 diff --git a/Prefabs/Robot.tscn b/Prefabs/Robot.tscn index a1faeac..81ca16b 100644 --- a/Prefabs/Robot.tscn +++ b/Prefabs/Robot.tscn @@ -1,5 +1,17 @@ -[gd_scene format=3 uid="uid://cjae60v4c60vb"] +[gd_scene format=3 uid="uid://dciwxejdji2lg"] -[ext_resource type="PackedScene" uid="uid://bccs6xik7xv8s" path="res://Assets/Objects/Robot.glb" id="1_8peeh"] +[ext_resource type="PackedScene" uid="uid://cjae60v4c60vb" path="res://Prefabs/RobotVisual.tscn" id="2_3hvm5"] +[ext_resource type="Script" uid="uid://e0pgy7jya41y" path="res://Scripts/Robot.cs" id="2_j80uv"] -[node name="Robot" unique_id=1113392384 instance=ExtResource("1_8peeh")] +[sub_resource type="BoxShape3D" id="BoxShape3D_vquur"] +size = Vector3(1.1176758, 0.7307129, 1.0234375) + +[node name="RobotBase" type="CharacterBody3D" unique_id=2075379542] +collision_layer = 2 +script = ExtResource("2_j80uv") + +[node name="RobotVisual" parent="." unique_id=516119901 instance=ExtResource("2_3hvm5")] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1405728816] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.05883789, 0.29821777, -0.01171875) +shape = SubResource("BoxShape3D_vquur") diff --git a/Prefabs/RobotVisual.tscn b/Prefabs/RobotVisual.tscn new file mode 100644 index 0000000..e9aba3f --- /dev/null +++ b/Prefabs/RobotVisual.tscn @@ -0,0 +1,5 @@ +[gd_scene format=3 uid="uid://cjae60v4c60vb"] + +[ext_resource type="PackedScene" uid="uid://bccs6xik7xv8s" path="res://Assets/Objects/Robot.glb" id="1_wvvfd"] + +[node name="Robot" unique_id=516119901 instance=ExtResource("1_wvvfd")] diff --git a/Scripts/Camera3d.cs b/Scripts/Camera3d.cs index bf5968a..2b0ea57 100644 --- a/Scripts/Camera3d.cs +++ b/Scripts/Camera3d.cs @@ -36,4 +36,42 @@ public partial class Camera3d : Camera3D Position = new Vector3(Position.X, 10 - visibleLayer * 4, Position.Z); } } + + public override void _Input(InputEvent @event) + { + if (@event is InputEventMouseButton mouse && + mouse.ButtonIndex == MouseButton.Left && + mouse.Pressed) + { + var camera = GetViewport().GetCamera3D(); + + Vector2 mousePos = mouse.Position; + + Vector3 from = camera.ProjectRayOrigin(mousePos); + Vector3 to = from + camera.ProjectRayNormal(mousePos) * 1000f; + + var spaceState = GetWorld3D().DirectSpaceState; + + var query = PhysicsRayQueryParameters3D.Create(from, to); + + query.CollisionMask = 1 << 1; + + var result = spaceState.IntersectRay(query); + + if (result.Count > 0) + { + Variant colliderVariant = result["collider"]; + + Node hit = colliderVariant.As(); + + GD.Print($"Clicked robot: {hit.Name}"); + + // Optional: call method on robot + if (hit is Node robot) + { + robot.Call("OnClicked"); + } + } + } + } } diff --git a/Scripts/Helpers/GameData.cs b/Scripts/Helpers/GameData.cs index 1d4eff2..e6f37d3 100644 --- a/Scripts/Helpers/GameData.cs +++ b/Scripts/Helpers/GameData.cs @@ -8,5 +8,7 @@ public partial class GameData public static int currentLayer = 0; //The layer that is currently visible public static int visibleLayer = 0; + //Determines if the player can move the camera or not (Necessary for input and options menu) + public static bool canMove = true; } diff --git a/Scripts/Helpers/UIHandler.cs b/Scripts/Helpers/UIHandler.cs new file mode 100644 index 0000000..2f72bd5 --- /dev/null +++ b/Scripts/Helpers/UIHandler.cs @@ -0,0 +1,19 @@ +using Godot; + +public partial class UIHandler : Control +{ + public override void _Ready() + { + + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + if (Input.IsActionJustPressed("codingwindow")) + { + GetNode("./CodingWindow").Visible = !GetNode("./CodingWindow").Visible; + } + } + +} diff --git a/Scripts/Helpers/UIHandler.cs.uid b/Scripts/Helpers/UIHandler.cs.uid new file mode 100644 index 0000000..6ae2d27 --- /dev/null +++ b/Scripts/Helpers/UIHandler.cs.uid @@ -0,0 +1 @@ +uid://bm7knir4552j5 diff --git a/Scripts/Robot.cs b/Scripts/Robot.cs new file mode 100644 index 0000000..64b6c9d --- /dev/null +++ b/Scripts/Robot.cs @@ -0,0 +1,14 @@ +using Godot; + +public partial class Robot : Node3D +{ + public void Move() + { + + } + + public void OnClicked() + { + GD.Print("Test!"); + } +} diff --git a/Scripts/Robot.cs.uid b/Scripts/Robot.cs.uid new file mode 100644 index 0000000..bc84dea --- /dev/null +++ b/Scripts/Robot.cs.uid @@ -0,0 +1 @@ +uid://e0pgy7jya41y diff --git a/Scripts/World.cs b/Scripts/World.cs index 654f799..c5f088a 100644 --- a/Scripts/World.cs +++ b/Scripts/World.cs @@ -16,12 +16,6 @@ public partial class World : Node3D Layer layerNode; private MultiMeshHandler multiMeshHandler; - FastNoiseLite noise = new FastNoiseLite() - { - NoiseType = FastNoiseLite.NoiseTypeEnum.Perlin, - Frequency = 0.05f, - Seed = 1337 - }; public override void _Ready() { @@ -90,6 +84,13 @@ public partial class World : Node3D HandleRenderData(BuildRenderData(currentLayer)); visibleLayer = currentLayer; } + + if (Input.IsActionJustPressed("spawn_robot")) + { + Robot robot = ResourceLoader.LoadRobotPrefab().Instantiate(); + robot.Position = map[0].tiles[1,1].Position; + AddChild(robot); + } } private void GenerateWorld() diff --git a/project.godot b/project.godot index e0b9b32..f25e0d0 100644 --- a/project.godot +++ b/project.godot @@ -70,11 +70,22 @@ sprint={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +spawn_robot={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +] +} +codingwindow={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"location":0,"echo":false,"script":null) +] +} [layer_names] 2d_render/layer_1="BackgroundUI" 2d_render/layer_2="World" +3d_physics/layer_2="Robots" [steam]