feat: Implement core multiplayer features including user authentication, profile management, lobby, game mode managers, and leaderboard.
This commit is contained in:
@@ -19,6 +19,16 @@ signal character_changed(player_id: int, character_name: String)
|
||||
signal area_changed(area_name: String)
|
||||
signal player_list_changed()
|
||||
|
||||
# Stop N Go settings signals
|
||||
signal sng_go_duration_changed(duration: int)
|
||||
signal sng_stop_duration_changed(duration: int)
|
||||
signal sng_required_goals_changed(goals: int)
|
||||
|
||||
# Tekton Doors settings signals
|
||||
signal doors_swap_time_changed(time: int)
|
||||
signal doors_refresh_time_changed(time: int)
|
||||
signal doors_required_goals_changed(goals: int)
|
||||
|
||||
# Room data structure
|
||||
var current_room: Dictionary = {}
|
||||
var players_in_room: Array = [] # [{id, name, is_ready}]
|
||||
@@ -40,6 +50,16 @@ signal enable_cycle_timer_changed(enabled: bool)
|
||||
var scarcity_mode: String = "Normal" # Normal, Aggressive, Chaos
|
||||
signal scarcity_mode_changed(mode: String)
|
||||
|
||||
# Stop N Go settings
|
||||
var sng_go_duration: int = 15
|
||||
var sng_stop_duration: int = 4
|
||||
var sng_required_goals: int = 8
|
||||
|
||||
# Tekton Doors settings
|
||||
var doors_swap_time: int = 15
|
||||
var doors_refresh_time: int = 25
|
||||
var doors_required_goals: int = 8
|
||||
|
||||
# Character and area selection
|
||||
var available_characters: Array[String] = ["Copper", "Dabro", "Gatot", "Pip", "Random"]
|
||||
var available_areas: Array[String] = []
|
||||
@@ -259,6 +279,68 @@ func sync_scarcity_mode(mode: String) -> void:
|
||||
func get_scarcity_mode() -> String:
|
||||
return scarcity_mode
|
||||
|
||||
# =============================================================================
|
||||
# Stop N Go Settings
|
||||
# =============================================================================
|
||||
|
||||
func set_sng_go_duration(duration: int) -> void:
|
||||
sng_go_duration = duration
|
||||
if is_host: rpc("sync_sng_go_duration", duration)
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func sync_sng_go_duration(duration: int) -> void:
|
||||
sng_go_duration = duration
|
||||
emit_signal("sng_go_duration_changed", duration)
|
||||
|
||||
func set_sng_stop_duration(duration: int) -> void:
|
||||
sng_stop_duration = duration
|
||||
if is_host: rpc("sync_sng_stop_duration", duration)
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func sync_sng_stop_duration(duration: int) -> void:
|
||||
sng_stop_duration = duration
|
||||
emit_signal("sng_stop_duration_changed", duration)
|
||||
|
||||
func set_sng_required_goals(goals: int) -> void:
|
||||
sng_required_goals = goals
|
||||
if is_host: rpc("sync_sng_required_goals", goals)
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func sync_sng_required_goals(goals: int) -> void:
|
||||
sng_required_goals = goals
|
||||
emit_signal("sng_required_goals_changed", goals)
|
||||
|
||||
# =============================================================================
|
||||
# Tekton Doors Settings
|
||||
# =============================================================================
|
||||
|
||||
func set_doors_swap_time(time: int) -> void:
|
||||
doors_swap_time = time
|
||||
if is_host: rpc("sync_doors_swap_time", time)
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func sync_doors_swap_time(time: int) -> void:
|
||||
doors_swap_time = time
|
||||
emit_signal("doors_swap_time_changed", time)
|
||||
|
||||
func set_doors_refresh_time(time: int) -> void:
|
||||
doors_refresh_time = time
|
||||
if is_host: rpc("sync_doors_refresh_time", time)
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func sync_doors_refresh_time(time: int) -> void:
|
||||
doors_refresh_time = time
|
||||
emit_signal("doors_refresh_time_changed", time)
|
||||
|
||||
func set_doors_required_goals(goals: int) -> void:
|
||||
doors_required_goals = goals
|
||||
if is_host: rpc("sync_doors_required_goals", goals)
|
||||
|
||||
@rpc("authority", "call_local", "reliable")
|
||||
func sync_doors_required_goals(goals: int) -> void:
|
||||
doors_required_goals = goals
|
||||
emit_signal("doors_required_goals_changed", goals)
|
||||
|
||||
# =============================================================================
|
||||
# Character Selection
|
||||
# =============================================================================
|
||||
@@ -430,6 +512,13 @@ func start_game() -> void:
|
||||
rpc("sync_enable_cycle_timer", enable_cycle_timer)
|
||||
# Sync scarcity mode
|
||||
rpc("sync_scarcity_mode", scarcity_mode)
|
||||
# Sync game mode features
|
||||
rpc("sync_sng_go_duration", sng_go_duration)
|
||||
rpc("sync_sng_stop_duration", sng_stop_duration)
|
||||
rpc("sync_sng_required_goals", sng_required_goals)
|
||||
rpc("sync_doors_swap_time", doors_swap_time)
|
||||
rpc("sync_doors_refresh_time", doors_refresh_time)
|
||||
rpc("sync_doors_required_goals", doors_required_goals)
|
||||
# Sync game mode
|
||||
rpc("sync_game_mode", game_mode)
|
||||
|
||||
@@ -492,6 +581,12 @@ func request_room_info(requester_id: int, requester_name: String, requester_char
|
||||
rpc_id(requester_id, "sync_randomize_spawn", randomize_spawn)
|
||||
rpc_id(requester_id, "sync_enable_cycle_timer", enable_cycle_timer)
|
||||
rpc_id(requester_id, "sync_scarcity_mode", scarcity_mode)
|
||||
rpc_id(requester_id, "sync_sng_go_duration", sng_go_duration)
|
||||
rpc_id(requester_id, "sync_sng_stop_duration", sng_stop_duration)
|
||||
rpc_id(requester_id, "sync_sng_required_goals", sng_required_goals)
|
||||
rpc_id(requester_id, "sync_doors_swap_time", doors_swap_time)
|
||||
rpc_id(requester_id, "sync_doors_refresh_time", doors_refresh_time)
|
||||
rpc_id(requester_id, "sync_doors_required_goals", doors_required_goals)
|
||||
rpc_id(requester_id, "sync_game_mode", game_mode)
|
||||
rpc_id(requester_id, "sync_area", selected_area)
|
||||
|
||||
@@ -568,3 +663,9 @@ func reset() -> void:
|
||||
selected_area = available_areas[0]
|
||||
local_character_index = 0 # Default to "Copper"
|
||||
enable_cycle_timer = false
|
||||
sng_go_duration = 15
|
||||
sng_stop_duration = 4
|
||||
sng_required_goals = 8
|
||||
doors_swap_time = 15
|
||||
doors_refresh_time = 25
|
||||
doors_required_goals = 8
|
||||
|
||||
Reference in New Issue
Block a user