Add tetromino movement
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user