#8: Added functionality to cache more than one song
All checks were successful
Build / build (push) Successful in 1m25s

This commit is contained in:
2025-10-26 20:48:35 +01:00
parent 4e6e37775d
commit 734a463db9
13 changed files with 327 additions and 139 deletions

View File

@@ -59,10 +59,7 @@ var sync_window: Control = %SyncWindow
var settings_button: Button = $SettingsButton
@onready
var settings_popup: PopupPanel = $SettingsPopupPanel
@onready
var settings_window: BoxContainer = $SettingsPopupPanel/SettingsWindow
var settings_window: Control = $SettingsWindow
@onready
var statistics_button: Button = $StatisticsButton
@@ -133,8 +130,8 @@ var music_player_container: PanelContainer = $MusicPlayer
@onready
var debug_label: Label = $DebugLabel
var player := preload("res://Player.tscn")
var song_list_object := preload("res://song_list_object.tscn")
var player: PackedScene = preload("res://Player.tscn")
var song_list_object: PackedScene = preload("res://song_list_object.tscn")
var songs: Array= []
var games: Array = []
@@ -142,17 +139,18 @@ var current_player: Node
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
var is_debug: bool = OS.has_feature("debug")
var debug: bool = OS.has_feature("debug")
var is_mac: bool = OS.has_feature("macos")
if is_debug:
if debug:
print("is_debug")
debug_label.visible = true
Settings.is_debug = true
Settings.default_path = "http://localhost:8080"
Settings.selected_server = 3
Settings.winning_score = 5
if is_mac:
print("is_mac")
next_button.pressed.connect(fetch_song.bind(false))
next_button.pressed.connect(play_next_song)
show_answer_button.pressed.connect(show_answer_pressed)
search_button.pressed.connect(show_search)
sync_button.pressed.connect(sync_games)
@@ -165,7 +163,7 @@ func _ready() -> void:
character_select.connect("character_selected", _on_character_selected)
new_player_name_field.connect("enter_key_pressed", add_player)
music_player_container.connect("play_next_song", fetch_song.bind(false))
music_player_container.connect("play_next_song", play_next_song)
music_player_container.connect("update_song_list", update_song_list)
settings_window.connect("server_changed", server_updated)
sync_window.connect("sync_started", _on_sync_started)
@@ -179,7 +177,7 @@ func _ready() -> void:
get_suggestion_list()
fetch_song_list_at_start()
fetch_song(true)
fetch_song()
func _input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed:
@@ -222,50 +220,50 @@ func repeat_song() -> void:
func show_answer_pressed() -> void:
print("show_answer_pressed")
print("show_answer_pressed song_object: ", Settings.song_object_array[Settings.latest_played_song]._to_string())
Settings.song_object_array[Settings.latest_played_song].is_answered = true
Playlist.song_is_answered()
update_song_list()
func fetch_song_list_at_start() -> void:
print("fetch_song_list_at_start")
var fetch_song_list_at_start_done: Callable = func fetch_songs_at_start_done(data) -> void:
Settings.song_object_array = []
Playlist.clear_song_list()
if data == null:
Settings.latest_played_song = Settings.song_object_array.size()
Playlist.update_last_played_song()
update_song_list()
return
if typeof(data) == TYPE_ARRAY:
for d in data:
for d: Dictionary in data:
var new_song_object: SongObject = SongObject.new()
new_song_object.song_number = d.SongNo
new_song_object.game_title = d.Game
new_song_object.song_title = d.Song
new_song_object.is_answered = true
new_song_object.has_played = true
Settings.song_object_array.append(new_song_object)
Playlist.add_to_playlist(new_song_object)
else:
print("Unexpected data")
Settings.latest_played_song = Settings.song_object_array.size()
Playlist.update_last_played_song()
update_song_list()
Settings.make_request2("/music/list", fetch_song_list_at_start_done, true)
func play_next_song() -> void:
print("play_next_song ", Playlist.latest_played_song)
if Playlist.first_song_played:
Playlist.set_latest_played_song()
Playlist.first_song_played = true
music_player_container.play_song_object(Playlist.latest_played_song)
if !(Playlist.get_preloaded_songs() > 0):
next_button.disabled = true
if !Playlist.is_song_downloading:
fetch_song()
#not first "/music/addPlayed"
#"/music/rand"
#"/music/addQue"
#"/music/info"
func fetch_song(first_time: bool) -> void:
func fetch_song() -> void:
print("fetch_song")
if !first_time:
if Settings.song_object_array[Settings.latest_played_song].has_played && !Settings.song_object_array[Settings.latest_played_song].is_answered:
Settings.song_object_array[Settings.latest_played_song].is_answered = true
Settings.latest_played_song = Settings.song_object_array.size() - 1
music_player_container.play_song_object(Settings.latest_played_song)
if Settings.add_to_stats :
print("add to stats")
Settings.make_request3("/music/addPlayed")
next_button.disabled = true
Playlist.is_song_downloading = true
var url: String = ""
if Settings.use_low_played_mode:
url = "/music/rand/low"
@@ -287,8 +285,14 @@ func fetch_song(first_time: bool) -> void:
new_song_object.song_title = data_received.Song
print("new_song_object: ", new_song_object.to_string())
Settings.song_object_array.append(new_song_object)
Playlist.add_to_playlist(new_song_object)
next_button.disabled = false
if Playlist.should_preload_more_songs():
fetch_song()
else:
Playlist.is_song_downloading = false
if Settings.is_debug:
update_song_list()
Settings.make_request2("/music/info", fetch_song_info_done, true)
Settings.make_request2("/music/addQue", added_to_que_done, false)
@@ -297,13 +301,11 @@ func fetch_song(first_time: bool) -> void:
func update_song_list() -> void:
print("update_song_list")
if Settings.currently_playing_song >= 0:
game_label.text = Settings.song_object_array[Settings.currently_playing_song].get_game_title()
song_label.text = Settings.song_object_array[Settings.currently_playing_song].get_song_title()
if Playlist.currently_playing_song >= 0:
game_label.text = Playlist.get_current_game_title()
song_label.text = Playlist.get_current_song_title()
Settings.delete_children(music_list)
for s: SongObject in Settings.song_object_array:
if !s.has_played:
return
for s: SongObject in Playlist.get_playlist():
var new_song_list_object: SongListObject = song_list_object.instantiate()
new_song_list_object.song_object = s
new_song_list_object.gui_input.connect(song_object_clicked.bind(s.song_number))
@@ -311,15 +313,14 @@ func update_song_list() -> void:
func song_object_clicked(event: InputEvent, song_no: int) -> void:
if (event is InputEventMouseButton && event.pressed && event.button_index == MOUSE_BUTTON_LEFT):
print("Clicked Song Object: ", Settings.song_object_array[song_no].to_string())
if Settings.song_object_array[song_no].song == null:
print("Clicked Song Object: ", Playlist.song_object_array[song_no].to_string())
if Playlist.get_song(song_no) == null:
print("has no song, need to download")
var song_downloaded: Callable = func song_downloaded(body: PackedByteArray) -> void:
var sound: AudioStream = AudioStreamMP3.new()
sound.data = body
Settings.song_object_array[song_no].song = sound
Playlist.add_song_to_song_object(song_no, sound)
music_player_container.play_song_object(song_no)
Settings.make_request2("/music?song=" + str(song_no), song_downloaded, true)
else:
print("song already downloaded")
@@ -328,11 +329,9 @@ func song_object_clicked(event: InputEvent, song_no: int) -> void:
func reset_playlist() -> void:
print("reset_playlist")
var playlist_reset_done: Callable = func playlist_reset_done() -> void:
Settings.currently_playing_song = -1
Settings.latest_played_song = 0
Settings.song_object_array.clear()
Playlist.reset_playlist()
fetch_song_list_at_start()
fetch_song(true)
fetch_song()
Settings.make_request2("/music/reset", playlist_reset_done, false)
@@ -352,7 +351,7 @@ func show_about() -> void:
func show_settings() -> void:
print("show_settings")
settings_popup.visible = true
settings_window.visible = true
func get_statistics() -> void:
print("get_statistics")
@@ -377,7 +376,6 @@ func _on_sync_finished() -> void:
sound_test_button.disabled = false
reset_playlist_button.disabled = false
show_answer_button.disabled = false
next_button.disabled = false
func get_suggestion_list() -> void:
print("get_suggestion_list")
@@ -435,8 +433,8 @@ func load_players() -> void:
func _on_point_given(player_given_point: int) -> void:
print("_on_point_given")
if Settings.currently_playing_song >= 0:
Settings.song_object_array[Settings.currently_playing_song].add_point(player_given_point)
if Playlist.currently_playing_song >= 0:
Playlist.add_point(player_given_point)
update_song_list()
func _on_make_point_given_sound() -> void:
@@ -445,8 +443,8 @@ func _on_make_point_given_sound() -> void:
func _on_point_taken(player_taken_point: int) -> void:
print("_on_point_taken")
music_player_container.play_sound_effect(preload("res://sounds/itemequip.wav"))
if Settings.currently_playing_song >= 0:
Settings.song_object_array[Settings.currently_playing_song].remove_point(player_taken_point)
if Playlist.currently_playing_song >= 0:
Playlist.remove_point(player_taken_point)
update_song_list()
func _on_player_won(winning_player_id: int) -> void:
@@ -463,9 +461,7 @@ func _on_player_removed(player_to_remove: int) -> void:
print("_on_player_removed ", player_to_remove)
Settings.player_array.remove_at(player_to_remove)
load_players()
for song_list_object: SongObject in Settings.song_object_array:
Settings.song_object_array[song_list_object.song_number].players_given_point.remove_at(Settings.song_object_array[song_list_object.song_number].players_given_point.find(player_to_remove))
Playlist.remove_player_from_list(player_to_remove)
update_song_list()
func _on_player_change_character_clicked(new_player: Node) -> void: