feat: implement Tekton Doors game mode with arena setup, portal management, connection randomization, and game state timers.

This commit is contained in:
2026-02-26 04:25:09 +08:00
parent 551c820d5e
commit ef3d018040
6 changed files with 230 additions and 66 deletions
+14 -5
View File
@@ -55,7 +55,8 @@ func _ready():
# Safety check: Don't auto-randomize if game mode manages its own arena
if not (ResourceLoader.exists("res://scripts/managers/lobby_manager.gd") \
and get_node_or_null("/root/LobbyManager") \
and get_node("/root/LobbyManager").game_mode == "Stop n Go"):
and (get_node("/root/LobbyManager").game_mode == "Stop n Go" \
or get_node("/root/LobbyManager").game_mode == "Tekton Doors")):
randomize_grid()
validate_item_indices()
@@ -118,7 +119,7 @@ func generate_grid(floor_index: int = -1):
var rng = RandomNumberGenerator.new()
rng.randomize()
var shape = rng.randi() % 4 # 0-3 (Rect, Islands, Maze, Rooms)
generator.generate_map(self, columns, rows, shape)
generator.generate_map(self , columns, rows, shape)
else:
generate_floor(0)
@@ -137,7 +138,7 @@ func generate_grid(floor_index: int = -1):
var rng = RandomNumberGenerator.new()
rng.randomize()
var shape = rng.randi() % 4
generator.generate_map(self, columns, rows, shape)
generator.generate_map(self , columns, rows, shape)
else:
clear_floor(floor_index)
generate_floor(floor_index)
@@ -213,8 +214,16 @@ func set_floor_data(floor_index: int, data: PackedInt32Array):
for i in range(0, count, 3):
var x = data[i]
var z = data[i+1]
var item = data[i+2]
var z = data[i + 1]
var item = data[i + 2]
# WALL-SAFETY CHECK: Skip if item is a tile (7-20) and Floor 0 is a wall
if floor_index == 1 and item >= 7 and item <= 20:
var f0 = get_cell_item(Vector3i(x, 0, z))
if f0 != -1 and f0 in non_walkable_items:
# Skip illegal placement from synced data
continue
set_cell_item(Vector3i(x, floor_index, z), item)
update_grid_data()