feat: Add player action and input managers to handle player actions, movement, targeting, and visual feedback.
This commit is contained in:
@@ -55,6 +55,31 @@ func _process(delta):
|
||||
player.attempt_target_action(2)
|
||||
elif Input.is_key_pressed(KEY_4):
|
||||
player.attempt_target_action(3)
|
||||
|
||||
# Targeting Mode Preview
|
||||
var main = player.get_node_or_null("/root/Main")
|
||||
if main and main.ui_manager and main.ui_manager.current_action_state == main.ui_manager.ActionState.TARGETING:
|
||||
# Use mouse position raycast to determine hover
|
||||
var viewport = player.get_viewport()
|
||||
var mouse_pos = viewport.get_mouse_position()
|
||||
var camera = viewport.get_camera_3d()
|
||||
var from = camera.project_ray_origin(mouse_pos)
|
||||
var to = from + camera.project_ray_normal(mouse_pos) * 1000
|
||||
var hover_grid = player.raycast_to_grid(from, to)
|
||||
|
||||
# print("Targeting Hover: %s, Skill: %d" % [hover_grid, main.ui_manager.pending_skill_id]) # Debug
|
||||
|
||||
# Only update if valid position
|
||||
if hover_grid != Vector2i(-1, -1):
|
||||
var st_manager = player.get_node_or_null("SpecialTilesManager")
|
||||
if st_manager:
|
||||
var area = st_manager.get_skill_affected_area(main.ui_manager.pending_skill_id, hover_grid)
|
||||
|
||||
# Choose highlight color/mesh based on skill
|
||||
# User Request: Use default hover item (1)
|
||||
var highlight_id = 1
|
||||
|
||||
player.highlight_cells_if_authorized(area, highlight_id)
|
||||
|
||||
func handle_unhandled_input(event):
|
||||
# Early return if not authorized human player
|
||||
@@ -120,6 +145,19 @@ func handle_grid_click(grid_position: Vector2i):
|
||||
main.ui_manager.ActionState.RANDOMIZING:
|
||||
if grid_position in player.highlighted_cells:
|
||||
main.randomize_item_at_position(grid_position)
|
||||
# Add TARGETING State
|
||||
main.ui_manager.ActionState.TARGETING:
|
||||
var skill_id = main.ui_manager.pending_skill_id
|
||||
if skill_id != -1:
|
||||
var st_manager = player.get_node_or_null("SpecialTilesManager")
|
||||
if st_manager:
|
||||
# Clear Highlights FIRST to avoid overwriting the newly placed tiles
|
||||
player.clear_highlights()
|
||||
|
||||
st_manager.execute_targeted_effect(skill_id, grid_position)
|
||||
# Reset state
|
||||
main.ui_manager.pending_skill_id = -1
|
||||
main.ui_manager.current_action_state = main.ui_manager.ActionState.NONE
|
||||
|
||||
|
||||
func handle_slot_gui_input(event, slot_index, slot_ui) -> int:
|
||||
|
||||
Reference in New Issue
Block a user