Add private multiplayer room codes

This commit is contained in:
Emporex committed 2026-10-04 04:10:20 +02:00
1 parent 7362ca0f02
commit 19b1a67773
8 files changed
+341 -24

No files matched your search

+61
View File
@@ -12,6 +12,7 @@ const COOP_REACTOR_LIVES := 30
var matchmaking_state := "idle"
var matchmaking_mode := ""
var matchmaking_difficulty := 1
var private_room_code := ""
var online_match = null
var online_mode := false
var player_slot := -1
@@ -26,6 +27,7 @@ func reset_coop_session(start_credits := COOP_START_CREDITS, reactor_lives := CO
online_mode = false
player_slot = -1
latest_snapshot = {}
private_room_code = ""
func spend_player_credits(player_index: int, amount: int) -> bool:
@@ -76,11 +78,37 @@ func begin_search(mode := "quick", difficulty := 1) -> void:
call_deferred("_begin_online_search", mode)
func create_private_room(difficulty := 1) -> void:
matchmaking_mode = "private_host"
matchmaking_difficulty = clampi(difficulty, 0, 2)
private_room_code = ""
online_match = null
online_mode = false
player_slot = -1
latest_snapshot = {}
matchmaking_state = "waiting_for_service"
state_changed.emit(matchmaking_state)
call_deferred("_create_private_room_online")
func join_private_room(room_code: String) -> void:
matchmaking_mode = "private_join"
private_room_code = room_code.to_upper().strip_edges()
online_match = null
online_mode = false
player_slot = -1
latest_snapshot = {}
matchmaking_state = "waiting_for_service"
state_changed.emit(matchmaking_state)
call_deferred("_join_private_room_online")
func cancel_search() -> void:
var online_manager = get_parent().get_node_or_null("OnlineManager")
if online_manager:
online_manager.cancel_matchmaking()
matchmaking_mode = ""
private_room_code = ""
matchmaking_state = "idle"
state_changed.emit(matchmaking_state)
@@ -102,10 +130,43 @@ func _begin_online_search(mode: String) -> void:
state_changed.emit(matchmaking_state)
func _ensure_online_manager():
var online_manager = get_parent().get_node_or_null("OnlineManager")
if not online_manager:
matchmaking_state = "offline"
state_changed.emit(matchmaking_state)
return null
if not online_manager.is_authenticated():
await online_manager.connect_and_authenticate()
return online_manager
func _create_private_room_online() -> void:
var online_manager = await _ensure_online_manager()
if not online_manager or matchmaking_mode != "private_host":
return
var created: bool = await online_manager.create_private_room(matchmaking_difficulty)
private_room_code = online_manager.private_room_code if created else ""
matchmaking_state = "hosting" if created else online_manager.connection_state
state_changed.emit(matchmaking_state)
func _join_private_room_online() -> void:
var online_manager = await _ensure_online_manager()
if not online_manager or matchmaking_mode != "private_join":
return
var joined: bool = await online_manager.join_private_room(private_room_code)
matchmaking_state = "matched" if joined else "room_not_found"
state_changed.emit(matchmaking_state)
func _on_online_matchmaking_state_changed(value: String) -> void:
if matchmaking_state == "idle":
return
matchmaking_state = value
var online_manager = get_parent().get_node_or_null("OnlineManager")
if online_manager and not online_manager.private_room_code.is_empty():
private_room_code = online_manager.private_room_code
state_changed.emit(matchmaking_state)