add ui component
This commit is contained in:
@@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
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)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dnq0l8dy4b1g3
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
class_name AnimatedVisibiltyComponent extends Area2D
|
||||||
|
|
||||||
|
|
||||||
|
var visibility_tween:Tween
|
||||||
|
@export var visibility_tween_duration:float
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
mouse_entered.connect(_on_hover.bind(true))
|
||||||
|
mouse_exited.connect(_on_hover.bind(false))
|
||||||
|
modulate.a = 0
|
||||||
|
|
||||||
|
|
||||||
|
func _on_hover(hover):
|
||||||
|
if visibility_tween:
|
||||||
|
visibility_tween.kill()
|
||||||
|
visibility_tween = create_tween()
|
||||||
|
|
||||||
|
if hover:
|
||||||
|
visibility_tween.tween_property(self,"modulate:a",255,visibility_tween_duration)
|
||||||
|
else:
|
||||||
|
visibility_tween.tween_property(self,"modulate:a",0,visibility_tween_duration)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://kareqnhvqqvp
|
||||||
Reference in New Issue
Block a user