rename gauntlet→candy_survival + rewrite Candy Survival per boss design

- Rename enum GAUNTLET→CANDY_SURVIVAL, all gauntlet_*→candy_survival_*
- Rename files: gauntlet_manager→candy_survival_manager, candy_cannon→candy_survival_npc, gauntlet.tscn→candy_survival.tscn
- Rewrite candy_survival_manager.gd: blueprints, candy stack, Mekton delivery, Sugar Rush, knock/ghost charges, sticky-as-wall
- Update player_movement_manager.gd: smack→knock system, ghost integration
- All Candy Survival issues (#54-57, #65-70) retitled per boss design
- Shared managers (goals_cycle, goal, player_race, playerboard, turn) untouched
This commit is contained in:
god
2026-07-06 01:28:39 +08:00
parent 114748a54f
commit 528e22875d
33 changed files with 731 additions and 2181 deletions
+41 -41
View File
@@ -26,10 +26,10 @@ signal sng_go_duration_changed(duration: int)
signal sng_stop_duration_changed(duration: int)
signal sng_required_goals_changed(goals: int)
# Gauntlet settings signals
signal gauntlet_round_duration_changed(duration: int)
signal gauntlet_growth_interval_changed(interval: float)
signal gauntlet_cells_per_tick_changed(cells: Dictionary)
# Candy Survival settings signals
signal candy_survival_duration_changed(duration: int)
signal candy_survival_growth_interval_changed(interval: float)
signal candy_survival_cells_per_tick_changed(cells: Dictionary)
# Room data structure
var current_room: Dictionary = {}
@@ -69,10 +69,10 @@ var sng_go_duration: int = 20
var sng_stop_duration: int = 4
var sng_required_goals: int = 8
# Gauntlet settings
var gauntlet_round_duration: int = 180
var gauntlet_growth_interval: float = 3.0 # seconds between growth ticks
var gauntlet_cells_per_tick: Dictionary = {
# Candy Survival settings
var candy_survival_round_duration: int = 180
var candy_survival_growth_interval: float = 3.0 # seconds between growth ticks
var candy_survival_cells_per_tick: Dictionary = {
"phase1": [4, 6],
"phase2": [6, 8],
"phase3": [8, 10],
@@ -84,7 +84,7 @@ var rematch_votes: Array = [] # [player_id, ...]
# Character and area selection
var available_characters: Array[String] = ["Copper", "Dabro", "Gatot", "Pip", "Random"]
var available_areas: Array[String] = []
var available_game_modes: Array[String] = ["Freemode", "Stop n Go", "Candy Pump Survival"]
var available_game_modes: Array[String] = ["Freemode", "Stop n Go", "Candy Survival"]
var selected_area: String = "Freemode Arena" # Host-controlled
var game_mode: String = "Freemode" # Host-controlled
var local_character_index: int = 0 # Local player's character index
@@ -139,8 +139,8 @@ func _update_available_areas(mode: String) -> void:
available_areas = ["Freemode Arena", "Classic", "Colloseum"]
"Stop n Go":
available_areas = ["Stop N Go Arena"]
"Candy Pump Survival":
available_areas = ["Gauntlet Arena"]
"Candy Survival":
available_areas = ["Candy Survival Arena"]
_:
available_areas = ["Classic"]
@@ -513,35 +513,35 @@ func sync_sng_required_goals(goals: int) -> void:
emit_signal("sng_required_goals_changed", goals)
# =============================================================================
# Gauntlet Settings
# Candy Survival Settings
# =============================================================================
func set_gauntlet_round_duration(duration: int) -> void:
gauntlet_round_duration = duration
if is_host: rpc("sync_gauntlet_round_duration", duration)
func set_candy_survival_round_duration(duration: int) -> void:
candy_survival_round_duration = duration
if is_host: rpc("sync_candy_survival_round_duration", duration)
@rpc("authority", "call_local", "reliable")
func sync_gauntlet_round_duration(duration: int) -> void:
gauntlet_round_duration = duration
emit_signal("gauntlet_round_duration_changed", duration)
func sync_candy_survival_round_duration(duration: int) -> void:
candy_survival_round_duration = duration
emit_signal("candy_survival_duration_changed", duration)
func set_gauntlet_growth_interval(interval: float) -> void:
gauntlet_growth_interval = interval
if is_host: rpc("sync_gauntlet_growth_interval", interval)
func set_candy_survival_growth_interval(interval: float) -> void:
candy_survival_growth_interval = interval
if is_host: rpc("sync_candy_survival_growth_interval", interval)
@rpc("authority", "call_local", "reliable")
func sync_gauntlet_growth_interval(interval: float) -> void:
gauntlet_growth_interval = interval
emit_signal("gauntlet_growth_interval_changed", interval)
func sync_candy_survival_growth_interval(interval: float) -> void:
candy_survival_growth_interval = interval
emit_signal("candy_survival_growth_interval_changed", interval)
func set_gauntlet_cells_per_tick(cells: Dictionary) -> void:
gauntlet_cells_per_tick = cells
if is_host: rpc("sync_gauntlet_cells_per_tick", cells)
func set_candy_survival_cells_per_tick(cells: Dictionary) -> void:
candy_survival_cells_per_tick = cells
if is_host: rpc("sync_candy_survival_cells_per_tick", cells)
@rpc("authority", "call_local", "reliable")
func sync_gauntlet_cells_per_tick(cells: Dictionary) -> void:
gauntlet_cells_per_tick = cells
emit_signal("gauntlet_cells_per_tick_changed", cells)
func sync_candy_survival_cells_per_tick(cells: Dictionary) -> void:
candy_survival_cells_per_tick = cells
emit_signal("candy_survival_cells_per_tick_changed", cells)
# =============================================================================
# Character Selection
@@ -699,8 +699,8 @@ func set_game_mode(mode: String) -> void:
set_area("Free Mode Area")
elif mode == "Stop n Go" and "Stop n Go Area" in available_areas:
set_area("Stop n Go Area")
elif mode == "Candy Pump Survival" and "Gauntlet Arena" in available_areas:
set_area("Gauntlet Arena")
elif mode == "Candy Survival" and "Candy Survival Arena" in available_areas:
set_area("Candy Survival Arena")
@rpc("authority", "call_local", "reliable")
func sync_game_mode(mode: String) -> void:
@@ -713,8 +713,8 @@ func sync_game_mode(mode: String) -> void:
selected_area = "Free Mode Area"
elif mode == "Stop n Go" and "Stop n Go Area" in available_areas:
selected_area = "Stop n Go Area"
elif mode == "Candy Pump Survival" and "Gauntlet Arena" in available_areas:
selected_area = "Gauntlet Arena"
elif mode == "Candy Survival" and "Candy Survival Arena" in available_areas:
selected_area = "Candy Survival Arena"
elif selected_area not in available_areas:
selected_area = available_areas[0]
@@ -740,10 +740,10 @@ func start_game(force: bool = false) -> void:
rpc("sync_sng_go_duration", sng_go_duration)
rpc("sync_sng_stop_duration", sng_stop_duration)
rpc("sync_sng_required_goals", sng_required_goals)
# Sync gauntlet settings
rpc("sync_gauntlet_round_duration", gauntlet_round_duration)
rpc("sync_gauntlet_growth_interval", gauntlet_growth_interval)
rpc("sync_gauntlet_cells_per_tick", gauntlet_cells_per_tick)
# Sync Candy Survival settings
rpc("sync_candy_survival_round_duration", candy_survival_round_duration)
rpc("sync_candy_survival_growth_interval", candy_survival_growth_interval)
rpc("sync_candy_survival_cells_per_tick", candy_survival_cells_per_tick)
# Sync game mode
rpc("sync_game_mode", game_mode)
@@ -816,9 +816,9 @@ func request_room_info(requester_id: int, requester_name: String, requester_char
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_gauntlet_round_duration", gauntlet_round_duration)
rpc_id(requester_id, "sync_gauntlet_growth_interval", gauntlet_growth_interval)
rpc_id(requester_id, "sync_gauntlet_cells_per_tick", gauntlet_cells_per_tick)
rpc_id(requester_id, "sync_candy_survival_round_duration", candy_survival_round_duration)
rpc_id(requester_id, "sync_candy_survival_growth_interval", candy_survival_growth_interval)
rpc_id(requester_id, "sync_candy_survival_cells_per_tick", candy_survival_cells_per_tick)
rpc_id(requester_id, "sync_game_mode", game_mode)
rpc_id(requester_id, "sync_area", selected_area)