feat: bullrush branch - mekton bulls arena, HUD, NPC managers, godot_ai updates

This commit is contained in:
2026-07-01 10:39:21 +08:00
parent cc584c3251
commit b6b37b5aac
48 changed files with 2548 additions and 397 deletions
+60 -1
View File
@@ -36,6 +36,11 @@ signal gauntlet_round_duration_changed(duration: int)
signal gauntlet_growth_interval_changed(interval: float)
signal gauntlet_cells_per_tick_changed(cells: Dictionary)
# Mekton Bulls settings signals
signal mekton_bulls_round_duration_changed(duration: int)
signal mekton_bulls_phase_interval_changed(interval: int)
signal mekton_bulls_points_changed(min_pts: int, max_pts: int)
# Room data structure
var current_room: Dictionary = {}
var players_in_room: Array = [] # [{id, name, is_ready}]
@@ -88,13 +93,19 @@ var gauntlet_cells_per_tick: Dictionary = {
"phase3": [8, 10],
}
# Mekton Bulls settings
var mekton_bulls_round_duration: int = 120
var mekton_bulls_phase_interval: int = 30
var mekton_bulls_min_points: int = 100
var mekton_bulls_max_points: int = 1000
# Rematch tracking
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", "Tekton Doors", "Candy Pump Survival", "Mekton Bulls"]
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
@@ -149,8 +160,12 @@ func _update_available_areas(mode: String) -> void:
available_areas = ["Freemode Arena", "Classic", "Colloseum"]
"Stop n Go":
available_areas = ["Stop N Go Arena"]
"Tekton Doors":
available_areas = ["Tekton Doors Area"]
"Candy Pump Survival":
available_areas = ["Gauntlet Arena"]
"Mekton Bulls":
available_areas = ["Mekton Bulls Arena"]
_:
available_areas = ["Classic"]
@@ -584,6 +599,39 @@ func sync_gauntlet_cells_per_tick(cells: Dictionary) -> void:
gauntlet_cells_per_tick = cells
emit_signal("gauntlet_cells_per_tick_changed", cells)
# =============================================================================
# Mekton Bulls Settings
# =============================================================================
func set_mekton_bulls_round_duration(duration: int) -> void:
mekton_bulls_round_duration = duration
if is_host: rpc("sync_mekton_bulls_round_duration", duration)
@rpc("authority", "call_local", "reliable")
func sync_mekton_bulls_round_duration(duration: int) -> void:
mekton_bulls_round_duration = duration
emit_signal("mekton_bulls_round_duration_changed", duration)
func set_mekton_bulls_phase_interval(interval: int) -> void:
mekton_bulls_phase_interval = interval
if is_host: rpc("sync_mekton_bulls_phase_interval", interval)
@rpc("authority", "call_local", "reliable")
func sync_mekton_bulls_phase_interval(interval: int) -> void:
mekton_bulls_phase_interval = interval
emit_signal("mekton_bulls_phase_interval_changed", interval)
func set_mekton_bulls_points(min_pts: int, max_pts: int) -> void:
mekton_bulls_min_points = min_pts
mekton_bulls_max_points = max_pts
if is_host: rpc("sync_mekton_bulls_points", min_pts, max_pts)
@rpc("authority", "call_local", "reliable")
func sync_mekton_bulls_points(min_pts: int, max_pts: int) -> void:
mekton_bulls_min_points = min_pts
mekton_bulls_max_points = max_pts
emit_signal("mekton_bulls_points_changed", min_pts, max_pts)
# =============================================================================
# Character Selection
# =============================================================================
@@ -792,6 +840,10 @@ func start_game(force: bool = false) -> void:
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 mekton bulls
rpc("sync_mekton_bulls_round_duration", mekton_bulls_round_duration)
rpc("sync_mekton_bulls_phase_interval", mekton_bulls_phase_interval)
rpc("sync_mekton_bulls_points", mekton_bulls_min_points, mekton_bulls_max_points)
# Sync game mode
rpc("sync_game_mode", game_mode)
@@ -870,6 +922,9 @@ func request_room_info(requester_id: int, requester_name: String, requester_char
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_mekton_bulls_round_duration", mekton_bulls_round_duration)
rpc_id(requester_id, "sync_mekton_bulls_phase_interval", mekton_bulls_phase_interval)
rpc_id(requester_id, "sync_mekton_bulls_points", mekton_bulls_min_points, mekton_bulls_max_points)
rpc_id(requester_id, "sync_game_mode", game_mode)
rpc_id(requester_id, "sync_area", selected_area)
@@ -1021,3 +1076,7 @@ func reset() -> void:
doors_swap_time = 15
doors_refresh_time = 25
doors_required_goals = 8
mekton_bulls_round_duration = 120
mekton_bulls_phase_interval = 30
mekton_bulls_min_points = 100
mekton_bulls_max_points = 1000