aboutsummaryrefslogtreecommitdiff
path: root/game/src/MusicConductor/MusicUIController.gd
diff options
context:
space:
mode:
Diffstat (limited to 'game/src/MusicConductor/MusicUIController.gd')
-rw-r--r--game/src/MusicConductor/MusicUIController.gd66
1 files changed, 66 insertions, 0 deletions
diff --git a/game/src/MusicConductor/MusicUIController.gd b/game/src/MusicConductor/MusicUIController.gd
new file mode 100644
index 0000000..f2c9225
--- /dev/null
+++ b/game/src/MusicConductor/MusicUIController.gd
@@ -0,0 +1,66 @@
+extends Control
+
+@export var songSelectorButton : OptionButton
+@export var progressSlider : HSlider
+@export var prevSongButton : Button
+@export var playPauseButton : Button
+@export var nextSongButton : Button
+@export var widgetVisibilityButton : Button
+
+var isMusicPlayerVisible : bool = true
+var isUserDraggingProgressSlider : bool = false
+
+# Called when the node enters the scene tree for the first time.
+func _ready():
+ for songName in MusicConductor.getAllSongNames():
+ songSelectorButton.add_item(songName, songSelectorButton.item_count)
+ updateSongNameVisual()
+
+
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(_delta):
+ if !isUserDraggingProgressSlider:
+ progressSlider.value = MusicConductor.getCurrentSongProgressPercentage()
+
+func updateSongNameVisual():
+ songSelectorButton.selected = MusicConductor.getCurrentSongIndex()
+
+func updatePlayPauseButtonVisual():
+ playPauseButton.text = "||" if MusicConductor.isPaused() else ">"
+
+func _on_play_pause_button_pressed():
+ MusicConductor.togglePlayPause()
+ updatePlayPauseButtonVisual()
+
+func _on_next_song_button_pressed():
+ MusicConductor.nextSong()
+ updateSongNameVisual()
+ updatePlayPauseButtonVisual()
+
+func _on_previous_song_button_pressed():
+ MusicConductor.prevSong()
+ updateSongNameVisual()
+ updatePlayPauseButtonVisual()
+
+func _on_option_button_item_selected(index):
+ # UIFUN-92
+ MusicConductor.startSongByIndex(index)
+
+
+func _on_progress_slider_drag_started():
+ isUserDraggingProgressSlider = true
+
+
+func _on_progress_slider_drag_ended(_value_changed):
+ MusicConductor.scrubSongByPercentage(progressSlider.value)
+ isUserDraggingProgressSlider = false
+ updatePlayPauseButtonVisual()
+
+func _on_music_ui_visibility_button_pressed():
+ isMusicPlayerVisible = !isMusicPlayerVisible
+ widgetVisibilityButton.text = "Hide Player" if isMusicPlayerVisible else "Show Player"
+ songSelectorButton.visible = isMusicPlayerVisible
+ progressSlider.visible = isMusicPlayerVisible
+ prevSongButton.visible = isMusicPlayerVisible
+ playPauseButton.visible = isMusicPlayerVisible
+ nextSongButton.visible = isMusicPlayerVisible