#8: Added functionality to cache more than one song
All checks were successful
Build / build (push) Successful in 1m25s
All checks were successful
Build / build (push) Successful in 1m25s
This commit is contained in:
@@ -9,7 +9,7 @@ on:
|
|||||||
branches: [main, develop]
|
branches: [main, develop]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GODOT_VERSION: 4.4
|
GODOT_VERSION: 4.5
|
||||||
PROJECT_PATH: .
|
PROJECT_PATH: .
|
||||||
#GAME_VERSION: 0.0.8
|
#GAME_VERSION: 0.0.8
|
||||||
#GAME_VERSION: ${{gitea.ref_name}}
|
#GAME_VERSION: ${{gitea.ref_name}}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ on:
|
|||||||
- '*.*'
|
- '*.*'
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GODOT_VERSION: 4.4
|
GODOT_VERSION: 4.5
|
||||||
PROJECT_PATH: .
|
PROJECT_PATH: .
|
||||||
PROJECT_NAME: MusicPlayer
|
PROJECT_NAME: MusicPlayer
|
||||||
GAME_VERSION: ${{gitea.ref_name}}
|
GAME_VERSION: ${{gitea.ref_name}}
|
||||||
|
|||||||
104
MainWindow.gd
104
MainWindow.gd
@@ -59,10 +59,7 @@ var sync_window: Control = %SyncWindow
|
|||||||
var settings_button: Button = $SettingsButton
|
var settings_button: Button = $SettingsButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var settings_popup: PopupPanel = $SettingsPopupPanel
|
var settings_window: Control = $SettingsWindow
|
||||||
|
|
||||||
@onready
|
|
||||||
var settings_window: BoxContainer = $SettingsPopupPanel/SettingsWindow
|
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var statistics_button: Button = $StatisticsButton
|
var statistics_button: Button = $StatisticsButton
|
||||||
@@ -133,8 +130,8 @@ var music_player_container: PanelContainer = $MusicPlayer
|
|||||||
@onready
|
@onready
|
||||||
var debug_label: Label = $DebugLabel
|
var debug_label: Label = $DebugLabel
|
||||||
|
|
||||||
var player := preload("res://Player.tscn")
|
var player: PackedScene = preload("res://Player.tscn")
|
||||||
var song_list_object := preload("res://song_list_object.tscn")
|
var song_list_object: PackedScene = preload("res://song_list_object.tscn")
|
||||||
|
|
||||||
var songs: Array= []
|
var songs: Array= []
|
||||||
var games: Array = []
|
var games: Array = []
|
||||||
@@ -142,17 +139,18 @@ var current_player: Node
|
|||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready() -> void:
|
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")
|
var is_mac: bool = OS.has_feature("macos")
|
||||||
if is_debug:
|
if debug:
|
||||||
print("is_debug")
|
print("is_debug")
|
||||||
debug_label.visible = true
|
debug_label.visible = true
|
||||||
|
Settings.is_debug = true
|
||||||
Settings.default_path = "http://localhost:8080"
|
Settings.default_path = "http://localhost:8080"
|
||||||
Settings.selected_server = 3
|
Settings.selected_server = 3
|
||||||
Settings.winning_score = 5
|
Settings.winning_score = 5
|
||||||
if is_mac:
|
if is_mac:
|
||||||
print("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)
|
show_answer_button.pressed.connect(show_answer_pressed)
|
||||||
search_button.pressed.connect(show_search)
|
search_button.pressed.connect(show_search)
|
||||||
sync_button.pressed.connect(sync_games)
|
sync_button.pressed.connect(sync_games)
|
||||||
@@ -165,7 +163,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
character_select.connect("character_selected", _on_character_selected)
|
character_select.connect("character_selected", _on_character_selected)
|
||||||
new_player_name_field.connect("enter_key_pressed", add_player)
|
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)
|
music_player_container.connect("update_song_list", update_song_list)
|
||||||
settings_window.connect("server_changed", server_updated)
|
settings_window.connect("server_changed", server_updated)
|
||||||
sync_window.connect("sync_started", _on_sync_started)
|
sync_window.connect("sync_started", _on_sync_started)
|
||||||
@@ -179,7 +177,7 @@ func _ready() -> void:
|
|||||||
|
|
||||||
get_suggestion_list()
|
get_suggestion_list()
|
||||||
fetch_song_list_at_start()
|
fetch_song_list_at_start()
|
||||||
fetch_song(true)
|
fetch_song()
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if event is InputEventKey and event.pressed:
|
if event is InputEventKey and event.pressed:
|
||||||
@@ -222,50 +220,50 @@ func repeat_song() -> void:
|
|||||||
|
|
||||||
func show_answer_pressed() -> void:
|
func show_answer_pressed() -> void:
|
||||||
print("show_answer_pressed")
|
print("show_answer_pressed")
|
||||||
print("show_answer_pressed song_object: ", Settings.song_object_array[Settings.latest_played_song]._to_string())
|
Playlist.song_is_answered()
|
||||||
Settings.song_object_array[Settings.latest_played_song].is_answered = true
|
|
||||||
update_song_list()
|
update_song_list()
|
||||||
|
|
||||||
func fetch_song_list_at_start() -> void:
|
func fetch_song_list_at_start() -> void:
|
||||||
print("fetch_song_list_at_start")
|
print("fetch_song_list_at_start")
|
||||||
var fetch_song_list_at_start_done: Callable = func fetch_songs_at_start_done(data) -> void:
|
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:
|
if data == null:
|
||||||
Settings.latest_played_song = Settings.song_object_array.size()
|
Playlist.update_last_played_song()
|
||||||
update_song_list()
|
update_song_list()
|
||||||
return
|
return
|
||||||
if typeof(data) == TYPE_ARRAY:
|
if typeof(data) == TYPE_ARRAY:
|
||||||
for d in data:
|
for d: Dictionary in data:
|
||||||
var new_song_object: SongObject = SongObject.new()
|
var new_song_object: SongObject = SongObject.new()
|
||||||
new_song_object.song_number = d.SongNo
|
new_song_object.song_number = d.SongNo
|
||||||
new_song_object.game_title = d.Game
|
new_song_object.game_title = d.Game
|
||||||
new_song_object.song_title = d.Song
|
new_song_object.song_title = d.Song
|
||||||
new_song_object.is_answered = true
|
new_song_object.is_answered = true
|
||||||
new_song_object.has_played = true
|
new_song_object.has_played = true
|
||||||
Settings.song_object_array.append(new_song_object)
|
Playlist.add_to_playlist(new_song_object)
|
||||||
else:
|
else:
|
||||||
print("Unexpected data")
|
print("Unexpected data")
|
||||||
Settings.latest_played_song = Settings.song_object_array.size()
|
Playlist.update_last_played_song()
|
||||||
update_song_list()
|
update_song_list()
|
||||||
Settings.make_request2("/music/list", fetch_song_list_at_start_done, true)
|
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"
|
#not first "/music/addPlayed"
|
||||||
#"/music/rand"
|
#"/music/rand"
|
||||||
#"/music/addQue"
|
#"/music/addQue"
|
||||||
#"/music/info"
|
#"/music/info"
|
||||||
func fetch_song(first_time: bool) -> void:
|
func fetch_song() -> void:
|
||||||
print("fetch_song")
|
print("fetch_song")
|
||||||
if !first_time:
|
Playlist.is_song_downloading = true
|
||||||
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
|
|
||||||
|
|
||||||
var url: String = ""
|
var url: String = ""
|
||||||
if Settings.use_low_played_mode:
|
if Settings.use_low_played_mode:
|
||||||
url = "/music/rand/low"
|
url = "/music/rand/low"
|
||||||
@@ -287,8 +285,14 @@ func fetch_song(first_time: bool) -> void:
|
|||||||
new_song_object.song_title = data_received.Song
|
new_song_object.song_title = data_received.Song
|
||||||
|
|
||||||
print("new_song_object: ", new_song_object.to_string())
|
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
|
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/info", fetch_song_info_done, true)
|
||||||
|
|
||||||
Settings.make_request2("/music/addQue", added_to_que_done, false)
|
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:
|
func update_song_list() -> void:
|
||||||
print("update_song_list")
|
print("update_song_list")
|
||||||
if Settings.currently_playing_song >= 0:
|
if Playlist.currently_playing_song >= 0:
|
||||||
game_label.text = Settings.song_object_array[Settings.currently_playing_song].get_game_title()
|
game_label.text = Playlist.get_current_game_title()
|
||||||
song_label.text = Settings.song_object_array[Settings.currently_playing_song].get_song_title()
|
song_label.text = Playlist.get_current_song_title()
|
||||||
Settings.delete_children(music_list)
|
Settings.delete_children(music_list)
|
||||||
for s: SongObject in Settings.song_object_array:
|
for s: SongObject in Playlist.get_playlist():
|
||||||
if !s.has_played:
|
|
||||||
return
|
|
||||||
var new_song_list_object: SongListObject = song_list_object.instantiate()
|
var new_song_list_object: SongListObject = song_list_object.instantiate()
|
||||||
new_song_list_object.song_object = s
|
new_song_list_object.song_object = s
|
||||||
new_song_list_object.gui_input.connect(song_object_clicked.bind(s.song_number))
|
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:
|
func song_object_clicked(event: InputEvent, song_no: int) -> void:
|
||||||
if (event is InputEventMouseButton && event.pressed && event.button_index == MOUSE_BUTTON_LEFT):
|
if (event is InputEventMouseButton && event.pressed && event.button_index == MOUSE_BUTTON_LEFT):
|
||||||
print("Clicked Song Object: ", Settings.song_object_array[song_no].to_string())
|
print("Clicked Song Object: ", Playlist.song_object_array[song_no].to_string())
|
||||||
if Settings.song_object_array[song_no].song == null:
|
if Playlist.get_song(song_no) == null:
|
||||||
print("has no song, need to download")
|
print("has no song, need to download")
|
||||||
var song_downloaded: Callable = func song_downloaded(body: PackedByteArray) -> void:
|
var song_downloaded: Callable = func song_downloaded(body: PackedByteArray) -> void:
|
||||||
var sound: AudioStream = AudioStreamMP3.new()
|
var sound: AudioStream = AudioStreamMP3.new()
|
||||||
sound.data = body
|
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)
|
music_player_container.play_song_object(song_no)
|
||||||
|
|
||||||
Settings.make_request2("/music?song=" + str(song_no), song_downloaded, true)
|
Settings.make_request2("/music?song=" + str(song_no), song_downloaded, true)
|
||||||
else:
|
else:
|
||||||
print("song already downloaded")
|
print("song already downloaded")
|
||||||
@@ -328,11 +329,9 @@ func song_object_clicked(event: InputEvent, song_no: int) -> void:
|
|||||||
func reset_playlist() -> void:
|
func reset_playlist() -> void:
|
||||||
print("reset_playlist")
|
print("reset_playlist")
|
||||||
var playlist_reset_done: Callable = func playlist_reset_done() -> void:
|
var playlist_reset_done: Callable = func playlist_reset_done() -> void:
|
||||||
Settings.currently_playing_song = -1
|
Playlist.reset_playlist()
|
||||||
Settings.latest_played_song = 0
|
|
||||||
Settings.song_object_array.clear()
|
|
||||||
fetch_song_list_at_start()
|
fetch_song_list_at_start()
|
||||||
fetch_song(true)
|
fetch_song()
|
||||||
|
|
||||||
Settings.make_request2("/music/reset", playlist_reset_done, false)
|
Settings.make_request2("/music/reset", playlist_reset_done, false)
|
||||||
|
|
||||||
@@ -352,7 +351,7 @@ func show_about() -> void:
|
|||||||
|
|
||||||
func show_settings() -> void:
|
func show_settings() -> void:
|
||||||
print("show_settings")
|
print("show_settings")
|
||||||
settings_popup.visible = true
|
settings_window.visible = true
|
||||||
|
|
||||||
func get_statistics() -> void:
|
func get_statistics() -> void:
|
||||||
print("get_statistics")
|
print("get_statistics")
|
||||||
@@ -377,7 +376,6 @@ func _on_sync_finished() -> void:
|
|||||||
sound_test_button.disabled = false
|
sound_test_button.disabled = false
|
||||||
reset_playlist_button.disabled = false
|
reset_playlist_button.disabled = false
|
||||||
show_answer_button.disabled = false
|
show_answer_button.disabled = false
|
||||||
next_button.disabled = false
|
|
||||||
|
|
||||||
func get_suggestion_list() -> void:
|
func get_suggestion_list() -> void:
|
||||||
print("get_suggestion_list")
|
print("get_suggestion_list")
|
||||||
@@ -435,8 +433,8 @@ func load_players() -> void:
|
|||||||
|
|
||||||
func _on_point_given(player_given_point: int) -> void:
|
func _on_point_given(player_given_point: int) -> void:
|
||||||
print("_on_point_given")
|
print("_on_point_given")
|
||||||
if Settings.currently_playing_song >= 0:
|
if Playlist.currently_playing_song >= 0:
|
||||||
Settings.song_object_array[Settings.currently_playing_song].add_point(player_given_point)
|
Playlist.add_point(player_given_point)
|
||||||
update_song_list()
|
update_song_list()
|
||||||
|
|
||||||
func _on_make_point_given_sound() -> void:
|
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:
|
func _on_point_taken(player_taken_point: int) -> void:
|
||||||
print("_on_point_taken")
|
print("_on_point_taken")
|
||||||
music_player_container.play_sound_effect(preload("res://sounds/itemequip.wav"))
|
music_player_container.play_sound_effect(preload("res://sounds/itemequip.wav"))
|
||||||
if Settings.currently_playing_song >= 0:
|
if Playlist.currently_playing_song >= 0:
|
||||||
Settings.song_object_array[Settings.currently_playing_song].remove_point(player_taken_point)
|
Playlist.remove_point(player_taken_point)
|
||||||
update_song_list()
|
update_song_list()
|
||||||
|
|
||||||
func _on_player_won(winning_player_id: int) -> void:
|
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)
|
print("_on_player_removed ", player_to_remove)
|
||||||
Settings.player_array.remove_at(player_to_remove)
|
Settings.player_array.remove_at(player_to_remove)
|
||||||
load_players()
|
load_players()
|
||||||
|
Playlist.remove_player_from_list(player_to_remove)
|
||||||
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))
|
|
||||||
update_song_list()
|
update_song_list()
|
||||||
|
|
||||||
func _on_player_change_character_clicked(new_player: Node) -> void:
|
func _on_player_change_character_clicked(new_player: Node) -> void:
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ offset_bottom = 56.0
|
|||||||
|
|
||||||
[node name="Title" type="Label" parent="."]
|
[node name="Title" type="Label" parent="."]
|
||||||
texture_filter = 1
|
texture_filter = 1
|
||||||
layout_mode = 2
|
layout_mode = 0
|
||||||
offset_left = 64.0
|
offset_left = 64.0
|
||||||
offset_top = 12.0
|
offset_top = 12.0
|
||||||
offset_right = 369.0
|
offset_right = 369.0
|
||||||
@@ -89,7 +89,7 @@ label_settings = SubResource("LabelSettings_ychxr")
|
|||||||
|
|
||||||
[node name="Open" type="Button" parent="."]
|
[node name="Open" type="Button" parent="."]
|
||||||
visible = false
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 0
|
||||||
offset_left = 1296.0
|
offset_left = 1296.0
|
||||||
offset_top = 66.0
|
offset_top = 66.0
|
||||||
offset_right = 1346.0
|
offset_right = 1346.0
|
||||||
@@ -315,6 +315,7 @@ offset_top = 944.0
|
|||||||
offset_right = 368.0
|
offset_right = 368.0
|
||||||
offset_bottom = 975.0
|
offset_bottom = 975.0
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
|
disabled = true
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
shortcut = SubResource("Shortcut_d6fml")
|
shortcut = SubResource("Shortcut_d6fml")
|
||||||
text = "Randomize new track"
|
text = "Randomize new track"
|
||||||
@@ -376,12 +377,21 @@ offset_bottom = 96.0
|
|||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
visible = false
|
||||||
layout_mode = 1
|
layout_mode = 1
|
||||||
offset_left = 364.0
|
offset_left = 401.0
|
||||||
offset_top = 153.0
|
offset_top = 153.0
|
||||||
offset_right = 364.0
|
offset_right = 401.0
|
||||||
|
offset_bottom = 153.0
|
||||||
|
|
||||||
|
[node name="SettingsWindow" parent="." instance=ExtResource("11_k62u5")]
|
||||||
|
visible = false
|
||||||
|
layout_mode = 1
|
||||||
|
offset_left = 720.0
|
||||||
|
offset_top = 153.0
|
||||||
|
offset_right = 720.0
|
||||||
offset_bottom = 153.0
|
offset_bottom = 153.0
|
||||||
|
|
||||||
[node name="StatisticsPopupPanel" type="PopupPanel" parent="."]
|
[node name="StatisticsPopupPanel" type="PopupPanel" parent="."]
|
||||||
|
oversampling_override = 1.0
|
||||||
initial_position = 2
|
initial_position = 2
|
||||||
size = Vector2i(450, 100)
|
size = Vector2i(450, 100)
|
||||||
|
|
||||||
@@ -405,6 +415,7 @@ horizontal_alignment = 1
|
|||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="AboutPopupPanel" type="PopupPanel" parent="."]
|
[node name="AboutPopupPanel" type="PopupPanel" parent="."]
|
||||||
|
oversampling_override = 1.0
|
||||||
initial_position = 2
|
initial_position = 2
|
||||||
size = Vector2i(848, 710)
|
size = Vector2i(848, 710)
|
||||||
|
|
||||||
@@ -465,16 +476,6 @@ Change some buttons to icons
|
|||||||
Add shortcuts"
|
Add shortcuts"
|
||||||
autowrap_mode = 2
|
autowrap_mode = 2
|
||||||
|
|
||||||
[node name="SettingsPopupPanel" type="PopupPanel" parent="."]
|
|
||||||
initial_position = 2
|
|
||||||
size = Vector2i(268, 233)
|
|
||||||
|
|
||||||
[node name="SettingsWindow" parent="SettingsPopupPanel" instance=ExtResource("11_k62u5")]
|
|
||||||
offset_left = 4.0
|
|
||||||
offset_top = 4.0
|
|
||||||
offset_right = 271.0
|
|
||||||
offset_bottom = 354.0
|
|
||||||
|
|
||||||
[node name="WinnerPopupPanel" type="PopupPanel" parent="."]
|
[node name="WinnerPopupPanel" type="PopupPanel" parent="."]
|
||||||
initial_position = 2
|
initial_position = 2
|
||||||
size = Vector2i(600, 350)
|
size = Vector2i(600, 350)
|
||||||
|
|||||||
@@ -168,7 +168,7 @@ func play_song_object(song_object_no: int) -> void:
|
|||||||
if audio_player.is_playing():
|
if audio_player.is_playing():
|
||||||
audio_player.stop()
|
audio_player.stop()
|
||||||
await get_tree().create_timer(0.5).timeout
|
await get_tree().create_timer(0.5).timeout
|
||||||
audio_player.stream = Settings.song_object_array[song_object_no].song
|
audio_player.stream = Playlist.get_song(song_object_no)
|
||||||
sound_player.stop()
|
sound_player.stop()
|
||||||
audio_player.play()
|
audio_player.play()
|
||||||
song_finished = false
|
song_finished = false
|
||||||
@@ -176,13 +176,13 @@ func play_song_object(song_object_no: int) -> void:
|
|||||||
stream = audio_player.stream
|
stream = audio_player.stream
|
||||||
progress_slider.max_value = round(stream.get_length())
|
progress_slider.max_value = round(stream.get_length())
|
||||||
progress_slider.tick_count = round(stream.get_length() / 60)
|
progress_slider.tick_count = round(stream.get_length() / 60)
|
||||||
Settings.currently_playing_song = song_object_no
|
Playlist.set_currently_playing_song(song_object_no)
|
||||||
Settings.unset_is_playing()
|
Playlist.unset_is_playing()
|
||||||
if !Settings.hide_next_track:
|
if !Settings.hide_next_track:
|
||||||
print("Show answer now!!")
|
print("Show answer now!!")
|
||||||
Settings.song_object_array[song_object_no].is_answered = true
|
Playlist.song_is_answered(song_object_no)
|
||||||
Settings.song_object_array[song_object_no].has_played = true
|
Playlist.song_has_played(song_object_no)
|
||||||
Settings.song_object_array[song_object_no].is_playing = true
|
Playlist.song_is_playing(song_object_no)
|
||||||
update_song_list.emit()
|
update_song_list.emit()
|
||||||
|
|
||||||
func get_sound_test_song() -> void:
|
func get_sound_test_song() -> void:
|
||||||
|
|||||||
31
Settings.gd
31
Settings.gd
@@ -7,6 +7,8 @@ var selected_server: int = 0
|
|||||||
|
|
||||||
var is_local: bool = false
|
var is_local: bool = false
|
||||||
|
|
||||||
|
var is_debug: bool = false
|
||||||
|
|
||||||
var stop_after_current: bool = true
|
var stop_after_current: bool = true
|
||||||
var auto_repeat_song: bool = false
|
var auto_repeat_song: bool = false
|
||||||
var hide_next_track: bool = true
|
var hide_next_track: bool = true
|
||||||
@@ -14,14 +16,9 @@ var add_to_stats: bool = true
|
|||||||
var use_low_played_mode: bool = false
|
var use_low_played_mode: bool = false
|
||||||
var winning_score: int = 20
|
var winning_score: int = 20
|
||||||
var fullscreen: bool = false
|
var fullscreen: bool = false
|
||||||
var quick_sync: bool = true
|
|
||||||
var number_of_tracks_to_preload: int = 1
|
|
||||||
var play_local: bool = false
|
var play_local: bool = false
|
||||||
|
|
||||||
var player_array: Array[PlayerObject]
|
var player_array: Array[PlayerObject]
|
||||||
var song_object_array: Array[SongObject] = []
|
|
||||||
var latest_played_song: int = 0
|
|
||||||
var currently_playing_song: int = -1
|
|
||||||
var edit_players: bool = false
|
var edit_players: bool = false
|
||||||
var currently_syncing: bool = false
|
var currently_syncing: bool = false
|
||||||
|
|
||||||
@@ -29,15 +26,16 @@ var version: String = "1.6.0"
|
|||||||
|
|
||||||
var whats_new: String = "Changelog:
|
var whats_new: String = "Changelog:
|
||||||
1.6.0:
|
1.6.0:
|
||||||
#1: Fixed bug with inspiration list not reloding after sync
|
#1: Fixed bug with inspiration list not reloading after sync
|
||||||
#2: New dialog for sync
|
#2: New dialog for sync
|
||||||
#6: Now show progress during sync
|
#6: Now show progress during sync
|
||||||
#7: Blocking all requests to the server during sync
|
#7: Blocking all requests to the server during sync
|
||||||
|
#8: Added functionality to cache more than one song
|
||||||
1.5.0: Made big changes to players and the song list and how the local song list works
|
1.5.0: Made big changes to players and the song list and how the local song list works
|
||||||
0.9.0-Beta: Fixed settings and updated the player view
|
0.9.0-Beta: Fixed settings and updated the player view
|
||||||
0.8.0-Beta: Fixed reset buttons and some other small things
|
0.8.0-Beta: Fixed reset buttons and some other small things
|
||||||
0.7.8-Beta: Added shortcuts. Added dialog for winner. Started cleaning code.
|
0.7.8-Beta: Added shortcuts. Added dialog for winner. Started cleaning code.
|
||||||
0.7.5-Beta: Added settings menu, most things don't do anythig yet
|
0.7.5-Beta: Added settings menu, most things don't do anything yet
|
||||||
0.7-Beta: Can now hop between songs"
|
0.7-Beta: Can now hop between songs"
|
||||||
|
|
||||||
var whats_left: String = "Things left to do:
|
var whats_left: String = "Things left to do:
|
||||||
@@ -105,6 +103,21 @@ func make_request3(address: String) -> void:
|
|||||||
var request_error: int = http_request.request(default_path + address)
|
var request_error: int = http_request.request(default_path + address)
|
||||||
if request_error != OK:
|
if request_error != OK:
|
||||||
push_error("An error occurred in the HTTP request.")
|
push_error("An error occurred in the HTTP request.")
|
||||||
|
|
||||||
|
func make_put_request(address: String) -> void:
|
||||||
|
var error_handling: Callable = func(_result: int, response_code: int, _headers: PackedStringArray, _body: PackedByteArray) -> void:
|
||||||
|
print("request done to address: ", default_path + address)
|
||||||
|
if response_code != 200:
|
||||||
|
print("Error: " + str(response_code))
|
||||||
|
|
||||||
|
var http_request: HTTPRequest = HTTPRequest.new()
|
||||||
|
add_child(http_request)
|
||||||
|
http_request.request_completed.connect(error_handling)
|
||||||
|
# Perform a GET request. The URL below returns JSON as of writing.
|
||||||
|
var headers: PackedStringArray = ["Content-Type: application/json"]
|
||||||
|
var request_error: int = http_request.request(default_path + address, headers, HTTPClient.METHOD_PUT)
|
||||||
|
if request_error != OK:
|
||||||
|
push_error("An error occurred in the HTTP request.")
|
||||||
|
|
||||||
func delete_children(node: Node) -> void:
|
func delete_children(node: Node) -> void:
|
||||||
for n: Node in node.get_children():
|
for n: Node in node.get_children():
|
||||||
@@ -122,7 +135,3 @@ func delete_player_children(node: Node) -> void:
|
|||||||
else:
|
else:
|
||||||
node.remove_child(n)
|
node.remove_child(n)
|
||||||
n.queue_free()
|
n.queue_free()
|
||||||
|
|
||||||
func unset_is_playing() -> void:
|
|
||||||
for song_object: SongObject in song_object_array:
|
|
||||||
song_object.is_playing = false
|
|
||||||
|
|||||||
@@ -1,42 +1,54 @@
|
|||||||
extends VBoxContainer
|
extends Control
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var stop_after_current_button := $StopAfterCurrentCheckButton
|
var settings_panel: Panel = %SettingsPanel
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var hide_next_track_button := $HideNextTrackCheckButton
|
var stop_after_current_button: CheckButton = %StopAfterCurrentCheckButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var add_to_database_button := $AddToDatabaseCheckButton
|
var hide_next_track_button: CheckButton = %HideNextTrackCheckButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var low_played_button := $LowPlayedCheckButton
|
var add_to_database_button: CheckButton = %AddToDatabaseCheckButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var score_label := $HBoxContainer/ScoreLabel
|
var low_played_button: CheckButton = %LowPlayedCheckButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var lower_winning_score_button := $HBoxContainer/LowerButton
|
var score_label: Label = %ScoreLabel
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var increase_winning_score_button := $HBoxContainer/IncreaseButton
|
var lower_winning_score_button: Button = %LowerButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var select_server_button := $SelectServerButton
|
var increase_winning_score_button: Button = %IncreaseButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var fullscreen_button := $FullscreenButton
|
var cache_label: Label = %CacheLabel
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var quick_sync_button := $QuickSyncButton
|
var lower_cache_button: Button = %LowerCacheButton
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var local_button := $LocalButton
|
var increase_cache_button: Button = %IncreaseCacheButton
|
||||||
|
|
||||||
|
@onready
|
||||||
|
var select_server_button: OptionButton = %SelectServerButton
|
||||||
|
|
||||||
|
@onready
|
||||||
|
var fullscreen_button: CheckButton = %FullscreenButton
|
||||||
|
|
||||||
|
#@onready
|
||||||
|
#var quick_sync_button := $QuickSyncButton
|
||||||
|
|
||||||
|
@onready
|
||||||
|
var local_button: CheckButton = %LocalButton
|
||||||
|
|
||||||
signal server_changed
|
signal server_changed
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready():
|
func _ready() -> void:
|
||||||
fullscreen_button.button_pressed = Settings.fullscreen
|
fullscreen_button.button_pressed = Settings.fullscreen
|
||||||
select_server_button.selected = Settings.selected_server
|
select_server_button.selected = Settings.selected_server
|
||||||
|
|
||||||
@@ -46,9 +58,9 @@ func _ready():
|
|||||||
low_played_button.pressed.connect(low_played)
|
low_played_button.pressed.connect(low_played)
|
||||||
lower_winning_score_button.pressed.connect(lower_winning_score)
|
lower_winning_score_button.pressed.connect(lower_winning_score)
|
||||||
increase_winning_score_button.pressed.connect(increase_winning_score)
|
increase_winning_score_button.pressed.connect(increase_winning_score)
|
||||||
#select_server_button.pressed.connect(select_server)
|
lower_cache_button.pressed.connect(lower_cache)
|
||||||
|
increase_cache_button.pressed.connect(increase_cache)
|
||||||
fullscreen_button.pressed.connect(fullscreen)
|
fullscreen_button.pressed.connect(fullscreen)
|
||||||
quick_sync_button.pressed.connect(quick_sync)
|
|
||||||
local_button.pressed.connect(local_play)
|
local_button.pressed.connect(local_play)
|
||||||
|
|
||||||
stop_after_current_button.button_pressed = Settings.stop_after_current
|
stop_after_current_button.button_pressed = Settings.stop_after_current
|
||||||
@@ -56,44 +68,58 @@ func _ready():
|
|||||||
add_to_database_button.button_pressed = Settings.add_to_stats
|
add_to_database_button.button_pressed = Settings.add_to_stats
|
||||||
low_played_button.button_pressed = Settings.use_low_played_mode
|
low_played_button.button_pressed = Settings.use_low_played_mode
|
||||||
score_label.text = str(Settings.winning_score)
|
score_label.text = str(Settings.winning_score)
|
||||||
|
cache_label.text = str(Playlist.number_of_tracks_to_preload)
|
||||||
fullscreen_button.button_pressed = Settings.fullscreen
|
fullscreen_button.button_pressed = Settings.fullscreen
|
||||||
quick_sync_button.button_pressed = Settings.quick_sync
|
|
||||||
select_server_button.select(Settings.selected_server)
|
select_server_button.select(Settings.selected_server)
|
||||||
select_server_button.item_selected.connect(select_server)
|
select_server_button.item_selected.connect(select_server)
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if self.visible == true:
|
||||||
|
if event is InputEventMouseButton && event.is_pressed():
|
||||||
|
var evLocal: InputEvent = make_input_local(event)
|
||||||
|
if !Rect2(Vector2(0, 0), settings_panel.size).has_point(evLocal.position):
|
||||||
|
self.visible = false
|
||||||
|
|
||||||
func fullscreen() -> void:
|
func fullscreen() -> void:
|
||||||
Settings.fullscreen = !Settings.fullscreen
|
Settings.fullscreen = !Settings.fullscreen
|
||||||
if Settings.fullscreen == true:
|
if Settings.fullscreen == true:
|
||||||
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN)
|
||||||
if Settings.fullscreen == false:
|
if Settings.fullscreen == false:
|
||||||
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
|
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
|
||||||
|
|
||||||
func quick_sync() -> void:
|
|
||||||
Settings.quick_sync = !Settings.quick_sync
|
|
||||||
|
|
||||||
func local_play():
|
func local_play() -> void:
|
||||||
Settings.play_local = !Settings.play_local
|
Settings.play_local = !Settings.play_local
|
||||||
|
|
||||||
func stop_after_current():
|
func stop_after_current() -> void:
|
||||||
Settings.stop_after_current = !Settings.stop_after_current
|
Settings.stop_after_current = !Settings.stop_after_current
|
||||||
|
|
||||||
func hide_next_track():
|
func hide_next_track() -> void:
|
||||||
Settings.hide_next_track = !Settings.hide_next_track
|
Settings.hide_next_track = !Settings.hide_next_track
|
||||||
|
|
||||||
func add_to_database():
|
func add_to_database() -> void:
|
||||||
Settings.add_to_stats = !Settings.add_to_stats
|
Settings.add_to_stats = !Settings.add_to_stats
|
||||||
|
|
||||||
func low_played():
|
func low_played() -> void:
|
||||||
Settings.use_low_played_mode = !Settings.use_low_played_mode
|
Settings.use_low_played_mode = !Settings.use_low_played_mode
|
||||||
|
|
||||||
func lower_winning_score():
|
func lower_winning_score() -> void:
|
||||||
Settings.winning_score -= 1
|
Settings.winning_score -= 1
|
||||||
score_label.text = str(Settings.winning_score)
|
score_label.text = str(Settings.winning_score)
|
||||||
|
|
||||||
func increase_winning_score():
|
func increase_winning_score() -> void:
|
||||||
Settings.winning_score += 1
|
Settings.winning_score += 1
|
||||||
score_label.text = str(Settings.winning_score)
|
score_label.text = str(Settings.winning_score)
|
||||||
|
|
||||||
|
func lower_cache() -> void:
|
||||||
|
Playlist.number_of_tracks_to_preload -= 1
|
||||||
|
if Playlist.number_of_tracks_to_preload < 1:
|
||||||
|
Playlist.number_of_tracks_to_preload = 1
|
||||||
|
cache_label.text = str(Playlist.number_of_tracks_to_preload)
|
||||||
|
|
||||||
|
func increase_cache() -> void:
|
||||||
|
Playlist.number_of_tracks_to_preload += 1
|
||||||
|
cache_label.text = str(Playlist.number_of_tracks_to_preload)
|
||||||
|
|
||||||
func select_server(new_server: int) -> void:
|
func select_server(new_server: int) -> void:
|
||||||
Settings.default_path = select_server_button.get_item_text(new_server)
|
Settings.default_path = select_server_button.get_item_text(new_server)
|
||||||
Settings.selected_server = new_server
|
Settings.selected_server = new_server
|
||||||
|
|||||||
@@ -5,76 +5,126 @@
|
|||||||
[sub_resource type="LabelSettings" id="LabelSettings_3xrlm"]
|
[sub_resource type="LabelSettings" id="LabelSettings_3xrlm"]
|
||||||
font_size = 25
|
font_size = 25
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer"]
|
[node name="SettingsControl" type="Control"]
|
||||||
clip_contents = true
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
anchor_bottom = 1.0
|
anchor_bottom = 1.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
size_flags_horizontal = 3
|
|
||||||
size_flags_vertical = 3
|
|
||||||
script = ExtResource("1_bt55j")
|
script = ExtResource("1_bt55j")
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="."]
|
[node name="SettingsPanel" type="Panel" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 0
|
||||||
|
offset_right = 500.0
|
||||||
|
offset_bottom = 640.0
|
||||||
|
|
||||||
|
[node name="ScrollContainer" type="ScrollContainer" parent="SettingsPanel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_right = 500.0
|
||||||
|
offset_bottom = 640.0
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="SettingsPanel/ScrollContainer"]
|
||||||
|
clip_contents = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 0
|
size_flags_vertical = 0
|
||||||
text = "Settings"
|
text = "Settings"
|
||||||
label_settings = SubResource("LabelSettings_3xrlm")
|
label_settings = SubResource("LabelSettings_3xrlm")
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="StopAfterCurrentCheckButton" type="CheckButton" parent="."]
|
[node name="StopAfterCurrentCheckButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
button_pressed = true
|
button_pressed = true
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "Stop after current"
|
text = "Stop after current"
|
||||||
|
|
||||||
[node name="HideNextTrackCheckButton" type="CheckButton" parent="."]
|
[node name="HideNextTrackCheckButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
button_pressed = true
|
button_pressed = true
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "Hide next track"
|
text = "Hide next track"
|
||||||
|
|
||||||
[node name="AddToDatabaseCheckButton" type="CheckButton" parent="."]
|
[node name="AddToDatabaseCheckButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "Turn on played to database"
|
text = "Turn on played to database"
|
||||||
|
|
||||||
[node name="LowPlayedCheckButton" type="CheckButton" parent="."]
|
[node name="LowPlayedCheckButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "Use low played mode"
|
text = "Use low played mode"
|
||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
[node name="HBoxContainer" type="HBoxContainer" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="Label2" type="Label" parent="HBoxContainer"]
|
[node name="Label2" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer/HBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "Winning Score: "
|
text = "Winning Score: "
|
||||||
|
|
||||||
[node name="ScoreLabel" type="Label" parent="HBoxContainer"]
|
[node name="ScoreLabel" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "20"
|
text = "20"
|
||||||
|
|
||||||
[node name="LowerButton" type="Button" parent="HBoxContainer"]
|
[node name="LowerButton" type="Button" parent="SettingsPanel/ScrollContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(30, 2.08165e-12)
|
custom_minimum_size = Vector2(30, 2.08165e-12)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "-1"
|
text = "-1"
|
||||||
|
|
||||||
[node name="IncreaseButton" type="Button" parent="HBoxContainer"]
|
[node name="IncreaseButton" type="Button" parent="SettingsPanel/ScrollContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
custom_minimum_size = Vector2(30, 2.08165e-12)
|
custom_minimum_size = Vector2(30, 2.08165e-12)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "+1"
|
text = "+1"
|
||||||
|
|
||||||
[node name="SelectServerButton" type="OptionButton" parent="."]
|
[node name="CacheHBoxContainer" type="HBoxContainer" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="CacheTitleLabel" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer/CacheHBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "Predownload songs: "
|
||||||
|
|
||||||
|
[node name="CacheLabel" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer/CacheHBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
text = "1"
|
||||||
|
|
||||||
|
[node name="LowerCacheButton" type="Button" parent="SettingsPanel/ScrollContainer/VBoxContainer/CacheHBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(30, 2.08165e-12)
|
||||||
|
layout_mode = 2
|
||||||
|
focus_mode = 0
|
||||||
|
action_mode = 0
|
||||||
|
text = "-1"
|
||||||
|
|
||||||
|
[node name="IncreaseCacheButton" type="Button" parent="SettingsPanel/ScrollContainer/VBoxContainer/CacheHBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
custom_minimum_size = Vector2(30, 2.08165e-12)
|
||||||
|
layout_mode = 2
|
||||||
|
focus_mode = 0
|
||||||
|
action_mode = 0
|
||||||
|
text = "+1"
|
||||||
|
|
||||||
|
[node name="SelectServerButton" type="OptionButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
selected = 0
|
selected = 0
|
||||||
item_count = 5
|
item_count = 5
|
||||||
@@ -89,19 +139,23 @@ popup/item_3/id = 4
|
|||||||
popup/item_4/text = "http://localhost:8080"
|
popup/item_4/text = "http://localhost:8080"
|
||||||
popup/item_4/id = 5
|
popup/item_4/id = 5
|
||||||
|
|
||||||
[node name="FullscreenButton" type="CheckButton" parent="."]
|
[node name="FullscreenButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
text = "Fullscreen"
|
text = "Fullscreen"
|
||||||
|
|
||||||
[node name="QuickSyncButton" type="CheckButton" parent="."]
|
[node name="QuickSyncButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
button_pressed = true
|
button_pressed = true
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
text = "Quick sync"
|
text = "Quick sync"
|
||||||
|
|
||||||
[node name="LocalButton" type="CheckButton" parent="."]
|
[node name="LocalButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 0
|
size_flags_horizontal = 0
|
||||||
disabled = true
|
disabled = true
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ func get_song_title() -> String:
|
|||||||
return "??????"
|
return "??????"
|
||||||
|
|
||||||
func get_song_info() -> String:
|
func get_song_info() -> String:
|
||||||
if is_answered:
|
if Settings.is_debug:
|
||||||
|
var format_string: String = "%d. %s - %s | played: %s | answered: %s"
|
||||||
|
return format_string % [(song_number + 1), game_title, song_title, has_played, is_answered]
|
||||||
|
elif is_answered:
|
||||||
var format_string: String = "%d. %s - %s"
|
var format_string: String = "%d. %s - %s"
|
||||||
return format_string % [(song_number + 1), game_title, song_title]
|
return format_string % [(song_number + 1), game_title, song_title]
|
||||||
else:
|
else:
|
||||||
|
|||||||
99
playlist.gd
Normal file
99
playlist.gd
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
var song_object_array: Array[SongObject] = []
|
||||||
|
var latest_played_song: int = 0
|
||||||
|
var currently_playing_song: int = -1
|
||||||
|
|
||||||
|
var first_song_downloaded: bool = false
|
||||||
|
var first_song_played: bool = false
|
||||||
|
|
||||||
|
var number_of_tracks_to_preload: int = 1
|
||||||
|
var is_song_downloading: bool = false
|
||||||
|
|
||||||
|
func get_next_song() -> SongObject:
|
||||||
|
return song_object_array[latest_played_song]
|
||||||
|
|
||||||
|
func set_latest_played_song() -> void:
|
||||||
|
latest_played_song += 1
|
||||||
|
if latest_played_song > song_object_array.size() - 1:
|
||||||
|
latest_played_song = song_object_array.size() - 1
|
||||||
|
|
||||||
|
func update_last_played_song() -> void:
|
||||||
|
latest_played_song = song_object_array.size()
|
||||||
|
|
||||||
|
func get_preloaded_songs() -> int:
|
||||||
|
var number_of_tracks_preloaded: int = 0
|
||||||
|
for song: SongObject in song_object_array:
|
||||||
|
if !song.has_played:
|
||||||
|
number_of_tracks_preloaded += 1
|
||||||
|
return number_of_tracks_preloaded
|
||||||
|
|
||||||
|
func should_preload_more_songs() -> bool:
|
||||||
|
return number_of_tracks_to_preload > get_preloaded_songs()
|
||||||
|
|
||||||
|
func set_last_played_answered() -> void:
|
||||||
|
if song_object_array[latest_played_song].has_played && !song_object_array[latest_played_song].is_answered:
|
||||||
|
song_object_array[latest_played_song].is_answered = true
|
||||||
|
|
||||||
|
func song_is_answered(song_no: int = currently_playing_song) -> void:
|
||||||
|
print("show_answer_pressed song_object: ", song_object_array[song_no]._to_string())
|
||||||
|
song_object_array[song_no].is_answered = true
|
||||||
|
if Settings.add_to_stats:
|
||||||
|
print("add to stats: ", song_no)
|
||||||
|
Settings.make_put_request("/music/played?song="+str(song_no))
|
||||||
|
|
||||||
|
func add_to_playlist(new_song_object: SongObject) -> void:
|
||||||
|
song_object_array.append(new_song_object)
|
||||||
|
|
||||||
|
func get_playlist() -> Array[SongObject]:
|
||||||
|
if Settings.is_debug:
|
||||||
|
return song_object_array
|
||||||
|
else:
|
||||||
|
var temp_list: Array[SongObject] = []
|
||||||
|
for s: SongObject in song_object_array:
|
||||||
|
if s.has_played:
|
||||||
|
temp_list.append(s)
|
||||||
|
return temp_list
|
||||||
|
|
||||||
|
func reset_playlist() -> void:
|
||||||
|
currently_playing_song = -1
|
||||||
|
latest_played_song = 0
|
||||||
|
clear_song_list()
|
||||||
|
|
||||||
|
func clear_song_list() -> void:
|
||||||
|
song_object_array.clear()
|
||||||
|
|
||||||
|
func unset_is_playing() -> void:
|
||||||
|
for song_object: SongObject in song_object_array:
|
||||||
|
song_object.is_playing = false
|
||||||
|
|
||||||
|
func set_currently_playing_song(value: int) -> void:
|
||||||
|
currently_playing_song = value
|
||||||
|
|
||||||
|
func get_current_game_title() -> String:
|
||||||
|
return song_object_array[currently_playing_song].get_game_title()
|
||||||
|
|
||||||
|
func get_current_song_title() -> String:
|
||||||
|
return song_object_array[currently_playing_song].get_song_title()
|
||||||
|
|
||||||
|
func add_point(player_id: int) -> void:
|
||||||
|
song_object_array[currently_playing_song].add_point(player_id)
|
||||||
|
|
||||||
|
func remove_point(player_id: int) -> void:
|
||||||
|
song_object_array[currently_playing_song].remove_point(player_id)
|
||||||
|
|
||||||
|
func remove_player_from_list(player_to_remove: int) -> void:
|
||||||
|
for song_list_object: SongObject in song_object_array:
|
||||||
|
song_object_array[song_list_object.song_number].players_given_point.remove_at(song_object_array[song_list_object.song_number].players_given_point.find(player_to_remove))
|
||||||
|
|
||||||
|
func get_song(song_no: int) -> AudioStream:
|
||||||
|
return song_object_array[song_no].song
|
||||||
|
|
||||||
|
func add_song_to_song_object(song_no: int, sound: AudioStream) -> void:
|
||||||
|
song_object_array[song_no].song = sound
|
||||||
|
|
||||||
|
func song_has_played(song_no: int = latest_played_song) -> void:
|
||||||
|
song_object_array[song_no].has_played = true
|
||||||
|
|
||||||
|
func song_is_playing(song_no: int = latest_played_song) -> void:
|
||||||
|
song_object_array[song_no].is_playing = true
|
||||||
1
playlist.gd.uid
Normal file
1
playlist.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bgei7qocdnolw
|
||||||
@@ -12,12 +12,13 @@ config_version=5
|
|||||||
|
|
||||||
config/name="MusicPlayer"
|
config/name="MusicPlayer"
|
||||||
run/main_scene="res://MainWindow.tscn"
|
run/main_scene="res://MainWindow.tscn"
|
||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.5", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
Settings="*res://Settings.gd"
|
Settings="*res://Settings.gd"
|
||||||
|
Playlist="*res://playlist.gd"
|
||||||
|
|
||||||
[debug]
|
[debug]
|
||||||
|
|
||||||
|
|||||||
@@ -74,22 +74,20 @@ func _ready() -> void:
|
|||||||
func _input(event: InputEvent) -> void:
|
func _input(event: InputEvent) -> void:
|
||||||
if self.visible == true:
|
if self.visible == true:
|
||||||
if event is InputEventMouseButton && event.is_pressed():
|
if event is InputEventMouseButton && event.is_pressed():
|
||||||
print("Mouse Click/Unclick at: ", event.position)
|
var evLocal: InputEvent = make_input_local(event)
|
||||||
var evLocal = make_input_local(event)
|
|
||||||
if !Rect2(Vector2(0, 0), sync_panel.size).has_point(evLocal.position):
|
if !Rect2(Vector2(0, 0), sync_panel.size).has_point(evLocal.position):
|
||||||
self.visible = false
|
self.visible = false
|
||||||
print("CLOSING")
|
|
||||||
|
|
||||||
func start_sync() -> void:
|
func start_sync() -> void:
|
||||||
print("start_sync")
|
print("start_sync")
|
||||||
self.visible = true
|
self.visible = true
|
||||||
var sync_started: Callable = func sync_started() -> void:
|
var sync_request_sent: Callable = func sync_request_sent() -> void:
|
||||||
sync_timer.start(0.75)
|
sync_timer.start(0.75)
|
||||||
Settings.currently_syncing = true
|
Settings.currently_syncing = true
|
||||||
sync_started.emit()
|
sync_started.emit()
|
||||||
show_sync_progress()
|
show_sync_progress()
|
||||||
if !cool_down_ongoing && !Settings.currently_syncing:
|
if !cool_down_ongoing && !Settings.currently_syncing:
|
||||||
Settings.make_request2("/sync", sync_started, false)
|
Settings.make_request2("/sync", sync_request_sent, false)
|
||||||
|
|
||||||
func _on_cool_down_timeout() -> void:
|
func _on_cool_down_timeout() -> void:
|
||||||
print("_on_cool_down_timeout")
|
print("_on_cool_down_timeout")
|
||||||
|
|||||||
Reference in New Issue
Block a user