From 81740064633362153d49da38498015b7accbfead Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Mon, 20 May 2024 13:20:24 +0200 Subject: [PATCH] working menu screens --- game/main.gd | 37 +++++- game/main.tscn | 21 +++- icons/checkmark.png | Bin 0 -> 15751 bytes icons/checkmark.png.import | 34 +++++ icons/exit.png | Bin 0 -> 15378 bytes icons/exit.png.import | 34 +++++ icons/left.png | Bin 0 -> 15319 bytes icons/left.png.import | 34 +++++ icons/singleplayer.png | Bin 0 -> 15663 bytes icons/singleplayer.png.import | 34 +++++ icons/up.png | Bin 0 -> 15204 bytes icons/up.png.import | 34 +++++ menu/menu_bg.gd | 16 ++- menu/menu_bg.tscn | 34 +---- player_select/player_select.gd | 59 +++++++++ player_select/player_select.tscn | 206 +++++++++++++++++++++++++++++++ project.godot | 2 +- 17 files changed, 506 insertions(+), 39 deletions(-) create mode 100644 icons/checkmark.png create mode 100644 icons/checkmark.png.import create mode 100644 icons/exit.png create mode 100644 icons/exit.png.import create mode 100644 icons/left.png create mode 100644 icons/left.png.import create mode 100644 icons/singleplayer.png create mode 100644 icons/singleplayer.png.import create mode 100644 icons/up.png create mode 100644 icons/up.png.import create mode 100644 player_select/player_select.gd create mode 100644 player_select/player_select.tscn diff --git a/game/main.gd b/game/main.gd index 0401f71..794603c 100644 --- a/game/main.gd +++ b/game/main.gd @@ -7,6 +7,9 @@ extends Node3D @onready var camera_prethrow: Marker3D = $CameraPositionPrethrow @onready var camera_target: Marker3D = $CameraPositionTarget @onready var ui: Ui = $Ui +@onready var gamescene_light = $GameSceneLight +@onready var menu_scene = $MenuBg +@onready var player_select = $PlayerSelect const physics_timeout := 2.5 @@ -17,7 +20,14 @@ enum GameState { THROWN } +enum MasterState { + LOGO, + PLAYER_SELECT, + GAME +} + var state: GameState = GameState.START +var master_state: MasterState = MasterState.LOGO var camera_transition := 0. var camera_speed := 1.5 var first_throw := true @@ -27,6 +37,31 @@ func _ready() -> void: ui.connect("roll_pressed", throw_dice) add_child(physics_timer) physics_timer.connect("timeout", physics_timer_timeout) + menu_scene.connect("start_game", switch_to_player_select) + player_select.connect("start_game", switch_to_game) + player_select.connect("back_to_menu", switch_to_menu) + switch_to_menu() + +func master_state_sync() -> void: + ui.visible = MasterState.GAME == master_state + gamescene_light.visible = MasterState.GAME == master_state + menu_scene.visible = MasterState.LOGO == master_state + menu_scene.ui_visible = MasterState.LOGO == master_state + player_select.visible = MasterState.PLAYER_SELECT == master_state + if master_state != MasterState.GAME: + physics_timer_timeout() + +func switch_to_player_select() -> void: + master_state = MasterState.PLAYER_SELECT + master_state_sync() + +func switch_to_game() -> void: + master_state = MasterState.GAME + master_state_sync() + +func switch_to_menu() -> void: + master_state = MasterState.LOGO + master_state_sync() func physics_timer_timeout() -> void: dice1.sleeping = true @@ -37,7 +72,7 @@ func _physics_process(delta: float) -> void: camera_transition += delta * camera_speed camera_transition = min(camera_transition, 1.) if state == GameState.THROWING_START or state == GameState.THROWING: - camera.transform = ( camera_starting if first_throw else camera_target).transform.interpolate_with(camera_prethrow.transform, camera_transition) + camera.transform = (camera_starting if first_throw else camera_target).transform.interpolate_with(camera_prethrow.transform, camera_transition) elif state == GameState.THROWN: camera.transform = camera_prethrow.transform.interpolate_with(camera_target.transform, camera_transition) diff --git a/game/main.tscn b/game/main.tscn index 2066ebc..b8858a0 100644 --- a/game/main.tscn +++ b/game/main.tscn @@ -1,9 +1,11 @@ -[gd_scene load_steps=14 format=3 uid="uid://bxphc5t7er28i"] +[gd_scene load_steps=16 format=3 uid="uid://bxphc5t7er28i"] [ext_resource type="Script" path="res://game/main.gd" id="1_h1pkq"] [ext_resource type="ArrayMesh" uid="uid://6ygsl6phockr" path="res://game/dice.res" id="1_qesf4"] [ext_resource type="Script" path="res://game/dice.gd" id="2_jh75e"] [ext_resource type="PackedScene" uid="uid://c8jkqtbqtg7ub" path="res://game/ui.tscn" id="4_80via"] +[ext_resource type="PackedScene" uid="uid://cmt0o37jd1gt6" path="res://menu/menu_bg.tscn" id="5_r5r22"] +[ext_resource type="PackedScene" uid="uid://k2duc4ddir2m" path="res://player_select/player_select.tscn" id="6_xkr2b"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_kmncl"] bounce = 0.06 @@ -125,16 +127,25 @@ transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1, [node name="CameraPositionTarget" type="Marker3D" parent="."] -[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +[node name="DiceThrowStart" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.408271, 0.326392, 0) + +[node name="GameSceneLight" type="DirectionalLight3D" parent="."] transform = Transform3D(1, 0, 0, 0, 0.751874, 0.659306, 0, -0.659306, 0.751874, 0, 1.52296, 0) +visible = false shadow_enabled = true shadow_bias = 0.01 directional_shadow_max_distance = 10.0 -[node name="DiceThrowStart" type="Marker3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.408271, 0.326392, 0) - [node name="Ui" parent="." instance=ExtResource("4_80via")] +visible = false + +[node name="MenuBg" parent="." instance=ExtResource("5_r5r22")] +transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 2.66249) +visible = false + +[node name="PlayerSelect" parent="." instance=ExtResource("6_xkr2b")] +visible = false [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_64y34") diff --git a/icons/checkmark.png b/icons/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..f912260ee119064367e650942b925d90a9ae2c54 GIT binary patch literal 15751 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 literal 0 HcmV?d00001 diff --git a/icons/exit.png.import b/icons/exit.png.import new file mode 100644 index 0000000..fc5807e --- /dev/null +++ b/icons/exit.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dgwgb7g0gca8m" +path="res://.godot/imported/exit.png-7270074d2b58b94c4110d834e0e34b96.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icons/exit.png" +dest_files=["res://.godot/imported/exit.png-7270074d2b58b94c4110d834e0e34b96.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/icons/left.png b/icons/left.png new file mode 100644 index 0000000000000000000000000000000000000000..ebfb42abfcac1165bed157140fa741e6459bdd16 GIT binary patch literal 15319 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 bd&$^w{L<|i-9w%gUTH4KD>Ahk%2)jl-F$XT literal 0 HcmV?d00001 diff --git a/icons/singleplayer.png.import b/icons/singleplayer.png.import new file mode 100644 index 0000000..99333c4 --- /dev/null +++ b/icons/singleplayer.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c25g6oj4fnw0h" +path="res://.godot/imported/singleplayer.png-3c245660b093bd5049e9f8c3e2039f85.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icons/singleplayer.png" +dest_files=["res://.godot/imported/singleplayer.png-3c245660b093bd5049e9f8c3e2039f85.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/icons/up.png b/icons/up.png new file mode 100644 index 0000000000000000000000000000000000000000..d1b642cfb9e3cca578cf7e7ff3bf690f9f5390ff GIT binary patch literal 15204 zcmeI3UuYaf9LFa%mYCXFTmPheTCNmR?A`vkKe=1>u1)WfCc$gc^dyNz+s*DIS#!60 z-QDyqu@7xSwMB~%G-?%UKoB1+1Qd}LMNp~qsrE_5hguN)1A<_!6pgdD_h;^3Cxt%F z!DWA$`ToAM^O@hw?aQ7S+P8Oo`_^^{9lG!+%()#91cwlZ{N|~EhBC2OstX;~B$RGo4naO9;x+UhLo`SE4VyBt)Fa?P{ z9rbiO12Ut@Atr8^kO}&NUWF5QrYqv(gMkRo?_>my_p?053K1{Qi-9hY4>84$C)SQ4 z$y6uA;Y4q7IP_oCGiBRZk!5qaoG<718RjI*M7>|Y6%sx7&oD88)nKd z(lNJOhe~(P#N$loh^DJX&e|cdwdzXERE%IkwqXp_bO2SemlIL~FZy{g72FLKFOrmuUodPE3iKiLv#0OnkuS( zJ`jdzc2M9$UL_Fd^2%y3>vhrm(%UvS~qQ*F-&~ZBsrEiZxK! zccNB5Rrh}Qp62&cms+_WWG=bgYO|U0y(DKWwc=dHP?>5?Nh9=wriM;*IgPP$R`6~x zH?Y8N0=c1K`ZNn|omp&rXWq`adH^1&ZY_1BwN)-md3n%jCd!I)V#h2QEw02CPPkHA z<)+*WXCPP5U`Yt@V9wpOoYss8HMUQ!it!Z0(k9n&)MBxJMtq{LPlD`QIK zUjQ*~qzw}tW-#WL*hbA*mUH$yrHv@bg?iv6wyv#KKk97!^h`nDC2;72o;J{@n2LAT zrjFe?74NQ1tzC6cL`1lN;=*YVV~UH22p3RXI1OS^WIY%7S;LW<=t~Pca5AoEL_=p zXmQ*5zit!EFaL1k;Ad|nxeM>F3~v5*{>X>19pAMn z>t0L0xGW8Xz8u}U{q6CcFE5-kGBU0&Ld*nPaMGQlSC%C(0O@RgM{;Mmxp;y<-1gZ>5m MJ^KKfi2)q5uE@ literal 0 HcmV?d00001 diff --git a/icons/up.png.import b/icons/up.png.import new file mode 100644 index 0000000..a363af4 --- /dev/null +++ b/icons/up.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c0yrwtgac654j" +path="res://.godot/imported/up.png-3279e73ea2ddb08aee214bd27ed28a94.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icons/up.png" +dest_files=["res://.godot/imported/up.png-3279e73ea2ddb08aee214bd27ed28a94.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/menu/menu_bg.gd b/menu/menu_bg.gd index b9be08f..cd7eb75 100644 --- a/menu/menu_bg.gd +++ b/menu/menu_bg.gd @@ -1,6 +1,18 @@ extends Node3D -var main_scene = preload("res://game/main.tscn") +# var select_scene = preload("res://player_select/player_select.tscn") + +@onready var menu_ui = $MenuUi + +signal start_game +@export var ui_visible := true : + set(visible): + ui_visible = visible + menu_ui.visible = ui_visible + +func _ready() -> void: + menu_ui.visible = ui_visible func _on_menu_ui_start_pressed() -> void: - get_tree().change_scene_to_packed(main_scene) + # get_tree().change_scene_to_packed(select_scene) + start_game.emit() \ No newline at end of file diff --git a/menu/menu_bg.tscn b/menu/menu_bg.tscn index 9e20575..9bcb6d1 100644 --- a/menu/menu_bg.tscn +++ b/menu/menu_bg.tscn @@ -1,29 +1,9 @@ -[gd_scene load_steps=10 format=3 uid="uid://cmt0o37jd1gt6"] +[gd_scene load_steps=6 format=3 uid="uid://cmt0o37jd1gt6"] [ext_resource type="ArrayMesh" uid="uid://6ygsl6phockr" path="res://game/dice.res" id="1_8u4bs"] [ext_resource type="Script" path="res://menu/menu_bg.gd" id="1_mvbgk"] [ext_resource type="PackedScene" uid="uid://dfarwiq8kvcxa" path="res://menu/menu_ui.tscn" id="2_5dpja"] -[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_os646"] -ground_bottom_color = Color(0.610915, 0.695046, 0.774521, 1) - -[sub_resource type="Sky" id="Sky_cj84e"] -sky_material = SubResource("ProceduralSkyMaterial_os646") - -[sub_resource type="Environment" id="Environment_hqpr0"] -background_mode = 2 -background_color = Color(1, 1, 1, 1) -sky = SubResource("Sky_cj84e") -ambient_light_source = 3 -reflected_light_source = 2 -tonemap_mode = 3 -ssao_enabled = true -ssil_enabled = true -sdfgi_enabled = true -glow_enabled = true - -[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_cvruf"] - [sub_resource type="Animation" id="Animation_fnyq0"] resource_name = "float" length = 4.0 @@ -51,14 +31,8 @@ _data = { [node name="MenuBg" type="Node3D"] script = ExtResource("1_mvbgk") -[node name="Camera3D" type="Camera3D" parent="."] +[node name="CameraPosition" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.323323, 0.972071) -current = true -near = 0.003 - -[node name="WorldEnvironment" type="WorldEnvironment" parent="."] -environment = SubResource("Environment_hqpr0") -camera_attributes = SubResource("CameraAttributesPractical_cvruf") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.902146, 0.161505, -0.400062, -0.132644, 0.986206, 0.0990162, 0.410534, -0.0362611, 0.911124, 0, 1.52296, 0) @@ -73,12 +47,12 @@ libraries = { autoplay = "float" [node name="MeshInstance3D" type="MeshInstance3D" parent="."] -transform = Transform3D(-0.0374396, -0.00439883, 0.032847, -0.0194431, 0.0430478, -0.0163967, -0.0268373, -0.0250506, -0.0339444, 0.152866, 0.215249, 0.637892) +transform = Transform3D(-0.0374396, -0.00439883, 0.032847, -0.0194431, 0.0430478, -0.0163967, -0.0268373, -0.0250506, -0.0339444, 0.152777, 0.229333, 0.63782) mesh = ExtResource("1_8u4bs") skeleton = NodePath("../..") [node name="MeshInstance3D2" type="MeshInstance3D" parent="."] -transform = Transform3D(0.0475114, -0.0035802, -0.0151608, 0.0155677, 0.0091615, 0.0466231, -0.000560477, -0.049023, 0.00982022, 0.28582, 0.375627, 0.637932) +transform = Transform3D(0.0475114, -0.0035802, -0.0151608, 0.0155677, 0.0091615, 0.0466231, -0.000560477, -0.049023, 0.00982022, 0.28552, 0.392348, 0.63782) mesh = ExtResource("1_8u4bs") [node name="MenuUi" parent="." instance=ExtResource("2_5dpja")] diff --git a/player_select/player_select.gd b/player_select/player_select.gd new file mode 100644 index 0000000..710d31f --- /dev/null +++ b/player_select/player_select.gd @@ -0,0 +1,59 @@ +extends Control + +@onready var selector: Control = $SelectorContainer +@onready var p1 = $Players/Player1 +@onready var p2 = $Players/Player2 +@onready var p3 = $Players/Player3 +@onready var p4 = $Players/Player4 +@onready var p5 = $Players/Player5 +@onready var start_button: Button = $StartButton +@onready var start_disabled_info: Label = $StartDisabledInfo + +var players: Array[VBoxContainer] +var player_names: Array[String] = ["", "", "", "", ""] +var player_ready := false +signal start_game +signal back_to_menu + +var tween: Tween +func _ready() -> void: + players = [p1, p2, p3, p4, p5] + + get_viewport().connect("gui_focus_changed", _on_focus_changed) + for player in players: + var line_edit: LineEdit = player.get_node("LineEdit") + line_edit.connect("text_changed", _on_text_changed) + +func recheck_names() -> void: + var non_empty_player_names = 0 + for pname in player_names: + if pname != "": + non_empty_player_names += 1 + player_ready = non_empty_player_names >= 2 + start_disabled_info.visible = !player_ready + start_button.disabled = !player_ready + +func _on_start_button_pressed() -> void: + start_game.emit() + +func _on_focus_changed(focus: Control) -> void: + if focus is LineEdit: + var parent: VBoxContainer = focus.get_parent() + if parent is VBoxContainer: + selector.visible = true + if tween: + tween.kill() + tween = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_ELASTIC) + tween.tween_property(selector, "global_position:x", parent.global_position.x + parent.size.x/2 - selector.size.x/2, .6) + return + selector.visible = false + +func _on_text_changed(_text: String) -> void: + for i in players.size(): + player_names[i] = players[i].get_node("LineEdit").text + recheck_names() + +func _on_texture_rect_gui_input(event: InputEvent) -> void: + if event is InputEventMouse: + if event.is_pressed(): + back_to_menu.emit() diff --git a/player_select/player_select.tscn b/player_select/player_select.tscn new file mode 100644 index 0000000..50982c0 --- /dev/null +++ b/player_select/player_select.tscn @@ -0,0 +1,206 @@ +[gd_scene load_steps=8 format=3 uid="uid://k2duc4ddir2m"] + +[ext_resource type="Script" path="res://player_select/player_select.gd" id="1_qqyon"] +[ext_resource type="Texture2D" uid="uid://c25g6oj4fnw0h" path="res://icons/singleplayer.png" id="1_ra1kc"] +[ext_resource type="Texture2D" uid="uid://c0yrwtgac654j" path="res://icons/up.png" id="2_de6io"] +[ext_resource type="Texture2D" uid="uid://dgwgb7g0gca8m" path="res://icons/exit.png" id="4_4xfaw"] + +[sub_resource type="Animation" id="Animation_mkwqy"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("SelectorContainer/SelectorTexture:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(0, 0)] +} + +[sub_resource type="Animation" id="Animation_24wm5"] +resource_name = "selector_float" +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("SelectorContainer/SelectorTexture:position") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.5, 1), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, 0), Vector2(0, -11), Vector2(0, 0)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_gjb0h"] +_data = { +"RESET": SubResource("Animation_mkwqy"), +"selector_float": SubResource("Animation_24wm5") +} + +[node name="Control" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_qqyon") + +[node name="Players" type="HBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/separation = 30 + +[node name="Player1" type="VBoxContainer" parent="Players"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Players/Player1"] +modulate = Color(0.327948, 0.688773, 1, 1) +layout_mode = 2 +texture = ExtResource("1_ra1kc") + +[node name="LineEdit" type="LineEdit" parent="Players/Player1"] +layout_mode = 2 +placeholder_text = "Player 1" + +[node name="Player2" type="VBoxContainer" parent="Players"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Players/Player2"] +modulate = Color(0.779557, 0.531037, 0.993503, 1) +layout_mode = 2 +texture = ExtResource("1_ra1kc") + +[node name="LineEdit" type="LineEdit" parent="Players/Player2"] +layout_mode = 2 +placeholder_text = "Player 2" + +[node name="Player3" type="VBoxContainer" parent="Players"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Players/Player3"] +modulate = Color(1, 0.474572, 0.502802, 1) +layout_mode = 2 +texture = ExtResource("1_ra1kc") + +[node name="LineEdit" type="LineEdit" parent="Players/Player3"] +layout_mode = 2 +placeholder_text = "Player 3" + +[node name="Player4" type="VBoxContainer" parent="Players"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Players/Player4"] +modulate = Color(0.99713, 0.511467, 7.70092e-07, 1) +layout_mode = 2 +texture = ExtResource("1_ra1kc") + +[node name="LineEdit" type="LineEdit" parent="Players/Player4"] +layout_mode = 2 +placeholder_text = "Player 4" + +[node name="Player5" type="VBoxContainer" parent="Players"] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="Players/Player5"] +modulate = Color(1.34766e-06, 0.780483, 0.557622, 1) +layout_mode = 2 +texture = ExtResource("1_ra1kc") + +[node name="LineEdit" type="LineEdit" parent="Players/Player5"] +layout_mode = 2 +placeholder_text = "Player 5" + +[node name="StartButton" type="Button" parent="."] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -47.0 +offset_top = -66.0 +offset_right = 47.0 +offset_bottom = -21.0 +grow_horizontal = 2 +grow_vertical = 0 +disabled = true +text = "Start" + +[node name="SelectorContainer" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -282.0 +offset_top = 80.0 +offset_right = -242.0 +offset_bottom = 120.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="SelectorTexture" type="TextureRect" parent="SelectorContainer"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_de6io") +expand_mode = 1 + +[node name="StartDisabledInfo" type="Label" parent="."] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -132.0 +offset_top = -101.0 +offset_right = 140.0 +offset_bottom = -84.0 +grow_horizontal = 2 +grow_vertical = 0 +text = "Name 2+ players to continue" + +[node name="TextureRect" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 21.0 +offset_top = 20.0 +offset_right = 84.0 +offset_bottom = 83.0 +texture = ExtResource("4_4xfaw") +expand_mode = 1 + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_gjb0h") +} +autoplay = "selector_float" + +[connection signal="pressed" from="StartButton" to="." method="_on_start_button_pressed"] +[connection signal="gui_input" from="TextureRect" to="." method="_on_texture_rect_gui_input"] diff --git a/project.godot b/project.godot index cea66ab..0a2eb93 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="programovani-kostky" -run/main_scene="res://menu/menu_bg.tscn" +run/main_scene="res://game/main.tscn" config/features=PackedStringArray("4.2", "Forward Plus") config/icon="res://game/icon.svg"