Add tetromino movement

This commit is contained in:
2026-01-14 13:52:57 +01:00
parent 6982ded2a1
commit e9689ac3cd
4 changed files with 80 additions and 42 deletions

View File

@@ -32,6 +32,9 @@ signal health_changed(amount: int)
@export var starting_health: int = 100
@export var starting_gold: int = 500
#
@onready var camera: Camera3D = $Camera3D
# State management
var _current_state: State = State.DRAFT
var _previous_state: State
@@ -71,11 +74,11 @@ func _ready() -> void:
_event_bus = get_node("/root/EventBus") if "/root/EventBus" in get_tree().root else null
# Find board manager in scene
_board_manager = get_parent().get_node_or_null("Board")
_combat_system = get_parent().get_node_or_null("CombatSystem")
_synergy_system = get_parent().get_node_or_null("SynergySystem")
_enemy_spawner = get_parent().get_node_or_null("EnemySpawner")
_ui_manager = get_parent().get_node_or_null("HUD")
_board_manager = get_node_or_null("Board")
#_combat_system = get_node_or_null("CombatSystem")
#_synergy_system = get_node_or_null("SynergySystem")
#_enemy_spawner = get_node_or_null("EnemySpawner")
#_ui_manager = get_node_or_null("HUD")
# Connect to signal events if event bus exists
if _event_bus:
@@ -88,6 +91,28 @@ func _ready() -> void:
_current_wave = 0
_transition_to_state(State.DRAFT)
func _input(event: InputEvent) -> void:
if _board_manager.selected_tetromino and event is InputEventMouseMotion:
var mouse_pos = get_viewport().get_mouse_position()
var ray_origin = camera.project_ray_origin(mouse_pos)
var ray_direction = camera.project_ray_normal(mouse_pos)
# Cast ray to find ground position (Y = 0 plane)
var t = -ray_origin.y / ray_direction.y if ray_direction.y != 0 else 0.0
var world_hit = ray_origin + ray_direction * t
# Convert to grid position
var new_grid_pos = _board_manager.world_to_grid(world_hit)
_board_manager.move_tetromino(_board_manager.selected_tetromino, new_grid_pos)
func _on_tetromino_selected(tetromino: Tetromino):
print("Tetromino selected")
_board_manager.selected_tetromino = tetromino
func _on_tetromino_deselected(tetromino: Tetromino):
print("Tetromino deselected")
_board_manager.selected_tetromino = null
func _process(delta: float) -> void:
_state_timer += delta