extends Sprite3D const UP_DURATION := 0.1 const HOLD_DURATION := 0.05 const DOWN_DURATION := 0.18 var _rest_position: Vector3 var _tween: Tween @onready var _button: Node3D = get_parent().get_node("ElevatorButton") func _ready() -> void: _rest_position = position EventBus.block_pressed.connect(_animate_press) func _animate_press() -> void: if not is_instance_valid(_button): return if _tween and _tween.is_valid(): _tween.kill() var press_pos := Vector3(_rest_position.x, _button.position.y, _rest_position.z) _tween = create_tween() _tween.tween_property(self, "position", press_pos, UP_DURATION).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) _tween.tween_interval(HOLD_DURATION) _tween.tween_property(self, "position", _rest_position, DOWN_DURATION).set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_IN)