Server requests move out of Settings into a new MusicServerClient autoload with one function per endpoint. It sends requests through a swappable HttpTransport so tests can fake the server, and it frees its HTTPRequest nodes after use. Players now have a UUID that never changes. Their position in Settings.player_array is only used for the Alt+<number> keybinds. Previously the position doubled as the id, so removing a player made points and wins land on the wrong player, and could delete another player's point from a song. Also fixes: - format_time showed 59.6 seconds as "00:60" - searches containing regex characters such as "Q*bert" broke search - SongObject and PlayerObject were Nodes that were never freed; they are now RefCounted - search matching is split out of the UI code into find_matches()
56 lines
1.4 KiB
GDScript
56 lines
1.4 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
|
|
|
|
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:
|
|
print("add_point")
|
|
if !players_given_point.has(player_id):
|
|
players_given_point.append(player_id)
|
|
|
|
func remove_point(player_id: String) -> void:
|
|
print("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]
|