class_name Selectable extends Area2D signal clicked var is_clickable = false var selection_sprite: Sprite2D func _ready(): if selection_sprite: return var parent_sprite = get_parent() as Sprite2D selection_sprite = Sprite2D.new() selection_sprite.texture = parent_sprite.texture.duplicate(true) var scale_x = ((selection_sprite.texture.get_size().x + 10) / selection_sprite.texture.get_size().x) var scale_y = ((selection_sprite.texture.get_size().y + 10) / selection_sprite.texture.get_size().y) selection_sprite.scale = Vector2(scale_x,scale_y) selection_sprite.show_behind_parent = true selection_sprite.modulate = Color.BLACK selection_sprite.visible = false parent_sprite.call_deferred("add_child", selection_sprite) parent_sprite.call_deferred("move_child", selection_sprite, 0) func _input(event): if is_clickable and event is InputEventMouseButton and event.is_pressed(): clicked.emit() func _on_mouse_entered(): is_clickable = true selection_sprite.show() func _on_mouse_exited(): is_clickable = false selection_sprite.hide()