seeding-planets/gui/tools/control_animation_player.gd
Zacharie Guet 9c449b234f developpement d'écran de chargement et d'écran de sélection de niveau
* modification de certains assets
* optimisation de chunks
* ajout d'un SceneManager
* ajout d'un premier dialogue avec Demeter
* changement des jour en charge
* mise en place d'un système de run
* etc...
2026-01-10 13:04:33 +01:00

213 lines
5.0 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
var target_default_modulate = Color.WHITE
@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",
target_default_modulate,
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",
Color.TRANSPARENT,
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,
):
start_anim()
add_tween(
"modulate",
Color.TRANSPARENT,
duration,
transition_type
)
await add_tween(
"position",
target.position + Vector2.UP * offset,
duration,
transition_type
).finished
target.position = target_default_pos
end_anim()
func appear(
duration : float = 0.3,
offset : int = 20,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR,
):
start_anim()
target.modulate = Color.TRANSPARENT
add_tween(
"modulate",
target_default_modulate,
duration,
transition_type
).finished
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()
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