feat: Implement initial main scene, player scripts, and core game manager systems for input, actions, playerboard, special tiles, and UI.

This commit is contained in:
Yogi Wiguna
2026-03-12 12:06:32 +08:00
parent 686ea2587e
commit 412e7bdcdd
8 changed files with 9 additions and 8610 deletions
+4 -65
View File
@@ -56,30 +56,6 @@ func _process(delta):
movement_manager.simple_move_to(target_position)
# 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
@@ -163,48 +139,11 @@ func handle_grid_click(grid_position: Vector2i):
var main = player.get_node("/root/Main")
if not main:
return
match main.ui_manager.current_action_state:
main.ui_manager.ActionState.MOVING:
if grid_position in player.highlighted_cells:
movement_manager.move_to_clicked_position(grid_position)
main.ui_manager.ActionState.GRABBING:
if grid_position in player.highlighted_cells or grid_position == player.current_position:
player.grab_item(grid_position)
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
# Action logic previously here has been removed along with ActionMenu.
# Standard movement/interaction is now handled via keyboard/joystick.
func handle_slot_gui_input(event, slot_index, slot_ui) -> int:
if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT:
var main = player.get_tree().get_root().get_node_or_null("Main")
if main.ui_manager.current_action_state == main.ui_manager.ActionState.ARRANGING:
if player.selected_playerboard_slot == -1:
player.select_playerboard_slot(slot_index)
return slot_index
else:
if player.selected_playerboard_slot == slot_index:
player.deselect_playerboard_slot()
return slot_index
elif player.can_move_to_target_playerboard_slot():
player.target_playerboard_slot(slot_index)
main.emit_signal("can_move_item", true)
return slot_index
else:
return -1
# Arrangement mode has been removed along with ActionMenu.
return -1