diff options
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 |