@tool extends Node class_name ControlAnimationPlayer @onready var target : Control = get_parent() @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 func disappear( duration : float = 0.3, offset : int = 20, transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR, ): add_tween( "modulate", Color.TRANSPARENT, duration, transition_type ) await add_tween( "position", target.position + Vector2.UP * offset, duration, transition_type ).finished target.position += Vector2.DOWN * offset func appear( duration : float = 0.3, offset : int = 20, transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR, ): add_tween( "modulate", Color.WHITE, duration, transition_type ).finished target.position += Vector2.UP * offset await add_tween( "position", target.position + Vector2.DOWN * offset, duration, transition_type ).finished func bounce( duration : float = 0.4, amount : float = 10, direction : Vector2 = Vector2.UP, transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_BOUNCE, ): await add_tween( "position", target.position + direction * amount, duration/2, transition_type ).finished await add_tween( "position", target.position - direction * amount, duration/2, transition_type ).finished func shake( duration : float = 0.3, amount : float = 10, transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR, ): 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 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