#22: Now block add player if player name is empty
All checks were successful
Build / build (push) Successful in 1m21s

#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
This commit is contained in:
2025-11-15 14:53:51 +01:00
parent c6ed3c8e53
commit bae5831a3e
11 changed files with 173 additions and 37 deletions

View File

@@ -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

33
Log.tscn Normal file
View File

@@ -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

View File

@@ -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)
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)

View File

@@ -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"]

View File

@@ -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)

View File

@@ -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"]

View File

@@ -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

View File

@@ -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

View File

@@ -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:

29
log.gd Normal file
View File

@@ -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) + " "

1
log.gd.uid Normal file
View File

@@ -0,0 +1 @@
uid://cw41y87l64qo7