Browse Source

feat(game): more configurable home screen

Bryan Lee 1 year ago
parent
commit
01ccb12813

+ 0 - 1
project/authentication/authentication.gd

@@ -139,7 +139,6 @@ func sign_in() -> Result:
 	var sign_in_body = sign_in_result.unwrap()
 	match sign_in_body.type:
 		"success":
-			print("Successfully logged in: ", sign_in_body.payload)
 			user_id = Option.new(sign_in_body.payload.user.id)
 			user_name = Option.new(sign_in_body.payload.user.name)
 			access_token = Option.new(sign_in_body.payload.access_token.value)

+ 0 - 2
project/env.sample.gd

@@ -7,8 +7,6 @@ const AUTH_SERVER_URI := "http://localhost:8000"
 const AUTH_SERVER_PLAY_GAMES_OAUTH_CLIENT_ID := ""
 const AUTH_SERVER_STEAM_IDENTITY := "authentication"
 
-const GAME_SERVER_URI := "http://localhost:9000"
-
 const IOS_BUNDLE_ID := "com.example.game"
 const STEAM_APP_ID := 480
 const STEAM_GAME_ID := 480

File diff suppressed because it is too large
+ 0 - 0
project/export_presets.cfg


+ 13 - 20
project/game/game.gd

@@ -3,6 +3,13 @@ class_name Game
 
 @onready var world_spawner := $WorldSpawner as MultiplayerSpawner
 
+@export var start_server := false
+var server_port_str: String = Program.cmdline_args.get("port", "9000")
+@export var server_port := int(server_port_str)
+
+@export var start_client := false
+@export var game_server_address := "ws://localhost:9000"
+
 
 func _ready() -> void:
 	# Production server build.
@@ -12,32 +19,18 @@ func _ready() -> void:
 			OS.kill(OS.get_process_id())
 		return
 	
-	# Production client build.
-	if not OS.is_debug_build():
-		var client_result := _start_client()
-		print(client_result)
-		return
+	if start_server:
+		print(_start_server())
 	
-	#_try_debug_server_or_client()
-	_start_client()
-
-
-func _try_debug_server_or_client() -> void:
-	# In debug builds, we try loading the server on all programs since only one
-	# program will be able to bind to the server port. This leaves us with just
-	# one server.
-	var server_result := _start_server()
-	print(server_result)
-	if server_result.is_err():
-		var client_result := _start_client()
-		print(client_result)
+	if start_client:
+		print(_start_client())
 
 
 ## [codeblock]
 ## @returns Result<null, int>
 ## [/codeblock]
 func _start_server() -> Result:
-	Program.game_server = GameServer.new(world_spawner)
+	Program.game_server = GameServer.new(server_port, world_spawner)
 	add_child(Program.game_server, true)
 
 	var start_result := Program.game_server.start()
@@ -53,7 +46,7 @@ func _start_server() -> Result:
 ## @returns Result<null, int>
 ## [/codeblock]
 func _start_client() -> Result:
-	Program.game_client = GameClient.new()
+	Program.game_client = GameClient.new(game_server_address)
 	add_child(Program.game_client, true)
 
 	var start_result := Program.game_client.start()

+ 5 - 3
project/game/game_client.gd

@@ -5,17 +5,19 @@ class_name GameClient
 var peer_id := 0
 var peer := WebSocketMultiplayerPeer.new()
 
+var game_server_address: String
 
-func _init() -> void:
+func _init(_game_server_address: String) -> void:
 	name = "GameClient"
+	game_server_address = _game_server_address
 
 
 ## [codeblock]
 ## @returns Result<null, int>
 ## [/codeblock]
 func start() -> Result:
-	Logger.client_log(["starting client connection to game server at: ", Env.GAME_SERVER_URI], ["init"])
-	var start_result := Result.from_gderr(peer.create_client(Env.GAME_SERVER_URI))
+	Logger.client_log(["starting client connection to game server at: ", game_server_address], ["init"])
+	var start_result := Result.from_gderr(peer.create_client(game_server_address))
 
 	multiplayer.multiplayer_peer = peer
 	multiplayer.connected_to_server.connect(_handle_connected_to_server)

+ 5 - 5
project/game/game_server.gd

@@ -1,19 +1,19 @@
 extends Node
 class_name GameServer
 
-var port_str: String = Program.cmdline_args.get("port", "9000")
-var port := int(port_str)
-
-var id_str: String = Program.cmdline_args.get("server-id")
+var id_str = Program.cmdline_args.get("server-id")
 var id := int(id_str) if id_str else randi()
 
 var peer := WebSocketMultiplayerPeer.new()
+
+var port: int
 var world_spawner: MultiplayerSpawner
 
 
-func _init(_world_spawner: MultiplayerSpawner) -> void:
+func _init(_port: int, _world_spawner: MultiplayerSpawner) -> void:
 	name = "GameServer"
 	world_spawner = _world_spawner
+	port = _port
 
 
 ## [codeblock]

+ 26 - 10
project/main/main.gd

@@ -19,14 +19,30 @@ func _ready() -> void:
 	if sign_in_result.is_err():
 		print(sign_in_result.unwrap_err())
 
-	await load_debug_auth_screen()
-
-
-func load_debug_auth_screen() -> void:
-	var debug_auth_screen := preload("res://screens/debug_auth.tscn").instantiate()
-	await transition.fade_to(debug_auth_screen)
-
-
-func load_game_screen() -> void:
-	var game_screen := preload("res://game/game.tscn").instantiate()
+	await load_home_screen()
+
+
+func load_home_screen() -> void:
+	var home_screen := preload("res://screens/home.tscn").instantiate()
+	await transition.fade_to(home_screen)
+
+
+## [codeblock]
+## @param params GameOptions {
+##   start_server?: bool
+##   server_port?: int
+##   start_client?: bool
+##   game_server_address?: String
+## }
+## [/codeblock]
+func load_game_screen(params := {}) -> void:
+	var game_screen := preload("res://game/game.tscn").instantiate() as Game
+	if params.has("start_server"):
+		game_screen.start_server = params.start_server
+	if params.has("server_port"):
+		game_screen.server_port = params.server_port
+	if params.has("start_client"):
+		game_screen.start_client = params.start_client
+	if params.has("game_server_address"):
+		game_screen.game_server_address = params.game_server_address
 	await transition.fade_to(game_screen)

+ 0 - 25
project/screens/debug_auth.gd

@@ -1,25 +0,0 @@
-extends Control
-class_name DebugAuthScreen
-
-@onready var user_name_label := $UserName as Label
-@onready var provider_id_label := $ProviderId as Label
-@onready var server_user_id_label := $ServerUserId as Label
-
-
-func _ready() -> void:
-	if Authentication.main_provider == null:
-		user_name_label.text = "Not authenticated"
-		provider_id_label.text = ""
-		server_user_id_label.text = ""
-	else:
-		user_name_label.text = Authentication.main_provider.user_name.unwrap_or("")
-		provider_id_label.text = Authentication.main_provider.provider_id.unwrap_or("")
-		server_user_id_label.text = Authentication.user_id.unwrap_or("")
-
-
-func _on_start_game_button_pressed():
-	Program.main.load_game_screen()
-
-
-func _on_sign_in_button_pressed():
-	print(await Authentication.sign_in())

+ 0 - 52
project/screens/debug_auth.tscn

@@ -1,52 +0,0 @@
-[gd_scene load_steps=2 format=3 uid="uid://bsm2i1yruxm35"]
-
-[ext_resource type="Script" path="res://screens/debug_auth.gd" id="1_dv2io"]
-
-[node name="DebugAuth" type="VBoxContainer"]
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-alignment = 1
-script = ExtResource("1_dv2io")
-
-[node name="Title" type="Label" parent="."]
-layout_mode = 2
-theme_override_font_sizes/font_size = 52
-text = "MultiplayerBase"
-horizontal_alignment = 1
-vertical_alignment = 1
-
-[node name="StartGameButton" type="Button" parent="."]
-layout_mode = 2
-size_flags_horizontal = 4
-theme_override_font_sizes/font_size = 24
-text = "Start Game"
-
-[node name="SignInButton" type="Button" parent="."]
-layout_mode = 2
-size_flags_horizontal = 4
-theme_override_font_sizes/font_size = 24
-text = "Sign In"
-
-[node name="UserName" type="Label" parent="."]
-layout_mode = 2
-theme_override_font_sizes/font_size = 28
-text = "Loading username..."
-horizontal_alignment = 1
-
-[node name="ProviderId" type="Label" parent="."]
-layout_mode = 2
-theme_override_font_sizes/font_size = 24
-text = "Loading ID..."
-horizontal_alignment = 1
-
-[node name="ServerUserId" type="Label" parent="."]
-layout_mode = 2
-theme_override_font_sizes/font_size = 24
-text = "Loading Server ID..."
-horizontal_alignment = 1
-
-[connection signal="pressed" from="StartGameButton" to="." method="_on_start_game_button_pressed"]
-[connection signal="pressed" from="SignInButton" to="." method="_on_sign_in_button_pressed"]

+ 51 - 0
project/screens/home.gd

@@ -0,0 +1,51 @@
+extends Control
+class_name DebugAuthScreen
+
+var logged_in := false :
+	set(new):
+		logged_in = new
+		if logged_in:
+			$NotLoggedIn.hide()
+			$LoggedIn.show()
+			$LoggedIn/UserName.text = Authentication.user_name.unwrap_or("")
+			$LoggedIn/UserId.text = Authentication.user_id.unwrap_or("")
+		else:
+			$NotLoggedIn.show()
+			$LoggedIn.hide()
+
+
+func _ready() -> void:
+	_on_sign_in_button_pressed()
+
+
+func _on_sign_in_button_pressed() -> void:
+	var auth_result := await Authentication.sign_in()
+	print(auth_result)
+	logged_in = Authentication.user_id.is_some()
+
+
+@onready var game_server_address_input := $LoggedIn/ManualJoin/GameServerAddressInput as LineEdit
+func _on_join_server_button_pressed():
+	Program.main.load_game_screen({
+		"start_client": true,
+		"game_server_address": game_server_address_input.text,
+	})
+
+
+func _on_join_queue_button_pressed():
+	pass # Replace with function body.
+
+
+func _on_leave_queue_button_pressed():
+	pass # Replace with function body.
+
+@onready var server_port_input := $LoggedIn/Debug/DebugServer/ServerPortInput as LineEdit
+func _on_start_debug_server_button_pressed():
+	Program.main.load_game_screen({
+		"start_server": true,
+		"server_port": server_port_input.text,
+	})
+
+
+func _on_start_local_game_pressed():
+	pass # Replace with function body.

+ 145 - 0
project/screens/home.tscn

@@ -0,0 +1,145 @@
+[gd_scene load_steps=2 format=3 uid="uid://bsm2i1yruxm35"]
+
+[ext_resource type="Script" path="res://screens/home.gd" id="1_qox8l"]
+
+[node name="Home" type="VBoxContainer"]
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/separation = 8
+alignment = 1
+script = ExtResource("1_qox8l")
+
+[node name="Title" type="Label" parent="."]
+layout_mode = 2
+theme_override_font_sizes/font_size = 52
+text = "MultiplayerBase"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="NotLoggedIn" type="MarginContainer" parent="."]
+layout_mode = 2
+theme_override_constants/margin_top = 16
+theme_override_constants/margin_bottom = 16
+
+[node name="SignInButton" type="Button" parent="NotLoggedIn"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 28
+text = "Sign In"
+
+[node name="LoggedIn" type="VBoxContainer" parent="."]
+visible = false
+layout_mode = 2
+theme_override_constants/separation = 16
+
+[node name="UserName" type="Label" parent="LoggedIn"]
+layout_mode = 2
+theme_override_font_sizes/font_size = 28
+text = "Loading username..."
+horizontal_alignment = 1
+
+[node name="UserId" type="Label" parent="LoggedIn"]
+layout_mode = 2
+theme_override_font_sizes/font_size = 24
+text = "Loading User ID..."
+horizontal_alignment = 1
+
+[node name="ManualLabel" type="Label" parent="LoggedIn"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 32
+text = "Manual"
+
+[node name="ManualJoin" type="HBoxContainer" parent="LoggedIn"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_constants/separation = 8
+
+[node name="GameServerAddressInput" type="LineEdit" parent="LoggedIn/ManualJoin"]
+custom_minimum_size = Vector2(380, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 28
+text = "ws://localhost:9000"
+expand_to_text_length = true
+
+[node name="JoinServerButton" type="Button" parent="LoggedIn/ManualJoin"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 28
+text = "Join Server"
+
+[node name="MatchmakingLabel" type="Label" parent="LoggedIn"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 32
+text = "Matchmaking"
+
+[node name="Matchmaking" type="HBoxContainer" parent="LoggedIn"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_constants/separation = 8
+
+[node name="MatchmakingAddressInput" type="LineEdit" parent="LoggedIn/Matchmaking"]
+custom_minimum_size = Vector2(380, 0)
+layout_mode = 2
+theme_override_font_sizes/font_size = 28
+text = "ws://localhost:8100"
+expand_to_text_length = true
+
+[node name="JoinQueueButton" type="Button" parent="LoggedIn/Matchmaking"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 28
+text = "Join Queue
+"
+
+[node name="LeaveQueueButton" type="Button" parent="LoggedIn/Matchmaking"]
+visible = false
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 28
+text = "Leave Queue
+"
+
+[node name="Debug" type="VBoxContainer" parent="LoggedIn"]
+layout_mode = 2
+theme_override_constants/separation = 8
+
+[node name="DebugLabel" type="Label" parent="LoggedIn/Debug"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 32
+text = "Debug"
+
+[node name="DebugServer" type="HBoxContainer" parent="LoggedIn/Debug"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_constants/separation = 8
+
+[node name="ServerPortInput" type="LineEdit" parent="LoggedIn/Debug/DebugServer"]
+layout_mode = 2
+theme_override_font_sizes/font_size = 28
+text = "9000"
+expand_to_text_length = true
+
+[node name="StartDebugServerButton" type="Button" parent="LoggedIn/Debug/DebugServer"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 28
+text = "Start Server"
+
+[node name="StartLocalGame" type="Button" parent="LoggedIn/Debug"]
+layout_mode = 2
+size_flags_horizontal = 4
+theme_override_font_sizes/font_size = 28
+text = "Start Local Game"
+
+[connection signal="pressed" from="NotLoggedIn/SignInButton" to="." method="_on_sign_in_button_pressed"]
+[connection signal="pressed" from="LoggedIn/ManualJoin/JoinServerButton" to="." method="_on_join_server_button_pressed"]
+[connection signal="pressed" from="LoggedIn/Matchmaking/JoinQueueButton" to="." method="_on_join_queue_button_pressed"]
+[connection signal="pressed" from="LoggedIn/Matchmaking/LeaveQueueButton" to="." method="_on_leave_queue_button_pressed"]
+[connection signal="pressed" from="LoggedIn/Debug/DebugServer/StartDebugServerButton" to="." method="_on_start_debug_server_button_pressed"]
+[connection signal="pressed" from="LoggedIn/Debug/StartLocalGame" to="." method="_on_start_local_game_pressed"]

Some files were not shown because too many files changed in this diff