@@ -41,9 +41,13 @@ const pauseOverlayScene := preload("res://UI/PauseOverlay.tscn")
41
41
@onready var foregroundOverlay : CanvasLayer = % ForegroundOverlay
42
42
@onready var labelsList : TemporaryLabelList = % LabelsList
43
43
@onready var navigationContainer : UINavigationContainer = % NavigationContainer ## For top-level UI
44
- @onready var overlayRect : ColorRect = % GlobalOverlayRect
45
- @onready var pauseOverlayRect : ColorRect = % PauseOverlayRect
44
+ @onready var tintRect : ColorRect = % GlobalTintRect
45
+
46
+ @onready var pauseTintRect : ColorRect = % PauseTintRect
46
47
@onready var pauseOverlayContainer : UINavigationContainer = % PauseOverlayContainer
48
+
49
+ @onready var musicLabelContainer : Container = % MusicLabelContainer
50
+ @onready var musicLabel : Label = % MusicLabel
47
51
#endregion
48
52
49
53
@@ -59,6 +63,9 @@ func _ready() -> void:
59
63
if windowMode != DisplayServer .WINDOW_MODE_FULLSCREEN and windowMode != DisplayServer .WINDOW_MODE_EXCLUSIVE_FULLSCREEN :
60
64
GlobalUI .setWindowSize (Settings .windowWidth , Settings .windowHeight , false ) # !showLabel to avoid clutter
61
65
66
+ musicLabelContainer .position .y = musicLabel .get_viewport_rect ().end .y
67
+ Tools .connectSignal (GlobalSonic .musicPlayerDidPlay , self .onGlobalSonic_musicPlayerDidPlay )
68
+
62
69
63
70
func setWindowSize (width : int , height : int , showLabel : bool = true ) -> void :
64
71
var viewport : Viewport = self .get_viewport ()
@@ -100,7 +107,7 @@ func showPauseVisuals(isPaused: bool) -> void:
100
107
# Ensure visibility just in case
101
108
pauseOverlay .pauseButton .visible = true
102
109
pauseOverlay .visible = true
103
- Animations .fadeIn (pauseOverlayRect )
110
+ Animations .fadeIn (pauseTintRect )
104
111
if pauseOverlayTween : pauseOverlayTween .kill ()
105
112
pauseOverlayTween = Animations .fadeIn (pauseOverlayContainer , 0.2 )
106
113
didShowPauseOverlay .emit (pauseOverlay )
@@ -109,7 +116,7 @@ func showPauseVisuals(isPaused: bool) -> void:
109
116
110
117
if pauseOverlay : pauseOverlay .pauseButton .visible = false
111
118
112
- Animations .fadeOut (pauseOverlayRect )
119
+ Animations .fadeOut (pauseTintRect )
113
120
if pauseOverlayTween : pauseOverlayTween .kill ()
114
121
pauseOverlayTween = Animations .fadeOut (pauseOverlayContainer , 0.2 )
115
122
await pauseOverlayTween .finished
@@ -125,23 +132,55 @@ func showPauseVisuals(isPaused: bool) -> void:
125
132
navigationContainer .visible = not pauseOverlayContainer .visible
126
133
127
134
128
- func createTemporaryLabel (text : String ) -> Label :
129
- return labelsList .createTemporaryLabel (text )
130
-
135
+ func onGlobalSonic_musicPlayerDidPlay (fileName : String ) -> void :
136
+ showMusicLabel (fileName .get_basename ().get_file ())
131
137
132
138
#region Animations
133
139
134
140
## Fades in the global overlay, which may be a solid black rectangle, effectively fading OUT the actual game content.
135
- func fadeInOverlayRect () -> Tween :
141
+ func fadeInTintRect () -> Tween :
136
142
if rectFadeTween : rectFadeTween .kill ()
137
- rectFadeTween = Animations .fadeIn (overlayRect )
143
+ rectFadeTween = Animations .fadeIn (tintRect )
138
144
return rectFadeTween
139
145
140
146
141
147
## Fades out the global overlay, which may be a solid black rectangle, effectively fading IN the actual game content.
142
- func fadeOutOverlayRect () -> Tween :
148
+ func fadeOutTintRect () -> Tween :
143
149
if rectFadeTween : rectFadeTween .kill ()
144
- rectFadeTween = Animations .fadeOut (overlayRect )
150
+ rectFadeTween = Animations .fadeOut (tintRect )
145
151
return rectFadeTween
146
152
153
+
154
+ ## @experimental
155
+ func showMusicLabel (title : String ) -> void :
156
+ # TODO: Fix interrupted animations
157
+
158
+ const margin : float = 4.0
159
+ const showTime : float = 0.5
160
+ const hideTime : float = 0.5
161
+ const waitTIme : float = 2.0
162
+
163
+ # musicLabel.text = "" # Let any existing title be animated into the new one ^^
164
+ musicLabelContainer .position .y = musicLabelContainer .get_viewport_rect ().end .y
165
+ musicLabelContainer .modulate = Color (Color .CYAN , 0 )
166
+ musicLabelContainer .visible = true
167
+
168
+ Animations .tweenProperty (musicLabel , ^ "text" , title , showTime )
169
+
170
+ var slideAnimation : Tween = Animations .tweenProperty (musicLabelContainer , ^ "position:y" , musicLabelContainer .get_viewport_rect ().end .y - 16 - margin , showTime ) \
171
+ .set_ease (Tween .EASE_OUT )
172
+ Animations .fadeIn (musicLabelContainer , showTime )
173
+
174
+ await slideAnimation .finished
175
+ await SceneManager .sceneTree .create_timer (waitTIme ).timeout
176
+
177
+ Animations .tweenProperty (musicLabel , ^ "text" , "" , hideTime )
178
+ Animations .tweenProperty (musicLabelContainer , ^ "position:y" , musicLabelContainer .get_viewport_rect ().end .y , hideTime ) \
179
+ .set_ease (Tween .EASE_OUT )
180
+ Animations .fadeOut (musicLabelContainer , hideTime )
181
+
182
+
183
+ func createTemporaryLabel (text : String ) -> Label :
184
+ return labelsList .createTemporaryLabel (text )
185
+
147
186
#endregion
0 commit comments