class_name AnimatedButtonComponent extends Area2D @export var object:Node2D var scale_tween:Tween var rotate_tween:Tween var offset_tween:Tween @export var scale_tween_duration:float @export var rotate_tween_duration:float @export var offset_tween_duration:float @export var anim_scale:Vector2 = Vector2.ONE @export var anim_rotate = 1.0 @export var anim_offset:Vector2 = Vector2.ZERO var original_position:Vector2 var can_click = false signal clicked # Called when the node enters the scene tree for the first time. func _ready() -> void: mouse_entered.connect(_on_hover.bind(true)) mouse_exited.connect(_on_hover.bind(false)) original_position = global_position func _process(delta: float) -> void: if Input.is_action_just_pressed("click") and can_click: clicked.emit() func _on_hover(hover:bool) -> void: can_click = hover if hover: if scale_tween: scale_tween.kill() if rotate_tween: rotate_tween.kill() if offset_tween: offset_tween.kill() scale_tween = create_tween() rotate_tween = create_tween() offset_tween = create_tween() scale_tween.tween_property(object,"scale",anim_scale,scale_tween_duration) rotate_tween.tween_property(object,"rotation",anim_rotate,rotate_tween_duration) offset_tween.tween_property(object,"global_position",original_position + anim_offset , offset_tween_duration) pass else: if scale_tween: scale_tween.kill() if rotate_tween: rotate_tween.kill() if offset_tween: offset_tween.kill() scale_tween = create_tween() rotate_tween = create_tween() offset_tween = create_tween() scale_tween.tween_property(object,"scale",Vector2(1,1),scale_tween_duration) rotate_tween.tween_property(object,"rotation",0,rotate_tween_duration) offset_tween.tween_property(object,"global_position",original_position, offset_tween_duration)