changes
This commit is contained in:
@@ -9,6 +9,13 @@ var current_action: int = Action.WALK:
|
||||
|
||||
signal action_changed(new_action: int)
|
||||
|
||||
# Centralized SetPiece hover tracking
|
||||
var current_scene: Node = null
|
||||
var hovered_setpieces: Array[SetPiece] = []
|
||||
var top_hovered_setpiece: SetPiece = null
|
||||
|
||||
signal hover_changed(piece: SetPiece)
|
||||
|
||||
func get_action_name() -> String:
|
||||
match current_action:
|
||||
Action.WALK: return "walk"
|
||||
@@ -19,3 +26,39 @@ func get_action_name() -> String:
|
||||
|
||||
func get_action_enum() -> int:
|
||||
return current_action
|
||||
|
||||
func set_current_scene(scene: Node) -> void:
|
||||
current_scene = scene
|
||||
hovered_setpieces.clear()
|
||||
top_hovered_setpiece = null
|
||||
|
||||
func get_top_hovered_setpiece() -> SetPiece:
|
||||
return top_hovered_setpiece
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if not current_scene:
|
||||
return
|
||||
|
||||
var global_mouse_pos = get_viewport().get_mouse_position()
|
||||
var camera = get_viewport().get_camera_2d()
|
||||
if camera:
|
||||
global_mouse_pos = camera.get_global_mouse_position()
|
||||
|
||||
# Find all SetPieces in current scene
|
||||
var new_hovered: Array[SetPiece] = []
|
||||
for piece in current_scene.find_children("*", "SetPiece", true, false):
|
||||
if piece is SetPiece:
|
||||
var local_pos = piece.to_local(global_mouse_pos)
|
||||
if piece.polygon.size() > 0 and Geometry2D.is_point_in_polygon(local_pos, piece.polygon):
|
||||
new_hovered.append(piece)
|
||||
|
||||
# Sort by priority (highest first)
|
||||
new_hovered.sort_custom(func(a, b): return b.priority > a.priority)
|
||||
|
||||
# Check if top piece changed
|
||||
var new_top = new_hovered[0] if new_hovered.size() > 0 else null
|
||||
if new_top != top_hovered_setpiece:
|
||||
top_hovered_setpiece = new_top
|
||||
hover_changed.emit(top_hovered_setpiece)
|
||||
|
||||
hovered_setpieces = new_hovered
|
||||
|
||||
Reference in New Issue
Block a user