Files
Godot-Modules/UIComponents/animated_button_component.gd
T
2026-05-22 18:20:37 +01:00

62 lines
1.8 KiB
GDScript

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)