update local arena of gauntlet

This commit is contained in:
2026-06-08 12:19:34 +08:00
parent f2f90f98e2
commit 0a878c5205
9 changed files with 76 additions and 43 deletions
+39 -39
View File
@@ -55,10 +55,10 @@ GauntletManager (NEW)
#### `scripts/game_mode.gd` #### `scripts/game_mode.gd`
```gdscript ```gdscript
enum Mode { enum Mode {
FREEMODE = 0, FREEMODE = 0,
STOP_N_GO = 1, STOP_N_GO = 1,
TEKTON_DOORS = 2, TEKTON_DOORS = 2,
GAUNTLET = 3 # NEW GAUNTLET = 3 # NEW
} }
# Add to from_string(), mode_to_string(), get_all_modes(), is_restricted() # Add to from_string(), mode_to_string(), get_all_modes(), is_restricted()
@@ -157,12 +157,12 @@ var gridmap: Node
# Targeting weights per phase # Targeting weights per phase
var phase_weights: Array = [ var phase_weights: Array = [
# Phase 0 (Open Arena): 1×1=60%, 1×2=40%, 2×2=0% # Phase 0 (Open Arena): 1×1=60%, 1×2=40%, 2×2=0%
{"1x1": 0.6, "1x2": 0.4, "2x2": 0.0}, {"1x1": 0.6, "1x2": 0.4, "2x2": 0.0},
# Phase 1 (Route Pressure): 1×1=30%, 1×2=55%, 2×2=15% # Phase 1 (Route Pressure): 1×1=30%, 1×2=55%, 2×2=15%
{"1x1": 0.3, "1x2": 0.55, "2x2": 0.15}, {"1x1": 0.3, "1x2": 0.55, "2x2": 0.15},
# Phase 2 (Survival): 1×1=15%, 1×2=55%, 2×2=30% # Phase 2 (Survival): 1×1=15%, 1×2=55%, 2×2=30%
{"1x1": 0.15, "1x2": 0.55, "2x2": 0.30} {"1x1": 0.15, "1x2": 0.55, "2x2": 0.30}
] ]
``` ```
@@ -273,22 +273,22 @@ Following the exact pattern of StopNGoManager / PortalModeManager:
```gdscript ```gdscript
# _init_managers() — Add after portal_mode_manager block: # _init_managers() — Add after portal_mode_manager block:
if LobbyManager.game_mode == "Candy Cannon Survival": if LobbyManager.game_mode == "Candy Cannon Survival":
gauntlet_manager = load("res://scripts/managers/gauntlet_manager.gd").new() gauntlet_manager = load("res://scripts/managers/gauntlet_manager.gd").new()
gauntlet_manager.name = "GauntletManager" gauntlet_manager.name = "GauntletManager"
add_child(gauntlet_manager) add_child(gauntlet_manager)
gauntlet_manager.initialize(self, $EnhancedGridMap) gauntlet_manager.initialize(self, $EnhancedGridMap)
# _setup_host_game() — Add arena setup branch: # _setup_host_game() — Add arena setup branch:
elif LobbyManager.game_mode == "Candy Cannon Survival" and gauntlet_manager: elif LobbyManager.game_mode == "Candy Cannon Survival" and gauntlet_manager:
gauntlet_manager._setup_arena() gauntlet_manager._setup_arena()
# _start_game() — Add game mode start: # _start_game() — Add game mode start:
elif LobbyManager.game_mode == "Candy Cannon Survival": elif LobbyManager.game_mode == "Candy Cannon Survival":
if gauntlet_manager: if gauntlet_manager:
gauntlet_manager.start_game_mode() gauntlet_manager.start_game_mode()
if goals_cycle_manager: if goals_cycle_manager:
var match_duration = LobbyManager.get_match_duration() var match_duration = LobbyManager.get_match_duration()
goals_cycle_manager.start_match(float(match_duration)) goals_cycle_manager.start_match(float(match_duration))
``` ```
--- ---
@@ -319,29 +319,29 @@ elif LobbyManager.game_mode == "Candy Cannon Survival":
```gdscript ```gdscript
# In CandyCannonController._select_targets(): # In CandyCannonController._select_targets():
func _select_targets(count: int) -> Array[Vector2i]: func _select_targets(count: int) -> Array[Vector2i]:
var targets: Array[Vector2i] = [] var targets: Array[Vector2i] = []
var players = get_tree().get_nodes_in_group("Players") var players = get_tree().get_nodes_in_group("Players")
for i in range(count): for i in range(count):
var roll = randf() var roll = randf()
var target: Vector2i var target: Vector2i
if roll < 0.60: if roll < 0.60:
# Near a player (not same as last targeted) # Near a player (not same as last targeted)
target = _get_near_player_target(players) target = _get_near_player_target(players)
elif roll < 0.85: elif roll < 0.85:
# Route-blocking (pathfinding bottleneck) # Route-blocking (pathfinding bottleneck)
target = _get_route_blocking_target() target = _get_route_blocking_target()
elif roll < 0.95: elif roll < 0.95:
# Random non-sticky # Random non-sticky
target = _get_random_non_sticky_target() target = _get_random_non_sticky_target()
else: else:
# Chaos (anywhere) # Chaos (anywhere)
target = _get_random_target() target = _get_random_target()
targets.append(target) targets.append(target)
return targets return targets
# Anti-unfairness rules: # Anti-unfairness rules:
# 1. last_targeted_player_id tracking prevents same-player targeting # 1. last_targeted_player_id tracking prevents same-player targeting
+26
View File
@@ -0,0 +1,26 @@
[gd_scene format=3 uid="uid://bx5a31fqhw8h8"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_floor"]
albedo_color = Color(0.2, 0.2, 0.2, 1)
uv1_scale = Vector3(20, 20, 20)
[sub_resource type="PlaneMesh" id="PlaneMesh_floor"]
material = SubResource("StandardMaterial3D_floor")
size = Vector2(20, 20)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_zone"]
albedo_color = Color(0.8, 0.2, 0.5, 1)
[sub_resource type="BoxMesh" id="BoxMesh_cannon"]
material = SubResource("StandardMaterial3D_zone")
size = Vector3(3, 1, 3)
[node name="Gauntlet" type="Node3D" unique_id=1063002869]
[node name="PlaceholderFloor" type="MeshInstance3D" parent="." unique_id=932640085]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 10)
mesh = SubResource("PlaneMesh_floor")
[node name="PlaceholderCannonZone" type="MeshInstance3D" parent="." unique_id=1461272366]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 0.5, 9.5)
mesh = SubResource("BoxMesh_cannon")
+1
View File
@@ -150,6 +150,7 @@ func _apply_arena_background():
texture_path = "res://assets/graphics/level_bg/placeholder_tekton_doors.jpg" texture_path = "res://assets/graphics/level_bg/placeholder_tekton_doors.jpg"
"Gauntlet Arena": "Gauntlet Arena":
texture_path = "res://assets/graphics/level_bg/placeholder_classic.jpg" texture_path = "res://assets/graphics/level_bg/placeholder_classic.jpg"
_instantiate_3d_arena("res://scenes/arena/gauntlet.tscn")
_hide_ground_tiles() _hide_ground_tiles()
"Classic", _: "Classic", _:
texture_path = "res://assets/graphics/level_bg/placeholder_classic.jpg" texture_path = "res://assets/graphics/level_bg/placeholder_classic.jpg"
@@ -0,0 +1 @@
uid://du7cne5070ia0
+1
View File
@@ -0,0 +1 @@
uid://ih7h4pb43awd
+1
View File
@@ -0,0 +1 @@
uid://dsungfo2rdgdc
+1
View File
@@ -0,0 +1 @@
uid://ct0psnc84v1sy
+1
View File
@@ -0,0 +1 @@
uid://6pn8jkrn2kt
+1
View File
@@ -0,0 +1 @@
uid://cpwhlklp7jkkg