update local arena of gauntlet
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
@@ -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
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ih7h4pb43awd
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dsungfo2rdgdc
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://ct0psnc84v1sy
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://6pn8jkrn2kt
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://cpwhlklp7jkkg
|
||||||
Reference in New Issue
Block a user