Files
seeding-planets/gui/tools/control_animation_player.gd

217 lines
5.1 KiB
GDScript

@tool
extends Node
class_name ControlAnimationPlayer
signal animation_ended
var on_animation = false
@onready var target : Control = get_parent()
var target_default_pos : Vector2
@export_tool_button("Test Shake", "Callable") var shake_action = shake
@export_tool_button("Test Bounce", "Callable") var bounce_action = bounce
@export_tool_button("Test Appear", "Callable") var appear_action = appear
@export_tool_button("Test Disappear", "Callable") var disappear_action = disappear
@export_tool_button("Test Slide In", "Callable") var slide_in_action = slide_in
@export_tool_button("Test Slide Off", "Callable") var slide_off_action = slide_off
@export_tool_button("Test Fade In", "Callable") var fade_in_action = fade_in
@export_tool_button("Test Fade Out", "Callable") var fade_out_action = fade_out
func _ready():
setup_default_values()
get_tree().get_root().size_changed.connect(setup_default_values)
func setup_default_values():
target_default_pos = target.global_position
func start_anim():
on_animation = true
func end_anim():
animation_ended.emit()
on_animation = false
func fade_in(
duration : float = 0.3,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR,
):
start_anim()
target.visible = true
await add_tween(
"modulate:a",
1.,
duration,
transition_type
).finished
end_anim()
func fade_out(
duration : float = 0.3,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR,
):
start_anim()
target.visible = true
await add_tween(
"modulate:a",
0.,
duration,
transition_type
).finished
target.visible = false
end_anim()
func disappear(
duration : float = 0.3,
offset : int = 20,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR,
):
setup_default_values()
start_anim()
add_tween(
"modulate:a",
0.,
duration,
transition_type
)
await add_tween(
"position",
target.position + Vector2.UP * offset,
duration,
transition_type
).finished
target.visible = false
target.position = target_default_pos
end_anim()
func appear(
duration : float = 0.3,
offset : int = 20,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR,
):
setup_default_values()
start_anim()
target.visible = true
target.modulate.a = 0.
add_tween(
"modulate:a",
1.,
duration,
transition_type
)
target.position = target_default_pos + Vector2.UP * offset
await add_tween(
"position",
target_default_pos,
duration,
transition_type
).finished
target.position = target_default_pos
end_anim()
func slide_in(
duration : float = 0.3,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_CUBIC,
):
start_anim()
target.position += Vector2.UP * target.size.y
target.visible = true
await add_tween(
"position",
target_default_pos,
duration,
transition_type
).finished
end_anim()
func slide_off(
duration : float = 0.3,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_CUBIC,
):
start_anim()
await add_tween(
"position",
target.position - Vector2.UP * target.size.y,
duration,
transition_type
).finished
target.visible = false
target.position = target_default_pos
end_anim()
func bounce(
duration : float = 0.4,
amount : float = 10,
direction : Vector2 = Vector2.UP,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_BOUNCE,
):
start_anim()
await add_tween(
"position",
target.position + direction * amount,
duration/2,
transition_type
).finished
await add_tween(
"position",
target_default_pos,
duration/2,
transition_type
).finished
end_anim()
target.position = target_default_pos
func shake(
duration : float = 0.3,
amount : float = 10,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR,
):
start_anim()
await add_tween(
"position",
target.position + Vector2.RIGHT * amount/2,
duration/3,
transition_type
).finished
await add_tween(
"position",
target.position + Vector2.LEFT * amount,
duration/3,
transition_type
).finished
await add_tween(
"position",
target.position + Vector2.RIGHT * amount/2,
duration/3,
transition_type
).finished
target.position = target_default_pos
end_anim()
func add_tween(
property : String,
value : Variant,
seconds: float = 1.,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR
) -> Tween:
var tween : Tween = get_tree().create_tween()
tween.set_trans(transition_type)
tween.tween_property(target, property, value, seconds)
tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
return tween