Add private multiplayer room codes
This commit is contained in:
1 parent
7362ca0f02
commit
19b1a67773
8 files changed
+341
-24
No files matched your search
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user