feat: add Stop n Go game mode with new arena, assets, and manager script.
This commit is contained in:
@@ -348,8 +348,8 @@ func _apply_arena_setup():
|
||||
gridmap.set_cell_item(Vector3i(x, 1, z), -1)
|
||||
|
||||
# Paint Static Safe Zones
|
||||
_paint_static_safe_zone(gridmap, 7, 11, 6, 9)
|
||||
_paint_static_safe_zone(gridmap, 15, 19, 1, 5)
|
||||
_paint_static_safe_zone(gridmap, 7, 11, 6, 9, -1, -1, 8, 8)
|
||||
_paint_static_safe_zone(gridmap, 15, 19, 1, 5, -1, 18, 2, 2)
|
||||
|
||||
# Note: Specific obstacles removed as per user request to replace with random ones.
|
||||
# MISSION TILES: Moved to start_game_mode() to ensure they spawn AFTER walls.
|
||||
@@ -488,28 +488,32 @@ func check_win_condition(player_id: int, position: Vector2i) -> bool:
|
||||
# Static Safe Zone
|
||||
# =============================================================================
|
||||
|
||||
func _paint_static_safe_zone(gridmap: Node, min_x: int, max_x: int, min_z: int, max_z: int):
|
||||
func _paint_static_safe_zone(gridmap: Node, min_x: int, max_x: int, min_z: int, max_z: int, north_door_x: int = -1, south_door_x: int = -1, west_door_z: int = -1, east_door_z: int = -1):
|
||||
# Paint safe floor
|
||||
for x in range(min_x, max_x + 1):
|
||||
for z in range(min_z, max_z + 1):
|
||||
gridmap.set_cell_item(Vector3i(x, 0, z), TILE_SAFE)
|
||||
|
||||
# Get center opening for horizontal walls
|
||||
var center_x = int(float(min_x + max_x) / 2.0)
|
||||
var center_n_x = north_door_x if north_door_x != -1 else int(float(min_x + max_x) / 2.0)
|
||||
var center_s_x = south_door_x if south_door_x != -1 else int(float(min_x + max_x) / 2.0)
|
||||
|
||||
# Instantiate Top and Bottom horizontal walls
|
||||
for x in range(min_x, max_x + 1):
|
||||
if x == center_x: continue # Opening
|
||||
_instantiate_safe_zone_wall(Vector3(x + 0.5, 0.0, min_z), 0) # Bottom/North
|
||||
_instantiate_safe_zone_wall(Vector3(x + 0.5, 0.0, max_z + 1), 0) # Top/South
|
||||
if x != center_n_x:
|
||||
_instantiate_safe_zone_wall(Vector3(x + 0.5, 0.0, min_z), 0) # Bottom/North
|
||||
if x != center_s_x:
|
||||
_instantiate_safe_zone_wall(Vector3(x + 0.5, 0.0, max_z + 1), 0) # Top/South
|
||||
|
||||
# Get center opening for vertical walls
|
||||
var center_z = int(float(min_z + max_z) / 2.0)
|
||||
var center_w_z = west_door_z if west_door_z != -1 else int(float(min_z + max_z) / 2.0)
|
||||
var center_e_z = east_door_z if east_door_z != -1 else int(float(min_z + max_z) / 2.0)
|
||||
|
||||
for z in range(min_z, max_z + 1):
|
||||
if z == center_z: continue # Opening
|
||||
_instantiate_safe_zone_wall(Vector3(min_x, 0.0, z + 0.5), 90) # Left/West
|
||||
_instantiate_safe_zone_wall(Vector3(max_x + 1, 0.0, z + 0.5), 90) # Right/East
|
||||
if z != center_w_z:
|
||||
_instantiate_safe_zone_wall(Vector3(min_x, 0.0, z + 0.5), 90) # Left/West
|
||||
if z != center_e_z:
|
||||
_instantiate_safe_zone_wall(Vector3(max_x + 1, 0.0, z + 0.5), 90) # Right/East
|
||||
|
||||
func _is_in_safe_zone(pos: Vector2i) -> bool:
|
||||
"""Check if a position is within ANY of the static safe zones."""
|
||||
|
||||
Reference in New Issue
Block a user