From 7ce3593119b399196d71c88e3d1cab08ff38bb80 Mon Sep 17 00:00:00 2001 From: Daniel Weipert Date: Fri, 19 Jul 2024 14:18:21 +0200 Subject: cleanup and begin lobby rework --- Characters/Character.gd | 24 ++-- Levels/Level.gd | 50 ++++---- Network/Lobby.gd | 8 +- Network/Lobby.tscn | 74 ++++++----- Readme.md | 31 +++++ UI/Lobby/Player.gd | 11 ++ UI/Lobby/Player.tscn | 317 ++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 447 insertions(+), 68 deletions(-) create mode 100644 UI/Lobby/Player.gd create mode 100644 UI/Lobby/Player.tscn diff --git a/Characters/Character.gd b/Characters/Character.gd index c9eaa0a..f8c3a59 100644 --- a/Characters/Character.gd +++ b/Characters/Character.gd @@ -18,7 +18,7 @@ var lastWallDirection = Enum.DIRECTION.LEFT func _ready(): - pass + set_up_direction(Vector2.UP) func _physics_process(delta): @@ -34,8 +34,6 @@ func _physics_process(delta): $Sprite2D.flip_h = false if self.is_running(): velocity.x = RUNSPEED - - set_up_direction(Vector2.UP) if is_on_floor(): if Input.is_action_pressed("DIRECTION_LEFT") or Input.is_action_pressed("DIRECTION_RIGHT"): @@ -112,6 +110,18 @@ func _physics_process(delta): move_and_slide() + self.updatePuppet() + + +func is_running(): + return Input.is_action_pressed("RUN") and is_on_floor() + + +func canWallJump(): + return (is_on_wall() and not is_on_floor()) or not $WalljumpTimer.is_stopped() + + +func updatePuppet(): if Network.player.position != self.position: Network.player.position = self.position Network.update_player() @@ -123,14 +133,6 @@ func _physics_process(delta): Network.update_player() -func is_running(): - return Input.is_action_pressed("RUN") and is_on_floor() - - -func canWallJump(): - return (is_on_wall() and not is_on_floor()) or not $WalljumpTimer.is_stopped() - - func check_flag(): # $Sprite.play("dance anim") print("FLAG CHECKED") diff --git a/Levels/Level.gd b/Levels/Level.gd index 40c75ff..9998a4e 100644 --- a/Levels/Level.gd +++ b/Levels/Level.gd @@ -19,30 +19,7 @@ func _ready(): character = load("res://Characters/" + Network.player.character + ".tscn").instantiate() self.set_player(character) - Network.connect("player_changed", func(id): - var remote_player = Network.players[id] - - var node_name = "%s_%s_%s" % [remote_player.name, remote_player.character, id] - var puppet = null - if self.has_node(node_name): - puppet = self.get_node(node_name) - - if remote_player.current_level != self.idx: - if puppet: - puppet.queue_free() - return - - if not puppet: - puppet = load("res://Characters/" + remote_player.character + ".tscn").instantiate() - puppet.process_mode = PROCESS_MODE_DISABLED - self.add_child(puppet) - puppet.name = node_name - puppet.modulate = Color(1.0, 1.0, 1.0, 0.5) - else: - puppet.position = remote_player.position - puppet.get_node("Sprite2D").play(remote_player.animation) - puppet.get_node("Sprite2D").flip_h = remote_player.animation_flip_h - ) + Network.connect("player_changed", Callable(self, 'update_puppet')) if has_node("ParallaxBackground"): $ParallaxBackground/ParallaxLayer.motion_mirroring.x = ( @@ -94,6 +71,31 @@ func respawn_player(): Global.change_scene_to_instance(instance_level) +func update_puppet(id: int): + var remote_player = Network.players[id] + + var node_name = "%s_%s_%s" % [remote_player.name, remote_player.character, id] + var puppet = null + if self.has_node(node_name): + puppet = self.get_node(node_name) + + if remote_player.current_level != self.idx: + if puppet: + puppet.queue_free() + return + + if not puppet: + puppet = load("res://Characters/" + remote_player.character + ".tscn").instantiate() + puppet.process_mode = PROCESS_MODE_DISABLED + self.add_child(puppet) + puppet.name = node_name + puppet.modulate = Color(1.0, 1.0, 1.0, 0.5) + else: + puppet.position = remote_player.position + puppet.get_node("Sprite2D").play(remote_player.animation) + puppet.get_node("Sprite2D").flip_h = remote_player.animation_flip_h + + func end_level(): Global.end_level(self) diff --git a/Network/Lobby.gd b/Network/Lobby.gd index 87a3894..4b573cf 100644 --- a/Network/Lobby.gd +++ b/Network/Lobby.gd @@ -15,10 +15,10 @@ func _ready(): Network.connect("game_ended", Callable(self, "_on_game_ended")) $HTTPRequest.connect("request_completed", Callable(self, '_set_remote_ip')) - ConnectNodeContainer = $CenterContainer - ConnectNode = $CenterContainer/Connect - PlayersNodeContainer = $CenterContainer2 - PlayersNode = $CenterContainer2/Players + ConnectNodeContainer = $Connect + ConnectNode = $Connect/CenterContainer/Connect + PlayersNodeContainer = $Players + PlayersNode = $Players/CenterContainer/Players if OS.has_environment("USERNAME"): ConnectNode.get_node("Name").text = OS.get_environment("USERNAME") diff --git a/Network/Lobby.tscn b/Network/Lobby.tscn index 60bf28e..7dccc24 100644 --- a/Network/Lobby.tscn +++ b/Network/Lobby.tscn @@ -12,7 +12,7 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1") -[node name="CenterContainer" type="CenterContainer" parent="."] +[node name="Connect" type="Control" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -20,11 +20,19 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Connect" type="Panel" parent="CenterContainer"] +[node name="CenterContainer" type="CenterContainer" parent="Connect"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Connect" type="Panel" parent="Connect/CenterContainer"] custom_minimum_size = Vector2(180, 150) layout_mode = 2 -[node name="Name" type="LineEdit" parent="CenterContainer/Connect"] +[node name="Name" type="LineEdit" parent="Connect/CenterContainer/Connect"] layout_mode = 0 offset_left = 8.0 offset_top = 8.0 @@ -32,7 +40,7 @@ offset_right = 168.0 offset_bottom = 32.0 placeholder_text = "Name" -[node name="IP" type="LineEdit" parent="CenterContainer/Connect"] +[node name="IP" type="LineEdit" parent="Connect/CenterContainer/Connect"] layout_mode = 0 offset_left = 8.0 offset_top = 40.0 @@ -40,7 +48,7 @@ offset_right = 168.0 offset_bottom = 64.0 placeholder_text = "IP" -[node name="Host" type="Button" parent="CenterContainer/Connect"] +[node name="Host" type="Button" parent="Connect/CenterContainer/Connect"] layout_mode = 0 offset_left = 8.0 offset_top = 112.0 @@ -48,7 +56,7 @@ offset_right = 64.0 offset_bottom = 136.0 text = "Host" -[node name="Join" type="Button" parent="CenterContainer/Connect"] +[node name="Join" type="Button" parent="Connect/CenterContainer/Connect"] layout_mode = 0 offset_left = 112.0 offset_top = 112.0 @@ -56,7 +64,7 @@ offset_right = 168.0 offset_bottom = 136.0 text = "Join" -[node name="Error" type="Label" parent="CenterContainer/Connect"] +[node name="Error" type="Label" parent="Connect/CenterContainer/Connect"] layout_mode = 0 offset_left = 8.0 offset_top = 72.0 @@ -64,7 +72,17 @@ offset_right = 168.0 offset_bottom = 104.0 theme_override_colors/font_color = Color(1, 0.137255, 0.137255, 1) -[node name="CenterContainer2" type="CenterContainer" parent="."] +[node name="MenuButton" parent="Connect" instance=ExtResource("2")] +layout_mode = 2 +anchors_preset = 0 +anchor_right = 0.0 +anchor_bottom = 0.0 +offset_left = 6.0 +offset_top = 5.0 +offset_right = 59.0 +offset_bottom = 36.0 + +[node name="Players" type="Control" parent="."] visible = false layout_mode = 1 anchors_preset = 15 @@ -73,11 +91,19 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Players" type="Panel" parent="CenterContainer2"] +[node name="CenterContainer" type="CenterContainer" parent="Players"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Players" type="Panel" parent="Players/CenterContainer"] custom_minimum_size = Vector2(260, 460) layout_mode = 2 -[node name="Label" type="Label" parent="CenterContainer2/Players"] +[node name="Label" type="Label" parent="Players/CenterContainer/Players"] layout_mode = 0 offset_left = 16.0 offset_top = 16.0 @@ -85,7 +111,7 @@ offset_right = 64.0 offset_bottom = 32.0 text = "Lobby" -[node name="LocalIP" type="Label" parent="CenterContainer2/Players"] +[node name="LocalIP" type="Label" parent="Players/CenterContainer/Players"] layout_mode = 0 offset_left = 128.0 offset_top = 24.0 @@ -93,7 +119,7 @@ offset_right = 240.0 offset_bottom = 38.0 text = "000.000.000.000" -[node name="RemoteIP" type="Label" parent="CenterContainer2/Players"] +[node name="RemoteIP" type="Label" parent="Players/CenterContainer/Players"] layout_mode = 0 offset_left = 128.0 offset_top = 8.0 @@ -101,14 +127,14 @@ offset_right = 240.0 offset_bottom = 22.0 text = "000.000.000.000" -[node name="List" type="ItemList" parent="CenterContainer2/Players"] +[node name="List" type="ItemList" parent="Players/CenterContainer/Players"] layout_mode = 0 offset_left = 16.0 offset_top = 48.0 offset_right = 240.0 offset_bottom = 400.0 -[node name="Start" type="Button" parent="CenterContainer2/Players"] +[node name="Start" type="Button" parent="Players/CenterContainer/Players"] layout_mode = 0 offset_left = 64.0 offset_top = 416.0 @@ -116,7 +142,7 @@ offset_right = 192.0 offset_bottom = 448.0 text = "START!" -[node name="Back" type="Button" parent="CenterContainer2/Players"] +[node name="Back" type="Button" parent="Players/CenterContainer/Players"] layout_mode = 0 offset_left = 16.0 offset_top = 416.0 @@ -126,19 +152,9 @@ text = "<" [node name="ErrorDialog" type="AcceptDialog" parent="."] -[node name="MenuButton" parent="." instance=ExtResource("2")] -layout_mode = 0 -anchors_preset = 0 -anchor_right = 0.0 -anchor_bottom = 0.0 -offset_left = 1.0 -offset_top = 1.0 -offset_right = 54.0 -offset_bottom = 32.0 - [node name="HTTPRequest" type="HTTPRequest" parent="."] -[connection signal="pressed" from="CenterContainer/Connect/Host" to="." method="_on_Host_pressed"] -[connection signal="pressed" from="CenterContainer/Connect/Join" to="." method="_on_Join_pressed"] -[connection signal="pressed" from="CenterContainer2/Players/Start" to="." method="_on_Start_pressed"] -[connection signal="pressed" from="CenterContainer2/Players/Back" to="." method="_on_Back_pressed"] +[connection signal="pressed" from="Connect/CenterContainer/Connect/Host" to="." method="_on_Host_pressed"] +[connection signal="pressed" from="Connect/CenterContainer/Connect/Join" to="." method="_on_Join_pressed"] +[connection signal="pressed" from="Players/CenterContainer/Players/Start" to="." method="_on_Start_pressed"] +[connection signal="pressed" from="Players/CenterContainer/Players/Back" to="." method="_on_Back_pressed"] diff --git a/Readme.md b/Readme.md index 6747efa..bb36e6a 100644 --- a/Readme.md +++ b/Readme.md @@ -1,2 +1,33 @@ - [How to Make Wall Jump & Slide in Godot [Easy in 3 Minutes]](https://youtu.be/vNHIMrTWpt8) - [How to Create WALL JUMPING & SLIDING in Godot 4](https://youtu.be/5FWzWrK6jLM) + + +## GameOff 2018 Pitch + +tic tac tux (bingo?! = more stages) + platformer(/minigames tictactoe+mariopartylol) +finish the stage and get a cross +you dont see where your enemy is, just a notification when he finished it. board on the top right to see where is what +Doch pure Platformer, nicht mini-games: +Verschiedene Abilities vor Game-Start auswählbar: + Wall-Jump + Double-Jump + Sword/Attack/(sword+upgrade=2abilities) (kann dann auch 2ten Spieler angreifen und ausbremsen) +Nur gleiche Anzahl an auswählbaren Fähigkeiten für beide Spieler. Also jeder eine oder 2 oder 3. +Maps bei denen bestimmte Abilities required sind. Tauchen natürlich nur auf, wenn beide Spieler die Abilities haben. +Möglichkeit als Host Base-Abilities auszuwählen, die jeder zusätzlich oder an sich hat und nicht zum ability count zählen. +Utility Items findbar um Gegner auszubremsen. + Blue-Shell :D + Teleport zum Genger + Teleport zum Ende der Area + Teleport zur nächsten Area..? depends on how Area switch works - so maybe not needed + Temp speed increase + +Hybrid = different areas/maps with different tilesets. different character art styles. lel. + +Stages auf Zeit. Wenn Stage finished dann wird die Zeit dafür recorded. +Wenn man dann zum Beispiel eine vom Gegner beendete Stage schafft, in einer besseren Zeit, überschreibt man die Stage mit seinem eigenen Mark! +Zusätzlich existieren dann auch Sanduhr Items die man verwenden kann um am Ende der Stage -X(5)sec zu bekommen. (Sanduhr-Items vll nur dem Spieler zugänglich machen der hinten dran ist) + +GameOptions +SuddenDeath +SuddenDeathTimer diff --git a/UI/Lobby/Player.gd b/UI/Lobby/Player.gd new file mode 100644 index 0000000..a1bbfe7 --- /dev/null +++ b/UI/Lobby/Player.gd @@ -0,0 +1,11 @@ +extends Control + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass diff --git a/UI/Lobby/Player.tscn b/UI/Lobby/Player.tscn new file mode 100644 index 0000000..9bb5e2b --- /dev/null +++ b/UI/Lobby/Player.tscn @@ -0,0 +1,317 @@ +[gd_scene load_steps=9 format=3 uid="uid://bkice5n440lwj"] + +[ext_resource type="Script" path="res://UI/Lobby/Player.gd" id="1_ed5f6"] +[ext_resource type="Texture2D" uid="uid://fg3wtt3q51ly" path="res://Assets/Characters/Tux/Front.png" id="2_tetw5"] +[ext_resource type="Texture2D" uid="uid://dibcyc08wpu0a" path="res://Assets/Characters/Duck/Front.png" id="3_nh4rr"] +[ext_resource type="Texture2D" uid="uid://b2h82tdfbogjx" path="res://Assets/Characters/Dove/Front.png" id="4_ogxut"] +[ext_resource type="Texture2D" uid="uid://cnuotyqgyqplm" path="res://Assets/Characters/Pidgin/Front.png" id="5_tq24r"] +[ext_resource type="Texture2D" uid="uid://c338yichhecvr" path="res://Assets/Characters/Monkey/Front.png" id="6_vpjrx"] +[ext_resource type="Texture2D" uid="uid://bfr2ek0h8rveb" path="res://Assets/Characters/Elephant/Front.png" id="7_0ilrg"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1y22c"] +bg_color = Color(1, 0.984314, 0.647059, 0) + +[node name="Player" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_right = -576.0 +offset_bottom = -324.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_ed5f6") + +[node name="Character" 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 + +[node name="Panel" type="Panel" parent="Character"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Character/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="Control" type="Control" parent="Character/Panel/MarginContainer"] +layout_mode = 2 + +[node name="ScrollContainer" type="ScrollContainer" parent="Character/Panel/MarginContainer/Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="GridContainer" type="HFlowContainer" parent="Character/Panel/MarginContainer/Control/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Tux" type="Control" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 + +[node name="Panel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/Tux"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c") + +[node name="TextureRect" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/Tux/Panel"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -32.0 +offset_right = 32.0 +offset_bottom = 32.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_tetw5") + +[node name="DuckPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c") + +[node name="Duck" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/DuckPanel"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -32.0 +offset_right = 32.0 +offset_bottom = 32.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("3_nh4rr") + +[node name="DovePanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c") + +[node name="Dove" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/DovePanel"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -32.0 +offset_right = 32.0 +offset_bottom = 32.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("4_ogxut") + +[node name="PidginPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c") + +[node name="Pidgin" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/PidginPanel"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -16.0 +offset_top = -16.0 +offset_right = 16.0 +offset_bottom = 16.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("5_tq24r") + +[node name="MonkeyPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c") + +[node name="Monkey" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/MonkeyPanel"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -16.0 +offset_top = -16.0 +offset_right = 16.0 +offset_bottom = 16.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("6_vpjrx") + +[node name="ElephantPanel" type="Panel" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer"] +custom_minimum_size = Vector2(150, 150) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_1y22c") + +[node name="Elephant" type="TextureRect" parent="Character/Panel/MarginContainer/Control/ScrollContainer/GridContainer/ElephantPanel"] +custom_minimum_size = Vector2(64, 64) +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -32.0 +offset_top = -32.0 +offset_right = 32.0 +offset_bottom = 32.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("7_0ilrg") + +[node name="Button" type="Button" parent="Character/Panel/MarginContainer/Control"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -45.0 +offset_top = -31.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "Next" + +[node name="Abilities" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Panel" type="Panel" parent="Abilities"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Abilities/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="Control" type="Control" parent="Abilities/Panel/MarginContainer"] +layout_mode = 2 + +[node name="ItemList" type="ItemList" parent="Abilities/Panel/MarginContainer/Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +item_count = 4 +item_0/text = "Wall-Jump" +item_1/text = "Double-Jump" +item_2/text = "Dash" +item_3/text = "Float" + +[node name="Button" type="Button" parent="Abilities/Panel/MarginContainer/Control"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -45.0 +offset_top = -31.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "Next" + +[node name="Ready" 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 + +[node name="Panel" type="Panel" parent="Ready"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Ready/Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 10 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 10 +theme_override_constants/margin_bottom = 10 + +[node name="Control" type="Control" parent="Ready/Panel/MarginContainer"] +layout_mode = 2 + +[node name="Button" type="Button" parent="Ready/Panel/MarginContainer/Control"] +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -45.0 +offset_top = -31.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "Set Ready" -- cgit v1.2.3