diff options
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 |
commit | ce325c16c0f5d82ed51abd8bd13928a7bc609ba5 (patch) | |
tree | 9684123684de590ecd3be99be034d68f4bc6f8b7 /game/src/MusicConductor/MusicUIController.gd | |
parent | 95173891f7c5eea7717a58ae4f1438fd09e0ee1f (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.gd | 66 |
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 |