update BG, tile

This commit is contained in:
2026-03-10 23:13:24 +08:00
parent d53e4601e4
commit 884ce60cf1
19 changed files with 273 additions and 18 deletions
+2 -2
View File
@@ -358,8 +358,8 @@ func link_google(id_token: String) -> bool:
func logout() -> void:
print("[AuthManager] Logging out...")
if NakamaManager.socket:
NakamaManager.socket.close()
# FULL CLEANUP: close socket, leave bridge, clear multiplayer peer
NakamaManager.cleanup()
clear_session()
+1
View File
@@ -50,3 +50,4 @@ func reset():
bots.clear()
game_started_flag = false
local_player_character = null
emit_signal("game_state_changed")
+26 -4
View File
@@ -40,9 +40,9 @@ 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_areas: Array[String] = []
var available_game_modes: Array[String] = ["Freemode", "Stop n Go", "Tekton Doors"]
var selected_area: String = "Desert" # Host-controlled
var selected_area: String = "Classic" # Host-controlled
var game_mode: String = "Freemode" # Host-controlled
var local_character_index: int = 0 # Local player's character index
@@ -59,11 +59,24 @@ signal game_mode_changed(mode: String)
var _all_ready: bool = false
func _ready():
_update_available_areas(game_mode)
# Connect to Nakama signals
NakamaManager.match_joined.connect(_on_match_joined)
multiplayer.peer_connected.connect(_on_peer_connected)
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
func _update_available_areas(mode: String) -> void:
match mode:
"Freemode":
available_areas = ["Classic", "Colloseum"]
"Stop n Go":
available_areas = ["Stop N Go Arena"]
"Tekton Doors":
available_areas = ["Tekton Doors Arena"]
_:
available_areas = ["Classic"]
# =============================================================================
# Room Creation / Joining
# =============================================================================
@@ -106,6 +119,9 @@ func leave_room() -> void:
# Disconnect from Nakama match
if NakamaManager.socket:
NakamaManager.socket.close()
# Important: Clean up game state as well to prevent ghost players
GameStateManager.reset()
emit_signal("room_left")
@@ -384,11 +400,16 @@ func set_game_mode(mode: String) -> void:
game_mode = mode
rpc("sync_game_mode", mode)
_update_available_areas(mode)
if selected_area not in available_areas:
set_area(available_areas[0])
@rpc("authority", "call_local", "reliable")
func sync_game_mode(mode: String) -> void:
"""Sync game mode selection from host to clients."""
game_mode = mode
_update_available_areas(mode)
emit_signal("game_mode_changed", mode)
func start_game() -> void:
@@ -540,7 +561,8 @@ func reset() -> void:
is_host = false
_all_ready = false
match_duration = 180 # Reset to default 3 minutes
selected_area = "Desert"
game_mode = "Freemode"
_update_available_areas(game_mode)
selected_area = available_areas[0]
local_character_index = 0 # Default to "Copper"
enable_cycle_timer = false
game_mode = "Freemode"
+4 -3
View File
@@ -46,6 +46,7 @@ const TILE_START = 3 # Start Line
const TILE_FINISH = 3 # Finish Line
const TILE_SAFE = 2 # Green Safe Zone
const TILE_OBSTACLE = 4 # Wall
const TILE_LIGHTNING_STONE = 15 # Ancient Rock with Lightning Symbol
var hud_layer: CanvasLayer
var mission_label: Label
@@ -709,8 +710,8 @@ func _spawn_powerup_tiles():
for i in range(PERMANENT_POWERUP_LOCATIONS.size()):
var pos = PERMANENT_POWERUP_LOCATIONS[i]
# Set Floor 0 beneath power-up to ID 1 (Hover pattern) - Static PADS
gridmap.set_cell_item(Vector3i(pos.x, 0, pos.y), 1)
# Set Floor 0 beneath power-up to ID 15 (Ancient Lightning Stone)
gridmap.set_cell_item(Vector3i(pos.x, 0, pos.y), TILE_LIGHTNING_STONE)
# Cycle through the available power-up types
var tile_id = POWERUP_TILES[i % POWERUP_TILES.size()]
@@ -720,7 +721,7 @@ func _spawn_powerup_tiles():
# Sync both floor and tile to all clients and host
if can_rpc():
main.rpc("sync_grid_item", pos.x, 0, pos.y, 1) # Sync floor change (Pad on)
main.rpc("sync_grid_item", pos.x, 0, pos.y, TILE_LIGHTNING_STONE) # Sync floor change (Stone on)
main.rpc("sync_grid_item", pos.x, 1, pos.y, tile_id) # Sync power-up
powerups_spawned = true