feat: Implement tile scarcity model for tile generation and power-up inventory UI for player interaction.
This commit is contained in:
+46
-10
@@ -11,6 +11,7 @@ var screen_shake_manager
|
||||
var touch_controls
|
||||
var camera_context_manager
|
||||
var stop_n_go_manager
|
||||
var stop_n_go_winner_id: int = -1 # Track who finished first in Stop n Go mode
|
||||
var obstacle_manager
|
||||
|
||||
# Minimal local state
|
||||
@@ -598,8 +599,8 @@ func _start_game():
|
||||
_assign_random_spawn_positions()
|
||||
|
||||
# PRE-GAME COUNTDOWN (3s)
|
||||
# Spawn static obstacles before countdown starts
|
||||
if obstacle_manager:
|
||||
# Spawn static obstacles before countdown starts (Stop n Go only)
|
||||
if obstacle_manager and LobbyManager.game_mode == "Stop n Go":
|
||||
obstacle_manager.spawn_random_obstacles(15)
|
||||
|
||||
# Spawn mission tiles BEFORE countdown but AFTER walls (Stop n Go only)
|
||||
@@ -1625,8 +1626,17 @@ func _on_leaderboard_updated(sorted_scores: Array):
|
||||
var score = goals_cycle_manager.get_player_score(peer_id) if goals_cycle_manager else 0
|
||||
sorted_players.append({"node": p, "score": score})
|
||||
|
||||
# Sort by score descending
|
||||
sorted_players.sort_custom(func(a, b): return a.score > b.score)
|
||||
# Sort by score descending (with Stop n Go winner priority)
|
||||
if LobbyManager.game_mode == "Stop n Go" and stop_n_go_winner_id != -1:
|
||||
sorted_players.sort_custom(func(a, b):
|
||||
var a_id = a.node.name.to_int()
|
||||
var b_id = b.node.name.to_int()
|
||||
if a_id == stop_n_go_winner_id: return true
|
||||
if b_id == stop_n_go_winner_id: return false
|
||||
return a.score > b.score
|
||||
)
|
||||
else:
|
||||
sorted_players.sort_custom(func(a, b): return a.score > b.score)
|
||||
|
||||
# Assign rank
|
||||
for i in range(sorted_players.size()):
|
||||
@@ -1647,6 +1657,9 @@ func _on_global_timer_updated(time_remaining: float):
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func sync_game_end_stop_n_go(winner_id: int):
|
||||
print("[STOP n GO] Game ended! Winner: ", winner_id)
|
||||
stop_n_go_winner_id = winner_id
|
||||
if goals_cycle_manager:
|
||||
goals_cycle_manager.stop_n_go_winner_id = winner_id
|
||||
|
||||
var winner_name = "Player " + str(winner_id)
|
||||
var player_node = get_node_or_null(str(winner_id))
|
||||
@@ -1736,14 +1749,23 @@ func _show_game_over_panel():
|
||||
leaderboard_container.add_theme_constant_override("separation", 15)
|
||||
inner_vbox.add_child(leaderboard_container)
|
||||
|
||||
# Get final scores
|
||||
var player_scores = []
|
||||
for p in get_tree().get_nodes_in_group("Players"):
|
||||
player_scores.append({
|
||||
"peer_id": p.name.to_int(),
|
||||
"name": p.display_name if not p.display_name.is_empty() else str(p.name),
|
||||
"score": goals_cycle_manager.get_player_score(p.name.to_int()) if goals_cycle_manager else 0
|
||||
})
|
||||
player_scores.sort_custom(func(a, b): return a.score > b.score)
|
||||
|
||||
# Custom Sort for Stop n Go: Winner always first
|
||||
if LobbyManager.game_mode == "Stop n Go" and stop_n_go_winner_id != -1:
|
||||
player_scores.sort_custom(func(a, b):
|
||||
if a.peer_id == stop_n_go_winner_id: return true
|
||||
if b.peer_id == stop_n_go_winner_id: return false
|
||||
return a.score > b.score
|
||||
)
|
||||
else:
|
||||
player_scores.sort_custom(func(a, b): return a.score > b.score)
|
||||
|
||||
# Display each player
|
||||
for i in range(min(player_scores.size(), 8)):
|
||||
@@ -1867,8 +1889,15 @@ func sync_leaderboard_data(player_data: Array):
|
||||
if not vbox:
|
||||
return
|
||||
|
||||
# Sort by score descending
|
||||
player_data.sort_custom(func(a, b): return a.score > b.score)
|
||||
# Sort by score descending (with Stop n Go winner priority)
|
||||
if LobbyManager.game_mode == "Stop n Go" and stop_n_go_winner_id != -1:
|
||||
player_data.sort_custom(func(a, b):
|
||||
if a.peer_id == stop_n_go_winner_id: return true
|
||||
if b.peer_id == stop_n_go_winner_id: return false
|
||||
return a.score > b.score
|
||||
)
|
||||
else:
|
||||
player_data.sort_custom(func(a, b): return a.score > b.score)
|
||||
|
||||
# Update entries
|
||||
_render_leaderboard_entries(player_data)
|
||||
@@ -1895,8 +1924,15 @@ func _update_leaderboard_display():
|
||||
var score = goals_cycle_manager.get_player_score(peer_id) if goals_cycle_manager else 0
|
||||
player_data.append({"peer_id": peer_id, "name": p.display_name if not p.display_name.is_empty() else str(p.name), "score": score})
|
||||
|
||||
# Sort by score descending
|
||||
player_data.sort_custom(func(a, b): return a.score > b.score)
|
||||
# Sort by score descending (with Stop n Go winner priority)
|
||||
if LobbyManager.game_mode == "Stop n Go" and stop_n_go_winner_id != -1:
|
||||
player_data.sort_custom(func(a, b):
|
||||
if a.peer_id == stop_n_go_winner_id: return true
|
||||
if b.peer_id == stop_n_go_winner_id: return false
|
||||
return a.score > b.score
|
||||
)
|
||||
else:
|
||||
player_data.sort_custom(func(a, b): return a.score > b.score)
|
||||
|
||||
_render_leaderboard_entries(player_data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user