extends RefCounted class_name SongObject var song_number: int var song_title: String var soundtrack_title: String ## Ids of the players who got a point for this song. var players_given_point: Array[String] = [] var is_answered: bool = false var has_played: bool = false var is_playing: bool = false ## The song's file: a download in [method Playlist.songs_folder], or a song in the music ## folder. Read the song with [method Playlist.get_song]. var song_path: String = "" ## The song itself, only when it could not be saved to a file. var song: AudioStream func get_soundtrack_title() -> String: if is_answered: return soundtrack_title else: return "????????" func get_song_title() -> String: if is_answered: return song_title else: return "??????" func get_song_info() -> String: if Settings.is_debug: return "%d. %s | played: %s | answered: %s" % [(song_number + 1), _full_title(), has_played, is_answered] elif is_answered: return "%d. %s" % [(song_number + 1), _full_title()] else: return "??? - ???" # "Soundtrack - Song", or only the song in a prepared quiz, which has no soundtracks func _full_title() -> String: if soundtrack_title.is_empty(): return song_title return "%s - %s" % [soundtrack_title, song_title] func add_point(player_id: String) -> void: GameLog.debug("add_point") if !players_given_point.has(player_id): players_given_point.append(player_id) func remove_point(player_id: String) -> void: GameLog.debug("remove_point") players_given_point.erase(player_id) func _to_string() -> String: var format_string: String = "song_number: %d | soundtrack_title: %s | song_title: %s" \ + " | is_answered: %s | has_played: %s | is_playing: %s" return format_string % [song_number, soundtrack_title, song_title, is_answered, has_played, is_playing]