summaryrefslogtreecommitdiff
path: root/scripts/MainMenu.gd
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/MainMenu.gd')
-rw-r--r--scripts/MainMenu.gd84
1 files changed, 84 insertions, 0 deletions
diff --git a/scripts/MainMenu.gd b/scripts/MainMenu.gd
new file mode 100644
index 0000000..fca6658
--- /dev/null
+++ b/scripts/MainMenu.gd
@@ -0,0 +1,84 @@
+extends Control
+
+signal game_host_request(args)
+signal game_join_request(args)
+
+var lobby_name_changed : bool = false # automatically update lobby name to be based on player's name
+
+func _ready():
+ $BackButton.connect("pressed", self, "back_button")
+ $HostMenuButton.connect("pressed", self, "host_menu_button_pressed")
+ $JoinMenuButton.connect("pressed", self, "join_menu_button_pressed")
+ $SettingsButton.connect("pressed", self, "settings_menu_button_pressed")
+ $HostMenu/PrivateToggle.connect("toggled", $HostMenu/Password, "set_visible")
+ $SettingsMenu/GameCoordinatorURL.connect("text_changed", Globals, "update_gc_url")
+ $PlayerInfo/Username.connect("text_changed", self, "automatically_update_lobby_name")
+ $HostMenu/GameName.connect("text_changed", self, "set_lobby_name_changed")
+ #main_menu() # in case things are incorrectly visible from editing
+
+
+func set_lobby_name_changed(_disregard_new_text):
+ lobby_name_changed = true
+
+func automatically_update_lobby_name(username : String):
+ if lobby_name_changed: return
+ var suffix : String = "' Game" if username.ends_with("s") else "'s Game"
+ $HostMenu/GameName.set_text(username + suffix)
+
+func main_menu():
+ set_menu_buttons_visible(true)
+ set_player_info_visible(false)
+ set_join_menu_visible(false)
+ set_host_menu_visible(false)
+ set_settings_menu_visible(false)
+ set_back_button_visible(false)
+
+func set_menu_buttons_visible(visible : bool):
+ $HostMenuButton.visible = visible
+ $JoinMenuButton.visible = visible
+ $SettingsButton.visible = visible
+
+func set_player_info_visible(visible : bool):
+ $PlayerInfo.visible = visible
+
+func set_join_menu_visible(visible : bool):
+ $JoinMenu.visible = visible
+
+func set_host_menu_visible(visible : bool):
+ $HostMenu.visible = visible
+
+func set_settings_menu_visible(visible : bool):
+ $SettingsMenu.visible = visible
+
+func set_back_button_visible(visible : bool):
+ $BackButton.visible = visible
+ $BackButton.disabled = false # reset in case left disabled by other function
+
+# go to join game menu
+func join_menu_button_pressed(lobby_id_from_url : String = "", password_from_url : String = ""):
+ set_menu_buttons_visible(false)
+ set_player_info_visible(true)
+ set_join_menu_visible(true)
+ set_back_button_visible(true)
+ if lobby_id_from_url:
+ $JoinMenu/LobbyID.text = lobby_id_from_url
+ if password_from_url:
+ $JoinMenu/Password.text = password_from_url
+
+# go to host game menu
+func host_menu_button_pressed():
+ set_menu_buttons_visible(false)
+ set_player_info_visible(true)
+ set_host_menu_visible(true)
+ set_back_button_visible(true)
+
+# go to settings menu
+func settings_menu_button_pressed():
+ $SettingsMenu/GameCoordinatorURL.text = Globals.GC_URL
+ set_menu_buttons_visible(false)
+ set_settings_menu_visible(true)
+ set_back_button_visible(true)
+
+# return to main menu
+func back_button():
+ main_menu()