From 7897462309c820ebf82b38722cccf3c7bfbf4df1 Mon Sep 17 00:00:00 2001 From: itdominator <1itdominator@gmail.com> Date: Mon, 10 Aug 2026 00:28:23 -0500 Subject: [PATCH] feat: support configurable game server address and port * Launch game servers in headless mode * Add configurable game address and port to GameData * Pass dynamically assigned server ports to clients * Update lobby defaults for `0.0.0.0:8080` * Refactor server command-line argument handling --- globals/instance_launcher.gd | 5 ++++- scenes/data_bridge/game_data.gd | 4 ++++ scenes/data_bridge/lobby_data.gd | 10 +++++++--- scenes/ui_controls/lobby_screen/lobby_ui.tscn | 6 +++--- server.gd | 12 ++++++++++++ 5 files changed, 30 insertions(+), 7 deletions(-) diff --git a/globals/instance_launcher.gd b/globals/instance_launcher.gd index 68579a6..2990e1e 100644 --- a/globals/instance_launcher.gd +++ b/globals/instance_launcher.gd @@ -13,7 +13,10 @@ func _wait_for_child(id: String, port: String, mode: String) -> void: var output := [] var exit_code := OS.execute( - "./game.sh", ["--", "server_" + port, "game", mode], + "./game.sh", + [ + "--headless", "--", "server_" + port, "game", mode + ], output, true ) diff --git a/scenes/data_bridge/game_data.gd b/scenes/data_bridge/game_data.gd index 73f8093..40d3d75 100644 --- a/scenes/data_bridge/game_data.gd +++ b/scenes/data_bridge/game_data.gd @@ -1,6 +1,10 @@ class_name GameData extends Node +var game_address: String = "0.0.0.0" +var game_port: int = 8080 + + func _init() -> void: Globals.game_data = self diff --git a/scenes/data_bridge/lobby_data.gd b/scenes/data_bridge/lobby_data.gd index 160e1bf..b5be467 100644 --- a/scenes/data_bridge/lobby_data.gd +++ b/scenes/data_bridge/lobby_data.gd @@ -45,11 +45,15 @@ func _launch_game_server( var port: String = InstanceLauncher.launch_game_server(match_entry.data.type) if port == "-1": # TODO: Alert clients that the game wont be created due to - # server reaching number of allowed instances + # server reaching number of allowed instances. return - Globals.game_data.rpc_id(client1.id, "set_game_address", "127.0.0.1") - Globals.game_data.rpc_id(client2.id, "set_game_address", "127.0.0.1") + # TODO: Set address dynamically; I.E. if game on different server than lobby. + # As is, clients use the lobby address since games launch on new ports. + # Will have to change how we watch game server death if on diff server. + #Globals.game_data.rpc_id(client1.id, "set_game_address", "51.222.85.126") + #Globals.game_data.rpc_id(client2.id, "set_game_address", "51.222.85.126") + Globals.game_data.rpc_id(client1.id, "set_game_port", port) Globals.game_data.rpc_id(client2.id, "set_game_port", port) diff --git a/scenes/ui_controls/lobby_screen/lobby_ui.tscn b/scenes/ui_controls/lobby_screen/lobby_ui.tscn index b06fc86..301d630 100644 --- a/scenes/ui_controls/lobby_screen/lobby_ui.tscn +++ b/scenes/ui_controls/lobby_screen/lobby_ui.tscn @@ -44,10 +44,10 @@ size_flags_horizontal = 3 [node name="host_address_input" type="LineEdit" parent="body/left_body/server_host_hbox"] layout_mode = 2 size_flags_horizontal = 3 -text = "127.0.0.1" +text = "0.0.0.0" placeholder_text = "Server Address: (Eg. 0.0.0.0)" alignment = 1 -max_length = 12 +max_length = 15 emoji_menu_enabled = false clear_button_enabled = true caret_blink = true @@ -57,7 +57,7 @@ layout_mode = 2 min_value = 1.0 max_value = 65535.0 page = 10.0 -value = 31315.0 +value = 8080.0 rounded = true alignment = 1 diff --git a/server.gd b/server.gd index ffdb836..0a9c4c4 100644 --- a/server.gd +++ b/server.gd @@ -22,6 +22,8 @@ func _ready() -> void: for arg in OS.get_cmdline_user_args(): if "name_" in arg: name_(arg) + elif "server_" in arg: + server_(arg) match arg: "server": @@ -36,6 +38,16 @@ func name_(arg: String) -> void: var game_name = arg.split("_")[-1] self.name = game_name +func server_(arg: String) -> void: + var host_port = float(arg.split("_")[-1]) + + Globals.game_state.set_game_scene( + "res://scenes/screens/lobby_screen/lobby.tscn" + ) + + $scene/lobby_screen.find_child("host_port_range", true, false).set_value_no_signal(host_port) + $scene/lobby_screen.find_child("host_start_bttn", true, false).emit_signal("pressed") + func server(_arg: String) -> void: Globals.game_state.set_game_scene( "res://scenes/screens/lobby_screen/lobby.tscn"