From c50caefc6fd1c55997a64dcafb27a97e33044f64 Mon Sep 17 00:00:00 2001 From: leca Date: Sat, 8 Jun 2024 03:37:05 +0300 Subject: [PATCH] Add menu for tile type changing --- project.godot | 7 +- .../UI/{ingame_menu.tscn => escape_menu.tscn} | 12 +-- scenes/UI/ui.tscn | 91 +++++++++++++++---- scripts/God.gd | 31 +++++-- scripts/ingame_menu.gd | 8 +- 5 files changed, 112 insertions(+), 37 deletions(-) rename scenes/UI/{ingame_menu.tscn => escape_menu.tscn} (91%) diff --git a/project.godot b/project.godot index f6d699d..236c9b0 100644 --- a/project.godot +++ b/project.godot @@ -81,7 +81,12 @@ LMC={ "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":84,"key_label":0,"unicode":116,"echo":false,"script":null) ] } -ingame_menu={ +game_menu={ +"deadzone": 0.5, +"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":4194306,"key_label":0,"unicode":0,"echo":false,"script":null) +] +} +escape_menu={ "deadzone": 0.5, "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":4194305,"key_label":0,"unicode":0,"echo":false,"script":null) ] diff --git a/scenes/UI/ingame_menu.tscn b/scenes/UI/escape_menu.tscn similarity index 91% rename from scenes/UI/ingame_menu.tscn rename to scenes/UI/escape_menu.tscn index 828f3b9..750e3f3 100644 --- a/scenes/UI/ingame_menu.tscn +++ b/scenes/UI/escape_menu.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=3 uid="uid://csfa8wr1fbfb2"] -[ext_resource type="Script" path="res://scripts/ingame_menu.gd" id="1_swq50"] -[ext_resource type="Script" path="res://scripts/m_button.gd" id="2_cehp5"] +[ext_resource type="Script" path="res://scripts/ingame_menu.gd" id="1_ln8gu"] +[ext_resource type="Script" path="res://scripts/m_button.gd" id="2_tsmj0"] [node name="ingame_menu" type="Control"] layout_mode = 3 @@ -10,7 +10,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -script = ExtResource("1_swq50") +script = ExtResource("1_ln8gu") [node name="PanelContainer" type="PanelContainer" parent="."] modulate = Color(1, 1, 1, 0.501961) @@ -48,7 +48,7 @@ offset_bottom = -14.0 size_flags_horizontal = 4 size_flags_vertical = 4 text = "Save world" -script = ExtResource("2_cehp5") +script = ExtResource("2_tsmj0") [node name="save_exit_button" type="Button" parent="Buttons"] layout_mode = 2 @@ -59,7 +59,7 @@ offset_bottom = 53.0 size_flags_horizontal = 4 size_flags_vertical = 4 text = "Save and exit game" -script = ExtResource("2_cehp5") +script = ExtResource("2_tsmj0") [node name="exit_nosave_button" type="Button" parent="Buttons"] layout_mode = 2 @@ -70,4 +70,4 @@ offset_bottom = 243.0 size_flags_horizontal = 4 size_flags_vertical = 4 text = "exit without saving" -script = ExtResource("2_cehp5") +script = ExtResource("2_tsmj0") diff --git a/scenes/UI/ui.tscn b/scenes/UI/ui.tscn index 9d81cfb..9e18969 100644 --- a/scenes/UI/ui.tscn +++ b/scenes/UI/ui.tscn @@ -1,8 +1,20 @@ -[gd_scene load_steps=3 format=3 uid="uid://bs7ctvbx7xov5"] +[gd_scene load_steps=7 format=3 uid="uid://bs7ctvbx7xov5"] [ext_resource type="Script" path="res://scripts/ingame_menu.gd" id="1_6fvrf"] [ext_resource type="Script" path="res://scripts/menu_button.gd" id="2_n0jsa"] +[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_0ge5s"] +size = Vector2(64, 64) + +[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_pitss"] +size = Vector2(64, 64) + +[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_j1lo1"] +size = Vector2(64, 64) + +[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_23dg4"] +size = Vector2(64, 64) + [node name="UI" type="Control"] layout_mode = 3 anchors_preset = 15 @@ -12,7 +24,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 -[node name="ingame_menu" type="Control" parent="."] +[node name="escape_menu" type="Control" parent="."] visible = false layout_mode = 1 anchors_preset = 15 @@ -22,7 +34,7 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_6fvrf") -[node name="PanelContainer" type="PanelContainer" parent="ingame_menu"] +[node name="PanelContainer" type="PanelContainer" parent="escape_menu"] modulate = Color(1, 1, 1, 0.501961) layout_mode = 1 anchors_preset = 15 @@ -35,7 +47,7 @@ offset_bottom = -93.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Buttons" type="Control" parent="ingame_menu"] +[node name="Buttons" type="Control" parent="escape_menu"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -49,7 +61,7 @@ offset_bottom = 20.0 grow_horizontal = 2 grow_vertical = 2 -[node name="save_world_button" type="Button" parent="ingame_menu/Buttons"] +[node name="save_world_button" type="Button" parent="escape_menu/Buttons"] layout_mode = 2 offset_left = -45.0 offset_top = -45.0 @@ -60,7 +72,7 @@ size_flags_vertical = 4 text = "Save world" script = ExtResource("2_n0jsa") -[node name="save_exit_button" type="Button" parent="ingame_menu/Buttons"] +[node name="save_exit_button" type="Button" parent="escape_menu/Buttons"] layout_mode = 2 offset_left = -71.0 offset_top = 22.0 @@ -71,7 +83,7 @@ size_flags_vertical = 4 text = "Save and exit game" script = ExtResource("2_n0jsa") -[node name="exit_nosave_button" type="Button" parent="ingame_menu/Buttons"] +[node name="exit_nosave_button" type="Button" parent="escape_menu/Buttons"] layout_mode = 2 offset_left = 334.0 offset_top = 212.0 @@ -82,33 +94,80 @@ size_flags_vertical = 4 text = "exit without saving" script = ExtResource("2_n0jsa") -[node name="velocity_label" type="Label" parent="."] +[node name="game_overlay" type="Control" parent="."] +anchors_preset = 0 +offset_right = 40.0 +offset_bottom = 40.0 +mouse_filter = 1 + +[node name="velocity_label" type="Label" parent="game_overlay"] layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 anchor_right = 1.0 -offset_left = -40.0 +offset_left = 1060.0 +offset_right = 1112.0 offset_bottom = 23.0 grow_horizontal = 0 text = "Speed:" -[node name="Panel" type="Panel" parent="."] +[node name="Panel" type="Panel" parent="game_overlay"] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 anchor_bottom = 0.5 -offset_left = -4.0 -offset_top = -4.0 -offset_right = 4.0 -offset_bottom = 4.0 +offset_left = 552.0 +offset_top = 300.0 +offset_right = 560.0 +offset_bottom = 308.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 -[node name="tile_type_label" type="Label" parent="."] +[node name="tile_type_label" type="Label" parent="game_overlay"] layout_mode = 0 -offset_right = 40.0 +offset_right = 113.0 offset_bottom = 23.0 text = "Tile type: Plain" + +[node name="game_menu" type="Control" parent="."] +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_6fvrf") + +[node name="Panel" type="Panel" parent="game_menu"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 40.0 +offset_top = 40.0 +offset_right = -40.0 +offset_bottom = -40.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="powers_list" type="ItemList" parent="game_menu/Panel"] +layout_mode = 1 +anchors_preset = 9 +anchor_bottom = 1.0 +offset_right = 387.0 +grow_vertical = 2 +allow_reselect = true +item_count = 4 +max_columns = 3 +item_0/text = "Empty" +item_0/icon = SubResource("PlaceholderTexture2D_0ge5s") +item_1/text = "Plain" +item_1/icon = SubResource("PlaceholderTexture2D_pitss") +item_2/text = "Forest" +item_2/icon = SubResource("PlaceholderTexture2D_j1lo1") +item_3/text = "Lake" +item_3/icon = SubResource("PlaceholderTexture2D_23dg4") diff --git a/scripts/God.gd b/scripts/God.gd index 7110b89..6eb0df1 100644 --- a/scripts/God.gd +++ b/scripts/God.gd @@ -8,6 +8,9 @@ var walk = 0.25 @onready var ui = $"./UI" @onready var velocity_label: Label = ui.find_child("velocity_label") @onready var tile_type_label: Label = ui.find_child("tile_type_label") +@onready var escape_menu: Control = ui.find_child("escape_menu") +@onready var game_menu: Control = ui.find_child("game_menu") +@onready var powers_list: ItemList = ui.find_child("powers_list") @onready var eye_raycast: RayCast3D = $"./Camera/eye" @onready var earth = $"../Earth" @@ -19,12 +22,13 @@ enum TileType { Lake } -var creating_tile_type = TileType.Plain +var creating_tile_type = TileType.Empty func _ready(): camera.make_current() Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - + setup_ui() + func _unhandled_input(event): if Input.is_action_pressed("MWU"): walk += walk / 5. @@ -38,27 +42,34 @@ func _unhandled_input(event): camera.rotate_x(-event.relative.y * SENSETIVITY) camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-90), deg_to_rad(90)) -func _physics_process(delta): +func switch_tile_type(type, _a, _b): + game_menu.visible = false + creating_tile_type = type + + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + +func setup_ui(): + powers_list.item_clicked.connect(switch_tile_type) + +func update_ui(): velocity_label.text = "Velocity: " + str(walk) + tile_type_label.text = "Tile type: " + str(TileType.keys()[creating_tile_type]) + +func _physics_process(delta): + update_ui() var input_dir = Input.get_vector("left", "right", "forward", "backward") var direction = (head.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() var velocity = Vector3.ZERO var speed - if Input.is_action_just_pressed("tile type loop"): - creating_tile_type = wrap(creating_tile_type + 1, 0, TileType.size()) - tile_type_label.text = "Tile type: " + str(TileType.keys()[creating_tile_type]) - - if Input.is_action_just_pressed("LMC") and eye_raycast.is_colliding() and !get_node("UI/ingame_menu").visible: + if Input.is_action_just_pressed("LMC") and eye_raycast.is_colliding(): var target = eye_raycast.get_collider() if "TileType" in target: - #earth.mark_free_tiles() target.tile_type = creating_tile_type target.update_tile() earth.mark_empty_tiles() - if Input.is_action_pressed("run"): speed = walk * 2 else: diff --git a/scripts/ingame_menu.gd b/scripts/ingame_menu.gd index f546d55..d232e94 100644 --- a/scripts/ingame_menu.gd +++ b/scripts/ingame_menu.gd @@ -1,10 +1,10 @@ extends Control -func _ready(): - #visible = false - pass +@onready var God = get_tree().root.get_node("world/God") func _physics_process(delta): - if Input.is_action_just_pressed("ingame_menu"): + if Input.is_action_just_pressed(name): self.visible = !self.visible Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE if self.visible else Input.MOUSE_MODE_CAPTURED) + God.get_node("Camera/eye").enabled = !self.visible +