aboutsummaryrefslogtreecommitdiff
path: root/game/src/MusicConductor/MusicUIController.gd
diff options
context:
space:
mode:
author ClarkeCode <33846391+ClarkeCode@users.noreply.github.com>2023-03-06 22:14:19 +0100
committer GitHub <noreply@github.com>2023-03-06 22:14:19 +0100
commitce325c16c0f5d82ed51abd8bd13928a7bc609ba5 (patch)
tree9684123684de590ecd3be99be034d68f4bc6f8b7 /game/src/MusicConductor/MusicUIController.gd
parent95173891f7c5eea7717a58ae4f1438fd09e0ee1f (diff)
Add Music Player (#49)
* Adding MusicConductor * Added selectable songs and player visibility toggle * Refinements to the music system * SongInfo compatability with various audio formats * Moved UI reqs to editor description; flipped conditions to exclude music .import files * Made selection of the first music track extension-agnostic * Fixed visual bug with play/pause button when interacting with progress slider
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