#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]
|
||||
|
||||
env:
|
||||
GODOT_VERSION: 4.4
|
||||
GODOT_VERSION: 4.5
|
||||
PROJECT_PATH: .
|
||||
#GAME_VERSION: 0.0.8
|
||||
#GAME_VERSION: ${{gitea.ref_name}}
|
||||
|
||||
@@ -10,7 +10,7 @@ on:
|
||||
- '*.*'
|
||||
|
||||
env:
|
||||
GODOT_VERSION: 4.4
|
||||
GODOT_VERSION: 4.5
|
||||
PROJECT_PATH: .
|
||||
PROJECT_NAME: MusicPlayer
|
||||
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
|
||||
|
||||
@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:
|
||||
|
||||
@@ -78,7 +78,7 @@ offset_bottom = 56.0
|
||||
|
||||
[node name="Title" type="Label" parent="."]
|
||||
texture_filter = 1
|
||||
layout_mode = 2
|
||||
layout_mode = 0
|
||||
offset_left = 64.0
|
||||
offset_top = 12.0
|
||||
offset_right = 369.0
|
||||
@@ -89,7 +89,7 @@ label_settings = SubResource("LabelSettings_ychxr")
|
||||
|
||||
[node name="Open" type="Button" parent="."]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
layout_mode = 0
|
||||
offset_left = 1296.0
|
||||
offset_top = 66.0
|
||||
offset_right = 1346.0
|
||||
@@ -315,6 +315,7 @@ offset_top = 944.0
|
||||
offset_right = 368.0
|
||||
offset_bottom = 975.0
|
||||
focus_mode = 0
|
||||
disabled = true
|
||||
action_mode = 0
|
||||
shortcut = SubResource("Shortcut_d6fml")
|
||||
text = "Randomize new track"
|
||||
@@ -376,12 +377,21 @@ offset_bottom = 96.0
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 1
|
||||
offset_left = 364.0
|
||||
offset_left = 401.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
|
||||
|
||||
[node name="StatisticsPopupPanel" type="PopupPanel" parent="."]
|
||||
oversampling_override = 1.0
|
||||
initial_position = 2
|
||||
size = Vector2i(450, 100)
|
||||
|
||||
@@ -405,6 +415,7 @@ horizontal_alignment = 1
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="AboutPopupPanel" type="PopupPanel" parent="."]
|
||||
oversampling_override = 1.0
|
||||
initial_position = 2
|
||||
size = Vector2i(848, 710)
|
||||
|
||||
@@ -465,16 +476,6 @@ Change some buttons to icons
|
||||
Add shortcuts"
|
||||
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="."]
|
||||
initial_position = 2
|
||||
size = Vector2i(600, 350)
|
||||
|
||||
@@ -168,7 +168,7 @@ func play_song_object(song_object_no: int) -> void:
|
||||
if audio_player.is_playing():
|
||||
audio_player.stop()
|
||||
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()
|
||||
audio_player.play()
|
||||
song_finished = false
|
||||
@@ -176,13 +176,13 @@ func play_song_object(song_object_no: int) -> void:
|
||||
stream = audio_player.stream
|
||||
progress_slider.max_value = round(stream.get_length())
|
||||
progress_slider.tick_count = round(stream.get_length() / 60)
|
||||
Settings.currently_playing_song = song_object_no
|
||||
Settings.unset_is_playing()
|
||||
Playlist.set_currently_playing_song(song_object_no)
|
||||
Playlist.unset_is_playing()
|
||||
if !Settings.hide_next_track:
|
||||
print("Show answer now!!")
|
||||
Settings.song_object_array[song_object_no].is_answered = true
|
||||
Settings.song_object_array[song_object_no].has_played = true
|
||||
Settings.song_object_array[song_object_no].is_playing = true
|
||||
Playlist.song_is_answered(song_object_no)
|
||||
Playlist.song_has_played(song_object_no)
|
||||
Playlist.song_is_playing(song_object_no)
|
||||
update_song_list.emit()
|
||||
|
||||
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_debug: bool = false
|
||||
|
||||
var stop_after_current: bool = true
|
||||
var auto_repeat_song: bool = false
|
||||
var hide_next_track: bool = true
|
||||
@@ -14,14 +16,9 @@ var add_to_stats: bool = true
|
||||
var use_low_played_mode: bool = false
|
||||
var winning_score: int = 20
|
||||
var fullscreen: bool = false
|
||||
var quick_sync: bool = true
|
||||
var number_of_tracks_to_preload: int = 1
|
||||
var play_local: bool = false
|
||||
|
||||
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 currently_syncing: bool = false
|
||||
|
||||
@@ -29,15 +26,16 @@ var version: String = "1.6.0"
|
||||
|
||||
var whats_new: String = "Changelog:
|
||||
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
|
||||
#6: Now show progress 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
|
||||
0.9.0-Beta: Fixed settings and updated the player view
|
||||
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.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"
|
||||
|
||||
var whats_left: String = "Things left to do:
|
||||
@@ -106,6 +104,21 @@ func make_request3(address: String) -> void:
|
||||
if request_error != OK:
|
||||
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:
|
||||
for n: Node in node.get_children():
|
||||
node.remove_child(n)
|
||||
@@ -122,7 +135,3 @@ func delete_player_children(node: Node) -> void:
|
||||
else:
|
||||
node.remove_child(n)
|
||||
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
|
||||
var stop_after_current_button := $StopAfterCurrentCheckButton
|
||||
var settings_panel: Panel = %SettingsPanel
|
||||
|
||||
@onready
|
||||
var hide_next_track_button := $HideNextTrackCheckButton
|
||||
var stop_after_current_button: CheckButton = %StopAfterCurrentCheckButton
|
||||
|
||||
@onready
|
||||
var add_to_database_button := $AddToDatabaseCheckButton
|
||||
var hide_next_track_button: CheckButton = %HideNextTrackCheckButton
|
||||
|
||||
@onready
|
||||
var low_played_button := $LowPlayedCheckButton
|
||||
var add_to_database_button: CheckButton = %AddToDatabaseCheckButton
|
||||
|
||||
@onready
|
||||
var score_label := $HBoxContainer/ScoreLabel
|
||||
var low_played_button: CheckButton = %LowPlayedCheckButton
|
||||
|
||||
@onready
|
||||
var lower_winning_score_button := $HBoxContainer/LowerButton
|
||||
var score_label: Label = %ScoreLabel
|
||||
|
||||
@onready
|
||||
var increase_winning_score_button := $HBoxContainer/IncreaseButton
|
||||
var lower_winning_score_button: Button = %LowerButton
|
||||
|
||||
@onready
|
||||
var select_server_button := $SelectServerButton
|
||||
var increase_winning_score_button: Button = %IncreaseButton
|
||||
|
||||
@onready
|
||||
var fullscreen_button := $FullscreenButton
|
||||
var cache_label: Label = %CacheLabel
|
||||
|
||||
@onready
|
||||
var quick_sync_button := $QuickSyncButton
|
||||
var lower_cache_button: Button = %LowerCacheButton
|
||||
|
||||
@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
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
func _ready() -> void:
|
||||
fullscreen_button.button_pressed = Settings.fullscreen
|
||||
select_server_button.selected = Settings.selected_server
|
||||
|
||||
@@ -46,9 +58,9 @@ func _ready():
|
||||
low_played_button.pressed.connect(low_played)
|
||||
lower_winning_score_button.pressed.connect(lower_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)
|
||||
quick_sync_button.pressed.connect(quick_sync)
|
||||
local_button.pressed.connect(local_play)
|
||||
|
||||
stop_after_current_button.button_pressed = Settings.stop_after_current
|
||||
@@ -56,11 +68,18 @@ func _ready():
|
||||
add_to_database_button.button_pressed = Settings.add_to_stats
|
||||
low_played_button.button_pressed = Settings.use_low_played_mode
|
||||
score_label.text = str(Settings.winning_score)
|
||||
cache_label.text = str(Playlist.number_of_tracks_to_preload)
|
||||
fullscreen_button.button_pressed = Settings.fullscreen
|
||||
quick_sync_button.button_pressed = Settings.quick_sync
|
||||
select_server_button.select(Settings.selected_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:
|
||||
Settings.fullscreen = !Settings.fullscreen
|
||||
if Settings.fullscreen == true:
|
||||
@@ -68,32 +87,39 @@ func fullscreen() -> void:
|
||||
if Settings.fullscreen == false:
|
||||
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
|
||||
|
||||
func stop_after_current():
|
||||
func stop_after_current() -> void:
|
||||
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
|
||||
|
||||
func add_to_database():
|
||||
func add_to_database() -> void:
|
||||
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
|
||||
|
||||
func lower_winning_score():
|
||||
func lower_winning_score() -> void:
|
||||
Settings.winning_score -= 1
|
||||
score_label.text = str(Settings.winning_score)
|
||||
|
||||
func increase_winning_score():
|
||||
func increase_winning_score() -> void:
|
||||
Settings.winning_score += 1
|
||||
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:
|
||||
Settings.default_path = select_server_button.get_item_text(new_server)
|
||||
Settings.selected_server = new_server
|
||||
|
||||
@@ -5,76 +5,126 @@
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_3xrlm"]
|
||||
font_size = 25
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer"]
|
||||
clip_contents = true
|
||||
[node name="SettingsControl" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
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
|
||||
size_flags_vertical = 0
|
||||
text = "Settings"
|
||||
label_settings = SubResource("LabelSettings_3xrlm")
|
||||
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
|
||||
size_flags_horizontal = 0
|
||||
button_pressed = true
|
||||
action_mode = 0
|
||||
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
|
||||
size_flags_horizontal = 0
|
||||
button_pressed = true
|
||||
action_mode = 0
|
||||
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
|
||||
size_flags_horizontal = 0
|
||||
action_mode = 0
|
||||
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
|
||||
size_flags_horizontal = 0
|
||||
action_mode = 0
|
||||
text = "Use low played mode"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Label2" type="Label" parent="HBoxContainer"]
|
||||
[node name="Label2" type="Label" parent="SettingsPanel/ScrollContainer/VBoxContainer/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
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
|
||||
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)
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
action_mode = 0
|
||||
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)
|
||||
layout_mode = 2
|
||||
focus_mode = 0
|
||||
action_mode = 0
|
||||
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
|
||||
selected = 0
|
||||
item_count = 5
|
||||
@@ -89,19 +139,23 @@ popup/item_3/id = 4
|
||||
popup/item_4/text = "http://localhost:8080"
|
||||
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
|
||||
size_flags_horizontal = 0
|
||||
text = "Fullscreen"
|
||||
|
||||
[node name="QuickSyncButton" type="CheckButton" parent="."]
|
||||
[node name="QuickSyncButton" type="CheckButton" parent="SettingsPanel/ScrollContainer/VBoxContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 0
|
||||
button_pressed = true
|
||||
action_mode = 0
|
||||
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
|
||||
size_flags_horizontal = 0
|
||||
disabled = true
|
||||
|
||||
@@ -31,7 +31,10 @@ func get_song_title() -> String:
|
||||
return "??????"
|
||||
|
||||
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"
|
||||
return format_string % [(song_number + 1), game_title, song_title]
|
||||
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"
|
||||
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"
|
||||
|
||||
[autoload]
|
||||
|
||||
Settings="*res://Settings.gd"
|
||||
Playlist="*res://playlist.gd"
|
||||
|
||||
[debug]
|
||||
|
||||
|
||||
@@ -74,22 +74,20 @@ func _ready() -> void:
|
||||
func _input(event: InputEvent) -> void:
|
||||
if self.visible == true:
|
||||
if event is InputEventMouseButton && event.is_pressed():
|
||||
print("Mouse Click/Unclick at: ", event.position)
|
||||
var evLocal = make_input_local(event)
|
||||
var evLocal: InputEvent = make_input_local(event)
|
||||
if !Rect2(Vector2(0, 0), sync_panel.size).has_point(evLocal.position):
|
||||
self.visible = false
|
||||
print("CLOSING")
|
||||
|
||||
func start_sync() -> void:
|
||||
print("start_sync")
|
||||
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)
|
||||
Settings.currently_syncing = true
|
||||
sync_started.emit()
|
||||
show_sync_progress()
|
||||
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:
|
||||
print("_on_cool_down_timeout")
|
||||
|
||||
Reference in New Issue
Block a user