diff --git a/InsperationScrollContainer.gd b/InsperationScrollContainer.gd index 3e4368a..9de741b 100644 --- a/InsperationScrollContainer.gd +++ b/InsperationScrollContainer.gd @@ -1,17 +1,17 @@ extends ScrollContainer -var SCROLL = 0 -var delay = 0.02 #seconds -var wait = 0 +var SCROLL: float = 0 +var delay: float = 0.02 #seconds +var wait: float = 0 var SPEED: int = 1 # Called when the node enters the scene tree for the first time. -func _ready(): +func _ready() -> void: wait = delay # Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): +func _process(delta: float) -> void: wait -= delta if wait < 0: wait = delay @@ -28,9 +28,9 @@ func _process(delta): else: scroll_to_bottom() -func scroll_back_up(): +func scroll_back_up() -> void: SCROLL = -1 -func scroll_to_bottom(): +func scroll_to_bottom() -> void: scroll_vertical = 0 #Reset to top first. SCROLL = 1 diff --git a/Log.tscn b/Log.tscn new file mode 100644 index 0000000..8d0d540 --- /dev/null +++ b/Log.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=2 format=3 uid="uid://bijh5h5yrivm3"] + +[ext_resource type="Script" uid="uid://cw41y87l64qo7" path="res://log.gd" id="1_q72ua"] + +[node name="Control" type="Control"] +custom_minimum_size = Vector2(700, 700) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_q72ua") + +[node name="LogPanel" type="Panel" parent="."] +unique_name_in_owner = true +visibility_layer = 513 +custom_minimum_size = Vector2(700, 700) +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="LogScrollContainer" type="ScrollContainer" parent="LogPanel"] +custom_minimum_size = Vector2(700, 700) +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="LogVBoxContainer" type="VBoxContainer" parent="LogPanel/LogScrollContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(700, 700) +layout_mode = 2 +theme_override_constants/separation = 1 diff --git a/MainWindow.gd b/MainWindow.gd index 6b7b828..abbcff8 100644 --- a/MainWindow.gd +++ b/MainWindow.gd @@ -130,6 +130,9 @@ var auto_repeat_song_button: CheckButton = $RepeatSongCheckButton @onready var music_player_container: PanelContainer = $MusicPlayer +@onready +var log: Control = %Log + @onready var debug_label: Label = $DebugLabel @@ -205,10 +208,13 @@ func _input(event: InputEvent) -> void: if event.alt_pressed && event.keycode == KEY_ENTER: print("Alt + Enter pressed") Settings.fullscreen = !Settings.fullscreen + settings_window.fullscreen_button.button_pressed = Settings.fullscreen if Settings.fullscreen == true: DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) if Settings.fullscreen == false: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) + if event.alt_pressed && event.keycode == KEY_L: + log.visible = !log.visible func server_updated() -> void: print("server_updated") @@ -412,16 +418,17 @@ func add_players() -> void: func add_player() -> void: print("add_player") - var new_player_object: PlayerObject = PlayerObject.new(new_player_name_field.text, Settings.player_array.size()) - new_player_name_field.text = "" - Settings.player_array.append(new_player_object) - new_player_object.connect("first_point_triggerd", music_player_container._on_point_triggered.bind("first")) - new_player_object.connect("match_point_triggerd", music_player_container._on_point_triggered.bind("match")) - new_player_object.connect("winner_triggerd", _on_player_won.bind(new_player_object.id)) - new_player_object.connect("point_given_sound", _on_make_point_given_sound) - new_player_object.connect("player_point_given", _on_point_given.bind(new_player_object.id)) - new_player_object.connect("player_point_taken", _on_point_taken.bind(new_player_object.id)) - load_players() + if new_player_name_field.text != "": + var new_player_object: PlayerObject = PlayerObject.new(new_player_name_field.text, Settings.player_array.size()) + new_player_name_field.text = "" + Settings.player_array.append(new_player_object) + new_player_object.connect("first_point_triggerd", music_player_container._on_point_triggered.bind("first")) + new_player_object.connect("match_point_triggerd", music_player_container._on_point_triggered.bind("match")) + new_player_object.connect("winner_triggerd", _on_player_won.bind(new_player_object.id)) + new_player_object.connect("point_given_sound", _on_make_point_given_sound) + new_player_object.connect("player_point_given", _on_point_given.bind(new_player_object.id)) + new_player_object.connect("player_point_taken", _on_point_taken.bind(new_player_object.id)) + load_players() func load_players() -> void: print("load_players") @@ -441,6 +448,7 @@ func load_players() -> void: func _on_point_given(player_given_point: int) -> void: print("_on_point_given") + log.add_log_row(Settings.player_array[player_given_point].player_name + " got a point") if Playlist.currently_playing_song >= 0: Playlist.add_point(player_given_point) update_song_list() @@ -450,6 +458,7 @@ func _on_make_point_given_sound() -> void: func _on_point_taken(player_taken_point: int) -> void: print("_on_point_taken") + log.add_log_row(Settings.player_array[player_taken_point].player_name + " lost a point") music_player_container.play_sound_effect(preload("res://sounds/itemequip.wav")) if Playlist.currently_playing_song >= 0: Playlist.remove_point(player_taken_point) @@ -464,6 +473,7 @@ func _on_player_won(winning_player_id: int) -> void: winner_picture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED winner_picture.texture = Settings.player_array[winning_player_id].character music_player_container.play_sound(preload("res://sounds/winning.mp3")) + Settings.add_to_stats = false func _on_player_removed(player_to_remove: int) -> void: print("_on_player_removed ", player_to_remove) diff --git a/MainWindow.tscn b/MainWindow.tscn index 03c857e..4c24c74 100644 --- a/MainWindow.tscn +++ b/MainWindow.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=3 uid="uid://xwq863o6uvsu"] +[gd_scene load_steps=29 format=3 uid="uid://xwq863o6uvsu"] [ext_resource type="Script" uid="uid://b8f4g15cas2j2" path="res://MainWindow.gd" id="1_eu0t5"] [ext_resource type="PackedScene" uid="uid://b16on0oscg1bv" path="res://CharacterSelect.tscn" id="2_76kf4"] @@ -13,6 +13,7 @@ [ext_resource type="PackedScene" uid="uid://dpdem7pdxweb5" path="res://SyncWindow.tscn" id="10_yxw0b"] [ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="11_1qef0"] [ext_resource type="PackedScene" uid="uid://dldpeo5y3l5hq" path="res://SettingsWindow.tscn" id="11_k62u5"] +[ext_resource type="PackedScene" uid="uid://bijh5h5yrivm3" path="res://Log.tscn" id="14_26rwn"] [sub_resource type="LabelSettings" id="LabelSettings_ychxr"] font_size = 25 @@ -548,4 +549,13 @@ horizontal_alignment = 1 vertical_alignment = 1 autowrap_mode = 2 +[node name="Log" parent="." instance=ExtResource("14_26rwn")] +unique_name_in_owner = true +visible = false +layout_mode = 1 +offset_left = 562.0 +offset_top = 132.0 +offset_right = 1262.0 +offset_bottom = 832.0 + [connection signal="dir_selected" from="FileDialog" to="." method="_on_file_dialog_dir_selected"] diff --git a/MusicPlayer.tscn b/MusicPlayer.tscn index a0d5524..94955e7 100644 --- a/MusicPlayer.tscn +++ b/MusicPlayer.tscn @@ -86,7 +86,7 @@ scrollable = false [node name="MusicTimeLabel" type="Label" parent="MusicPlayerContainer"] layout_mode = 2 -text = "1:00 / 3:00" +text = "0:00 / 0:00" [node name="VolumeSlider" parent="MusicPlayerContainer" instance=ExtResource("5_iifuj")] custom_minimum_size = Vector2(100, 0) diff --git a/Player.tscn b/Player.tscn index a8c6dc1..97cc18a 100644 --- a/Player.tscn +++ b/Player.tscn @@ -42,7 +42,7 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_821k2") custom_minimum_size = Vector2(130, 40) layout_mode = 2 size_flags_vertical = 1 -text = "Sansansans: 100" +text = ": 0" vertical_alignment = 1 [node name="Panel3" type="Panel" parent="HBoxContainer"] diff --git a/SearchWindow.gd b/SearchWindow.gd index 338d778..3fa96e2 100644 --- a/SearchWindow.gd +++ b/SearchWindow.gd @@ -16,6 +16,7 @@ var close_button: Button = $CloseButton var search_bar: TextEdit = $Searchbar var games: Array = [] +var regex: RegEx # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -24,6 +25,7 @@ func _ready() -> void: search_bar.grab_focus() search_bar.text_changed.connect(search) visibility_changed.connect(focus) + regex = RegEx.new() func focus() -> void: if self.visible == true: @@ -37,21 +39,25 @@ func close() -> void: func search() -> void: print(search_bar.text) Settings.delete_children(search_list) + var search_text: String = search_bar.text.to_lower() for game: String in games: - if is_match_exact(search_bar.text, game): + if is_match_exact(search_text, game): + add_game(game) + var clean_search_text: String = clean_search_term(search_text) + for game: String in games: + if is_match_contains(clean_search_text, clean_game(game)): add_game(game) for game: String in games: - if is_match_contains(clean_term(search_bar.text), clean_term(game)): - add_game(game) - for game: String in games: - if is_match_regex(clean_term(search_bar.text), clean_term(game)): + if is_match_regex(clean_search_text, clean_game(game)): add_game(game) -func clean_term(term: String) -> String: +func clean_search_term(term: String) -> String: + return term.replace(" ", "").replace("é", "e").replace("+", "plus").replace("&", "and").replace("'n", "and") + +func clean_game(term: String) -> String: return term.replace(" ", "").replace("é", "e").replace("+", "plus").replace("&", "and").replace("'n", "and").to_lower() func is_match_exact(search_term: String, game_name: String) -> bool: - search_term = search_term.to_lower() game_name = game_name.to_lower() if search_term == "": @@ -78,7 +84,7 @@ func is_match_regex(search_term: String, game_name: String) -> bool: return false func add_game(game: String) -> void: - var label := Label.new() + var label: Label = Label.new() label.text = game print("game: " + game) label.autowrap_mode = TextServer.AUTOWRAP_WORD @@ -93,22 +99,21 @@ func check_if_game_exists(game: String) -> bool: return game_exists func compile_regex(search_term: String) -> RegEx: - var regex = RegEx.new() var regText: String = ".*" - for letter in search_term: + for letter: String in search_term: regText += letter + ".*" regex.compile(regText) return regex func get_list_of_games() -> void: print("get_list_of_games") - var handle_games: Callable = func handle_games(array) -> void: + var handle_games: Callable = func handle_games(array: Array) -> void: if typeof(array) == TYPE_ARRAY: games = [] Settings.delete_children(search_list) games.append_array(array) - for game in games: - var label := Label.new() + for game: String in games: + var label: Label = Label.new() label.text = game label.autowrap_mode = TextServer.AUTOWRAP_WORD search_list.add_child(label) @@ -128,3 +133,46 @@ func clear() -> void: search() search_bar.grab_focus() +func old_search() -> void: + print(search_bar.text) + Settings.delete_children(search_list) + for game: String in games: + if old_is_match_exact(search_bar.text, game): + add_game(game) + for game: String in games: + if is_match_contains(clean_term(search_bar.text), clean_term(game)): + add_game(game) + for game: String in games: + if old_is_match_regex(clean_term(search_bar.text), clean_term(game)): + add_game(game) + +func clean_term(term: String) -> String: + return term.replace(" ", "").replace("é", "e").replace("+", "plus").replace("&", "and").replace("'n", "and").to_lower() + + +func old_is_match_exact(search_term: String, game_name: String) -> bool: + search_term = search_term.to_lower() + game_name = game_name.to_lower() + + if search_term == "": + return true + elif game_name.contains(search_term): + return true + else: + return false + +func old_is_match_regex(search_term: String, game_name: String) -> bool: + if search_term == "": + return true + elif compile_regex(search_term).search(game_name): + return true + else: + return false + +func old_compile_regex(search_term: String) -> RegEx: + var regex = RegEx.new() + var regText: String = ".*" + for letter in search_term: + regText += letter + ".*" + regex.compile(regText) + return regex diff --git a/Settings.gd b/Settings.gd index 2e3ff7f..77869fd 100644 --- a/Settings.gd +++ b/Settings.gd @@ -23,9 +23,15 @@ var edit_players: bool = false var currently_syncing: bool = false var character_select_open: bool = false -var version: String = "1.6.1" +var version: String = "1.7.0" var whats_new: String = "Changelog: +1.7.0: + #22: Now block add player if player name is empty + #23: Add a log for when points are given to players + #25: Fixed some graphical stuff + #26: Changed so the same character can be on a song multiple times + #27: Turning off statistics after win 1.6.1: #17: Removed Debug text in release #18: Fixed bug with new character select screen diff --git a/SongObject.gd b/SongObject.gd index ca477a2..f1d80e8 100644 --- a/SongObject.gd +++ b/SongObject.gd @@ -42,8 +42,7 @@ func get_song_info() -> String: func add_point(id: int) -> void: print("add_point") - if !players_given_point.has(id): - players_given_point.append(id) + players_given_point.append(id) players_given_point.sort() func remove_point(id: int) -> void: diff --git a/log.gd b/log.gd new file mode 100644 index 0000000..8f374b7 --- /dev/null +++ b/log.gd @@ -0,0 +1,29 @@ +extends Control + +@onready +var log_panel: Panel = %LogPanel + +@onready +var log_box: VBoxContainer = %LogVBoxContainer + +var log_rows: Array + +func add_log_row(text: String) -> void: + var log_row: String = get_time() + text + log_rows.append(log_row) + update_log() + +func update_log() -> void: + print("update_log") + Settings.delete_children(log_box) + for row: String in log_rows: + var log_label: Label = Label.new() + log_label.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST) + log_label.add_theme_font_size_override("font_size", 20) + log_label.text = row + log_label.autowrap_mode = TextServer.AUTOWRAP_WORD + log_box.add_child(log_label) + +func get_time() -> String: + var dateTime: Dictionary = Time.get_datetime_dict_from_system() + return "" + str(dateTime.hour) + ":" + str(dateTime.minute) + ":" + str(dateTime.second) + " " diff --git a/log.gd.uid b/log.gd.uid new file mode 100644 index 0000000..d00356c --- /dev/null +++ b/log.gd.uid @@ -0,0 +1 @@ +uid://cw41y87l64qo7