fix: pure font-size animation, enormous final sizes, no Node2D
This commit is contained in:
parent
9874d29cd8
commit
9e52224dc9
2 changed files with 32 additions and 41 deletions
|
|
@ -1,11 +1,13 @@
|
||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
|
|
||||||
@onready var zoom_node: Node2D = %ZoomNode
|
|
||||||
@onready var wrapper: Control = %Wrapper
|
|
||||||
@onready var v_label: Label = %VLabel
|
@onready var v_label: Label = %VLabel
|
||||||
@onready var panel_label: Label = %PanelLabel
|
@onready var panel_label: Label = %PanelLabel
|
||||||
@onready var transition_overlay: ColorRect = %TransitionOverlay
|
@onready var transition_overlay: ColorRect = %TransitionOverlay
|
||||||
|
@onready var vbox: VBoxContainer = %VBox
|
||||||
|
|
||||||
|
var _v_end_size: int
|
||||||
|
var _p_end_size: int
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
|
@ -14,48 +16,37 @@ func _ready() -> void:
|
||||||
|
|
||||||
var screen_size: Vector2 = get_viewport_rect().size
|
var screen_size: Vector2 = get_viewport_rect().size
|
||||||
|
|
||||||
# Position Node2D at screen center — its transform (scale) will
|
# Enormous end font sizes — a large fraction of screen height.
|
||||||
# zoom everything from this point, giving a proper zoom-in effect.
|
_v_end_size = maxi(1, int(screen_size.y * 0.55))
|
||||||
zoom_node.position = screen_size * 0.5
|
_p_end_size = maxi(1, int(screen_size.y * 0.30))
|
||||||
|
|
||||||
# Size wrapper to cover the screen, offset so its center aligns
|
# Start tiny and invisible
|
||||||
# with the Node2D origin at screen center.
|
v_label.add_theme_font_size_override("normal_font_size", 4)
|
||||||
wrapper.size = screen_size
|
panel_label.add_theme_font_size_override("normal_font_size", 4)
|
||||||
wrapper.position = -screen_size * 0.5
|
vbox.modulate = Color(1, 1, 1, 0)
|
||||||
|
|
||||||
# Set font sizes proportional to viewport height so they look
|
|
||||||
# consistently large at any resolution.
|
|
||||||
var v_size: int = maxi(1, int(screen_size.y * 0.42))
|
|
||||||
var p_size: int = maxi(1, int(screen_size.y * 0.22))
|
|
||||||
v_label.add_theme_font_size_override("normal_font_size", v_size)
|
|
||||||
panel_label.add_theme_font_size_override("normal_font_size", p_size)
|
|
||||||
|
|
||||||
# Initial state: tiny + invisible inside the zoom node
|
|
||||||
zoom_node.scale = Vector2(0.01, 0.01)
|
|
||||||
zoom_node.modulate = Color(1, 1, 1, 0)
|
|
||||||
transition_overlay.color = Color(0, 0, 0, 1)
|
transition_overlay.color = Color(0, 0, 0, 1)
|
||||||
|
|
||||||
await get_tree().process_frame
|
await get_tree().process_frame
|
||||||
|
|
||||||
# Fade overlay away (reveal clean background)
|
# Reveal background
|
||||||
var reveal := create_tween()
|
var reveal := create_tween()
|
||||||
reveal.tween_property(transition_overlay, "color", Color(0, 0, 0, 0), 0.4)
|
reveal.tween_property(transition_overlay, "color", Color(0, 0, 0, 0), 0.4)
|
||||||
await reveal.finished
|
await reveal.finished
|
||||||
|
|
||||||
# Phase 1: Zoom in + fade in (parallel)
|
# Phase 1: Grow font sizes + fade in (parallel)
|
||||||
# Node2D scale produces a true zoom, not just font-size growth.
|
# Pure font-size animation — no transforms, no containers to fight.
|
||||||
var zoom_in := create_tween()
|
var grow := create_tween()
|
||||||
zoom_in.set_parallel(true)
|
grow.set_parallel(true)
|
||||||
zoom_in.tween_property(zoom_node, "scale", Vector2(1.0, 1.0), 2.0).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
grow.tween_method(_set_sizes, 0.0, 1.0, 2.0).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
|
||||||
zoom_in.tween_property(zoom_node, "modulate", Color(1, 1, 1, 1), 1.8).set_ease(Tween.EASE_OUT)
|
grow.tween_property(vbox, "modulate", Color(1, 1, 1, 1), 1.8).set_ease(Tween.EASE_OUT)
|
||||||
await zoom_in.finished
|
await grow.finished
|
||||||
|
|
||||||
# Phase 2: Hold
|
# Phase 2: Hold
|
||||||
await get_tree().create_timer(1.0).timeout
|
await get_tree().create_timer(1.0).timeout
|
||||||
|
|
||||||
# Phase 3: Fade out
|
# Phase 3: Fade out
|
||||||
var fade_out := create_tween()
|
var fade_out := create_tween()
|
||||||
fade_out.tween_property(zoom_node, "modulate", Color(1, 1, 1, 0), 0.8).set_ease(Tween.EASE_IN)
|
fade_out.tween_property(vbox, "modulate", Color(1, 1, 1, 0), 0.8).set_ease(Tween.EASE_IN)
|
||||||
await fade_out.finished
|
await fade_out.finished
|
||||||
|
|
||||||
# Phase 4: Crossfade to dashboard
|
# Phase 4: Crossfade to dashboard
|
||||||
|
|
@ -73,3 +64,10 @@ func _ready() -> void:
|
||||||
remove_child(dashboard)
|
remove_child(dashboard)
|
||||||
get_tree().root.add_child(dashboard)
|
get_tree().root.add_child(dashboard)
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
|
|
||||||
|
func _set_sizes(progress: float) -> void:
|
||||||
|
var v_size: int = maxi(1, int(round(4 + progress * (_v_end_size - 4))))
|
||||||
|
var p_size: int = maxi(1, int(round(4 + progress * (_p_end_size - 4))))
|
||||||
|
v_label.add_theme_font_size_override("normal_font_size", v_size)
|
||||||
|
panel_label.add_theme_font_size_override("normal_font_size", p_size)
|
||||||
|
|
|
||||||
|
|
@ -30,25 +30,18 @@ anchor_bottom = 1.0
|
||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
color = Color(0.08, 0.08, 0.12, 1.0)
|
color = Color(0.08, 0.08, 0.12, 1.0)
|
||||||
|
|
||||||
[node name="ZoomNode" type="Node2D" parent="."]
|
[node name="Center" type="CenterContainer" parent="."]
|
||||||
unique_name_in_owner = true
|
|
||||||
|
|
||||||
[node name="Wrapper" type="Control" parent="ZoomNode"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
mouse_filter = 2
|
|
||||||
|
|
||||||
[node name="Center" type="CenterContainer" parent="ZoomNode/Wrapper"]
|
|
||||||
layout_mode = 1
|
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
mouse_filter = 2
|
mouse_filter = 2
|
||||||
|
|
||||||
[node name="VBox" type="VBoxContainer" parent="ZoomNode/Wrapper/Center"]
|
[node name="VBox" type="VBoxContainer" parent="Center"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_constants/separation = 0
|
theme_override_constants/separation = 0
|
||||||
|
|
||||||
[node name="VLabel" type="Label" parent="ZoomNode/Wrapper/Center/VBox"]
|
[node name="VLabel" type="Label" parent="Center/VBox"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_fonts/normal_font = SubResource("FontVariation_ijphb")
|
theme_override_fonts/normal_font = SubResource("FontVariation_ijphb")
|
||||||
|
|
@ -59,7 +52,7 @@ text = "V"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="PanelLabel" type="Label" parent="ZoomNode/Wrapper/Center/VBox"]
|
[node name="PanelLabel" type="Label" parent="Center/VBox"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_fonts/normal_font = SubResource("FontVariation_boeqg")
|
theme_override_fonts/normal_font = SubResource("FontVariation_boeqg")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue