Files
MusicPlayer/data/song_object.gd
T
Sansan 240c331ab2
Build / test (push) Successful in 53s
Build / build (push) Successful in 1m13s
Cache character pictures and songs on disk
Character pictures are kept in characters/ next to the settings, with an
index.json of when the server last changed each one and when it was
downloaded. Only new or changed pictures are downloaded, using the server's new
/character/details. Older servers fall back to the name list, and pictures are
downloaded again after 7 days.

Downloaded songs are written to songs/ and only their paths are kept in memory.
The folder is emptied when the game starts and when the playlist resets.
2026-10-07 21:57:27 +02:00

64 lines
1.6 KiB
GDScript

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 in [method Playlist.songs_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:
var format_string: String = "%d. %s - %s | played: %s | answered: %s"
return format_string % [(song_number + 1), soundtrack_title, song_title, has_played,
is_answered]
elif is_answered:
var format_string: String = "%d. %s - %s"
return format_string % [(song_number + 1), soundtrack_title, song_title]
else:
return "??? - ???"
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]