attempt to make stop n go gamemode

This commit is contained in:
2026-02-19 03:42:59 +08:00
parent 4ce917db0f
commit a7a8106b7e
11 changed files with 516 additions and 28 deletions
+31
View File
@@ -41,9 +41,14 @@ signal scarcity_mode_changed(mode: String)
# Character and area selection
var available_characters: Array[String] = ["Copper", "Dabro", "Gatot", "Pip", "Random"]
var available_areas: Array[String] = ["Desert", "Forest", "City", "Factory"]
var available_game_modes: Array[String] = ["Freemode", "Stop n Go"]
var selected_area: String = "Desert" # Host-controlled
var game_mode: String = "Freemode" # Host-controlled
var local_character_index: int = 0 # Local player's character index
# Signals
signal game_mode_changed(mode: String)
# Ready to start game check
var _all_ready: bool = false
@@ -345,6 +350,29 @@ func sync_area(area_name: String) -> void:
selected_area = area_name
emit_signal("area_changed", area_name)
# =============================================================================
# Game Mode Selection (Host Only)
# =============================================================================
func set_game_mode(mode: String) -> void:
"""Host sets the game mode. Syncs to all clients."""
if not is_host:
push_warning("Only host can change game mode")
return
if mode not in available_game_modes:
push_error("Invalid game mode: " + mode)
return
game_mode = mode
rpc("sync_game_mode", mode)
@rpc("authority", "call_local", "reliable")
func sync_game_mode(mode: String) -> void:
"""Sync game mode selection from host to clients."""
game_mode = mode
emit_signal("game_mode_changed", mode)
func start_game() -> void:
"""Host triggers game start (transitions all players to main.tscn)."""
if not is_host:
@@ -361,6 +389,8 @@ func start_game() -> void:
rpc("sync_enable_cycle_timer", enable_cycle_timer)
# Sync scarcity mode
rpc("sync_scarcity_mode", scarcity_mode)
# Sync game mode
rpc("sync_game_mode", game_mode)
# Notify all clients to start
rpc("_on_game_starting")
@@ -484,3 +514,4 @@ func reset() -> void:
selected_area = "Desert"
local_character_index = 0 # Default to "Copper"
enable_cycle_timer = false
game_mode = "Freemode"