feat: add Stop n Go game mode with new arena, assets, and manager script.

This commit is contained in:
Yogi Wiguna
2026-03-13 12:23:47 +08:00
parent 84ae27c96a
commit 898f867cee
18 changed files with 771 additions and 1323 deletions
Binary file not shown.
+9 -3
View File
@@ -21,6 +21,12 @@ var portal_mode_manager
var _connection_check_timer: float = 0.0
var reserved_static_positions: Array[Vector2i] = []
func _can_rpc() -> bool:
if not is_inside_tree(): return false
if not multiplayer.has_multiplayer_peer(): return false
if multiplayer.multiplayer_peer.get_class() == "OfflineMultiplayerPeer": return false
if multiplayer.multiplayer_peer.get_connection_status() != MultiplayerPeer.CONNECTION_CONNECTED: return false
return true
func _ready():
# Initialize scene managers
@@ -93,7 +99,7 @@ func _setup_multiplayer_spawners():
func _apply_arena_background():
var arena_bg = get_node_or_null("ArenaBG")
var selected_area = LobbyManager.get_selected_area()
var selected_area = LobbyManager.selected_area
var texture_path = ""
match selected_area:
@@ -1411,10 +1417,10 @@ func request_full_player_sync(requesting_peer_id: int):
"name": player.display_name,
"goals": player.goals,
"playerboard": player.playerboard,
"is_bot": player.is_bot || player.is_in_group("Bots"),
"spawn_point_selected": player.spawn_point_selected
}
rpc_id(requesting_peer_id, "create_specific_player", player_data)
if _can_rpc():
rpc_id(requesting_peer_id, "create_specific_player", player_data)
await get_tree().create_timer(0.1).timeout
@rpc("reliable")
+5 -2
View File
@@ -33,7 +33,9 @@ var display_name: String:
# Helper to check network status
func can_rpc() -> bool:
return multiplayer.has_multiplayer_peer() and multiplayer.multiplayer_peer.get_connection_status() == MultiplayerPeer.CONNECTION_CONNECTED
if not multiplayer.has_multiplayer_peer(): return false
if multiplayer.multiplayer_peer.get_class() == "OfflineMultiplayerPeer": return false
return multiplayer.multiplayer_peer.get_connection_status() == MultiplayerPeer.CONNECTION_CONNECTED
# Special effect states
var is_frozen: bool = false
@@ -1131,7 +1133,8 @@ func _physics_process(delta):
# Use a slightly larger threshold (0.05) to ignore micro-vibrations
if current_world_pos.distance_to(last_sent_pos) > 0.05:
set_meta("_last_sent_pos", current_world_pos)
rpc("remote_set_position", current_world_pos, Time.get_ticks_msec())
if can_rpc():
rpc("remote_set_position", current_world_pos, Time.get_ticks_msec())
# NOTE: Finish line checking removed - game uses cycle-based goals system now