From ce325c16c0f5d82ed51abd8bd13928a7bc609ba5 Mon Sep 17 00:00:00 2001 From: ClarkeCode <33846391+ClarkeCode@users.noreply.github.com> Date: Mon, 6 Mar 2023 16:14:19 -0500 Subject: 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 --- game/src/MusicConductor/MusicUIController.gd | 66 ++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 game/src/MusicConductor/MusicUIController.gd (limited to 'game/src/MusicConductor/MusicUIController.gd') 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 -- cgit v1.2.3-56-ga3b1