Added animation to notification display.
This commit is contained in:
parent
64d55572c2
commit
f69862af8c
1 changed files with 34 additions and 11 deletions
|
|
@ -32,14 +32,42 @@ func show_notification(weapon_name: String, player_node: Node2D, player_sprite_s
|
||||||
# Use container's natural width, but fix height at 16px
|
# Use container's natural width, but fix height at 16px
|
||||||
size = Vector2(_container.size.x, 16.0)
|
size = Vector2(_container.size.x, 16.0)
|
||||||
|
|
||||||
# Position using origin offset for Y, to the right of player for X
|
# Calculate target position
|
||||||
_update_position()
|
_update_position()
|
||||||
modulate.a = 1.0
|
var target_pos = position
|
||||||
|
|
||||||
# Fade out and free
|
# Start 10px above destination, fully transparent
|
||||||
var tween = create_tween()
|
position.y = target_pos.y - 10.0
|
||||||
tween.tween_property(self, "modulate:a", 0.0, 2.0)
|
modulate.a = 0.0
|
||||||
tween.tween_callback(_on_fade_complete)
|
|
||||||
|
# Pause following during fade-in so the tween isn't overridden by _process
|
||||||
|
_follow_player = false
|
||||||
|
|
||||||
|
# Fade in and slide into position with overshoot
|
||||||
|
var tween = create_tween().set_parallel()
|
||||||
|
tween.tween_property(self, "modulate:a", 1.0, 0.3)
|
||||||
|
var move_tween = tween.tween_property(self, "position:y", target_pos.y, 0.3)
|
||||||
|
move_tween.set_trans(Tween.TRANS_ELASTIC).set_ease(Tween.EASE_OUT)
|
||||||
|
|
||||||
|
# Wait for fade-in to finish, then resume following
|
||||||
|
await tween.finished
|
||||||
|
_follow_player = true
|
||||||
|
|
||||||
|
# Stay fully visible for a moment before fading
|
||||||
|
await get_tree().create_timer(0.35).timeout
|
||||||
|
|
||||||
|
# Record current position as the fade-out starting point
|
||||||
|
await get_tree().process_frame
|
||||||
|
var fade_start_y = position.y
|
||||||
|
|
||||||
|
# Fade out and drift downward with steady acceleration
|
||||||
|
_follow_player = false
|
||||||
|
var fade_out = create_tween().set_parallel()
|
||||||
|
fade_out.tween_property(self, "modulate:a", 0.0, .35)
|
||||||
|
var drift = fade_out.tween_property(self, "position:y", fade_start_y + 7, .3)
|
||||||
|
drift.set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_IN)
|
||||||
|
await fade_out.finished
|
||||||
|
queue_free()
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
|
|
@ -82,8 +110,3 @@ func _update_position() -> void:
|
||||||
notif_y = clamp(notif_y, 0, viewport_size.y - size.y)
|
notif_y = clamp(notif_y, 0, viewport_size.y - size.y)
|
||||||
|
|
||||||
position = Vector2(notif_x, notif_y)
|
position = Vector2(notif_x, notif_y)
|
||||||
|
|
||||||
|
|
||||||
func _on_fade_complete() -> void:
|
|
||||||
_follow_player = false
|
|
||||||
queue_free()
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue