feat: Implement the main game scene, core logic, UI, and manager setup for Tekton Dash.

This commit is contained in:
Yogi Wiguna
2026-02-11 17:55:07 +08:00
parent d2ae5ada0e
commit c37b317eb5
6 changed files with 282 additions and 0 deletions
+51
View File
@@ -504,6 +504,9 @@ func _start_game():
var all_players = get_tree().get_nodes_in_group("Players")
ui_manager.initialize_leaderboard_with_players(all_players)
# Spawn Tekton NPC
spawn_tekton_npc()
func _assign_random_spawn_positions():
"""Assign spawn positions distributed to 4 corners (2 per corner for 8 players)."""
var enhanced_gridmap = $EnhancedGridMap
@@ -596,6 +599,54 @@ func _assign_random_spawn_positions():
spawn_index += 1
# =============================================================================
# Tekton NPC Management
# =============================================================================
func spawn_tekton_npc():
"""Spawn a Tekton NPC at a random location."""
if not multiplayer.is_server(): return
# Find random valid position
var enhanced_gridmap = $EnhancedGridMap
if not enhanced_gridmap: return
var valid_pos = Vector2i(-1, -1)
for _i in range(20): # Try 20 times
var x = randi() % enhanced_gridmap.columns
var y = randi() % enhanced_gridmap.rows
var cell = Vector3i(x, 0, y)
if enhanced_gridmap.get_cell_item(cell) == 0: # Walkable floor
valid_pos = Vector2i(x, y)
break
if valid_pos != Vector2i(-1, -1):
# Generate a consistent ID/Name for sync
var tekton_id = Time.get_ticks_msec()
_create_tekton(valid_pos, tekton_id)
rpc("sync_spawn_tekton", valid_pos, tekton_id)
@rpc("call_remote", "reliable")
func sync_spawn_tekton(pos: Vector2i, tekton_id: int):
_create_tekton(pos, tekton_id)
func _create_tekton(pos: Vector2i, tekton_id: int):
var node_name = "Tekton_%d" % tekton_id
if has_node(node_name): return
var tekton_scene = load("res://scenes/tekton.tscn")
var tekton = tekton_scene.instantiate()
tekton.name = node_name
add_child(tekton)
# Initialize
if tekton.has_method("initialize"):
if has_node("EnhancedGridMap"):
tekton.initialize(pos, $EnhancedGridMap)
print("[Main] Spawned Tekton at %s (ID: %d)" % [pos, tekton_id])
# =============================================================================
# Player Management
# =============================================================================