Rework popups and fix blurry text and player list layout
Popups: - All nine popups now extend a shared PopupWindow class with open(), close() and toggle(), instead of each copying its own close-on-click code. Popups that need cleanup override close(). - A click outside a popup closed it and also pressed whatever was underneath, e.g. Reset playlist. The closing click is now consumed. - Popups used Godot's see-through default panel, so the song list and titles showed through. They now use an opaque popup theme, and a backdrop dims the window behind them. - The main window root now fills the screen, so the backdrop covers it. Text and images: - Many labels and buttons forced nearest filtering, which made text and icons jagged when the window is not 1920x1080. They now use the default smooth filtering. Only the pixel-art "no character" picture keeps nearest filtering when the winner window enlarges it. Player list: - A long player name pushed that row's character and buttons to the right. Names now take the free space and shorten with an ellipsis, so all rows line up and use the full width of the panel.
This commit is contained in:
1 parent
6288739de0
commit
c7d49bc5cc
27 files changed
+304
-149
No files matched your search
+3
-15
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var about_panel: Panel = %AboutPanel
|
var about_panel: Panel = %AboutPanel
|
||||||
@@ -51,16 +51,8 @@ const WHATS_NEW: Dictionary = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
func open() -> void:
|
||||||
if self.visible == true:
|
super()
|
||||||
if event is InputEventMouseButton && event.is_pressed():
|
|
||||||
var evLocal: InputEvent = make_input_local(event)
|
|
||||||
if !Rect2(Vector2(0, 0), about_panel.size).has_point(evLocal.position):
|
|
||||||
self.visible = false
|
|
||||||
|
|
||||||
|
|
||||||
func show_window() -> void:
|
|
||||||
visible = true
|
|
||||||
version_label.text = Settings.version
|
version_label.text = Settings.version
|
||||||
|
|
||||||
# Build changelog text with version headers
|
# Build changelog text with version headers
|
||||||
@@ -70,7 +62,3 @@ func show_window() -> void:
|
|||||||
changelog_text += WHATS_NEW[version] + "\n"
|
changelog_text += WHATS_NEW[version] + "\n"
|
||||||
|
|
||||||
whats_new_label.text = changelog_text
|
whats_new_label.text = changelog_text
|
||||||
|
|
||||||
|
|
||||||
func hide_window() -> void:
|
|
||||||
visible = false
|
|
||||||
+4
-5
@@ -1,8 +1,10 @@
|
|||||||
[gd_scene format=3 uid="uid://cp54idaudb8dp"]
|
[gd_scene format=3 uid="uid://cp54idaudb8dp"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://b7bh0of7olbcb" path="res://AboutWindow.gd" id="1_about_script"]
|
[ext_resource type="Script" uid="uid://b7bh0of7olbcb" path="res://AboutWindow.gd" id="1_about_script"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[node name="AboutControl" type="Control" unique_id=1626010355]
|
[node name="AboutControl" type="Control" unique_id=1626010355 node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -10,6 +12,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_about_script")
|
script = ExtResource("1_about_script")
|
||||||
|
panel = NodePath("AboutPanel")
|
||||||
|
|
||||||
[node name="AboutPanel" type="Panel" parent="." unique_id=1907299275]
|
[node name="AboutPanel" type="Panel" parent="." unique_id=1907299275]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -18,7 +21,6 @@ offset_right = 600.0
|
|||||||
offset_bottom = 640.0
|
offset_bottom = 640.0
|
||||||
|
|
||||||
[node name="TitleLabel" type="Label" parent="AboutPanel" unique_id=200295721]
|
[node name="TitleLabel" type="Label" parent="AboutPanel" unique_id=200295721]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_right = 600.0
|
offset_right = 600.0
|
||||||
offset_bottom = 50.0
|
offset_bottom = 50.0
|
||||||
@@ -40,13 +42,11 @@ size_flags_vertical = 3
|
|||||||
|
|
||||||
[node name="VersionLabel" type="Label" parent="AboutPanel/ScrollContainer/ContentVBox" unique_id=352884126]
|
[node name="VersionLabel" type="Label" parent="AboutPanel/ScrollContainer/ContentVBox" unique_id=352884126]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="DescriptionLabel" type="Label" parent="AboutPanel/ScrollContainer/ContentVBox" unique_id=543094263]
|
[node name="DescriptionLabel" type="Label" parent="AboutPanel/ScrollContainer/ContentVBox" unique_id=543094263]
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(560, 0)
|
custom_minimum_size = Vector2(560, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -56,7 +56,6 @@ autowrap_mode = 2
|
|||||||
|
|
||||||
[node name="WhatsNewLabel" type="Label" parent="AboutPanel/ScrollContainer/ContentVBox" unique_id=1363040291]
|
[node name="WhatsNewLabel" type="Label" parent="AboutPanel/ScrollContainer/ContentVBox" unique_id=1363040291]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(560, 0)
|
custom_minimum_size = Vector2(560, 0)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://bijh5h5yrivm3"]
|
[gd_scene load_steps=2 format=3 uid="uid://bijh5h5yrivm3"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cw41y87l64qo7" path="res://log.gd" id="1_q72ua"]
|
[ext_resource type="Script" uid="uid://cw41y87l64qo7" path="res://log.gd" id="1_q72ua"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[node name="Control" type="Control"]
|
[node name="Control" type="Control" node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
custom_minimum_size = Vector2(700, 700)
|
custom_minimum_size = Vector2(700, 700)
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
@@ -11,6 +13,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_q72ua")
|
script = ExtResource("1_q72ua")
|
||||||
|
panel = NodePath("LogPanel")
|
||||||
|
|
||||||
[node name="LogPanel" type="Panel" parent="."]
|
[node name="LogPanel" type="Panel" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
+33
-11
@@ -140,11 +140,15 @@ var current_player: Node
|
|||||||
## True while statistics are off because a player won, until points are reset.
|
## True while statistics are off because a player won, until points are reset.
|
||||||
var stats_paused_by_win: bool = false
|
var stats_paused_by_win: bool = false
|
||||||
|
|
||||||
|
## Dims the window behind an open popup and keeps clicks from reaching the buttons under it.
|
||||||
|
var popup_backdrop: ColorRect
|
||||||
|
|
||||||
## Seconds to wait before retrying a song download step that failed.
|
## Seconds to wait before retrying a song download step that failed.
|
||||||
var song_fetch_retry_seconds: float = 5.0
|
var song_fetch_retry_seconds: float = 5.0
|
||||||
|
|
||||||
# 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:
|
||||||
|
_setup_popup_backdrop()
|
||||||
var 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 debug:
|
if debug:
|
||||||
@@ -214,9 +218,9 @@ func _input(event: InputEvent) -> void:
|
|||||||
if Settings.fullscreen == false:
|
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_K:
|
if event.alt_pressed && event.keycode == KEY_K:
|
||||||
shortcuts_window.visible = !shortcuts_window.visible
|
shortcuts_window.toggle()
|
||||||
if event.alt_pressed && event.keycode == KEY_L:
|
if event.alt_pressed && event.keycode == KEY_L:
|
||||||
log_window.visible = !log_window.visible
|
log_window.toggle()
|
||||||
|
|
||||||
func server_updated() -> void:
|
func server_updated() -> void:
|
||||||
print("server_updated")
|
print("server_updated")
|
||||||
@@ -277,6 +281,28 @@ func play_next_song() -> void:
|
|||||||
#"/music/rand"
|
#"/music/rand"
|
||||||
#"/music/addQue"
|
#"/music/addQue"
|
||||||
#"/music/info"
|
#"/music/info"
|
||||||
|
func _popups() -> Array[PopupWindow]:
|
||||||
|
return [search_view, sync_window, settings_window, qr_window, new_character_select,
|
||||||
|
shortcuts_window, about_window, winner_window, log_window]
|
||||||
|
|
||||||
|
# The backdrop sits above the main window and below every popup. Popups close
|
||||||
|
# themselves when clicked outside, and the backdrop keeps that click from reaching
|
||||||
|
# the buttons behind them.
|
||||||
|
func _setup_popup_backdrop() -> void:
|
||||||
|
popup_backdrop = ColorRect.new()
|
||||||
|
popup_backdrop.name = "PopupBackdrop"
|
||||||
|
popup_backdrop.color = Color(0, 0, 0, 0.55)
|
||||||
|
popup_backdrop.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||||
|
add_child(popup_backdrop)
|
||||||
|
popup_backdrop.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||||
|
for popup: PopupWindow in _popups():
|
||||||
|
move_child(popup, -1)
|
||||||
|
popup.visibility_changed.connect(_update_popup_backdrop)
|
||||||
|
_update_popup_backdrop()
|
||||||
|
|
||||||
|
func _update_popup_backdrop() -> void:
|
||||||
|
popup_backdrop.visible = _popups().any(func(popup: PopupWindow) -> bool: return popup.visible)
|
||||||
|
|
||||||
# The cache size can be changed in the settings. Waiting until the settings are closed
|
# The cache size can be changed in the settings. Waiting until the settings are closed
|
||||||
# avoids starting downloads while the user is still clicking the number up and down.
|
# avoids starting downloads while the user is still clicking the number up and down.
|
||||||
func _on_settings_window_visibility_changed() -> void:
|
func _on_settings_window_visibility_changed() -> void:
|
||||||
@@ -374,19 +400,19 @@ func reset_points() -> void:
|
|||||||
|
|
||||||
func show_about() -> void:
|
func show_about() -> void:
|
||||||
print("show_about")
|
print("show_about")
|
||||||
about_window.show_window()
|
about_window.open()
|
||||||
|
|
||||||
func show_shortcuts() -> void:
|
func show_shortcuts() -> void:
|
||||||
print("show_shortcuts")
|
print("show_shortcuts")
|
||||||
shortcuts_window.visible = true
|
shortcuts_window.open()
|
||||||
|
|
||||||
func show_settings() -> void:
|
func show_settings() -> void:
|
||||||
print("show_settings")
|
print("show_settings")
|
||||||
settings_window.visible = true
|
settings_window.open()
|
||||||
|
|
||||||
func show_qr() -> void:
|
func show_qr() -> void:
|
||||||
print("show_qr")
|
print("show_qr")
|
||||||
qr_window.show_window()
|
qr_window.open()
|
||||||
|
|
||||||
func get_statistics() -> void:
|
func get_statistics() -> void:
|
||||||
print("get_statistics")
|
print("get_statistics")
|
||||||
@@ -422,7 +448,6 @@ func get_suggestion_list() -> void:
|
|||||||
soundtracks.append_array(array)
|
soundtracks.append_array(array)
|
||||||
for soundtrack: String in soundtracks:
|
for soundtrack: String in soundtracks:
|
||||||
var inspiration_label: Label = Label.new()
|
var inspiration_label: Label = Label.new()
|
||||||
inspiration_label.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST)
|
|
||||||
inspiration_label.add_theme_font_size_override("font_size", 20)
|
inspiration_label.add_theme_font_size_override("font_size", 20)
|
||||||
inspiration_label.text = soundtrack
|
inspiration_label.text = soundtrack
|
||||||
inspiration_label.autowrap_mode = TextServer.AUTOWRAP_WORD
|
inspiration_label.autowrap_mode = TextServer.AUTOWRAP_WORD
|
||||||
@@ -514,10 +539,7 @@ func _on_new_character_selected(character_texture: ImageTexture) -> void:
|
|||||||
|
|
||||||
func show_search() -> void:
|
func show_search() -> void:
|
||||||
print("show_search")
|
print("show_search")
|
||||||
if search_view.visible == false:
|
search_view.toggle()
|
||||||
search_view.visible = true
|
|
||||||
else:
|
|
||||||
search_view.visible = false
|
|
||||||
|
|
||||||
|
|
||||||
###Local
|
###Local
|
||||||
|
|||||||
+9
-24
@@ -16,6 +16,7 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://btupbowehiyyu" path="res://QRWindow.tscn" id="15_qr_window"]
|
[ext_resource type="PackedScene" uid="uid://btupbowehiyyu" path="res://QRWindow.tscn" id="15_qr_window"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cp54idaudb8dp" path="res://AboutWindow.tscn" id="16_about_window"]
|
[ext_resource type="PackedScene" uid="uid://cp54idaudb8dp" path="res://AboutWindow.tscn" id="16_about_window"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cxlsmxnrp0agh" path="res://WinnerWindow.tscn" id="17_winner_window"]
|
[ext_resource type="PackedScene" uid="uid://cxlsmxnrp0agh" path="res://WinnerWindow.tscn" id="17_winner_window"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_ychxr"]
|
[sub_resource type="LabelSettings" id="LabelSettings_ychxr"]
|
||||||
font_size = 25
|
font_size = 25
|
||||||
@@ -69,7 +70,11 @@ events = [SubResource("InputEventKey_ujjlu")]
|
|||||||
|
|
||||||
[node name="Control" type="Control" unique_id=407149696]
|
[node name="Control" type="Control" unique_id=407149696]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 0
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
script = ExtResource("1_eu0t5")
|
script = ExtResource("1_eu0t5")
|
||||||
|
|
||||||
[node name="TopPanelContainer" type="PanelContainer" parent="." unique_id=663404711]
|
[node name="TopPanelContainer" type="PanelContainer" parent="." unique_id=663404711]
|
||||||
@@ -78,7 +83,6 @@ offset_right = 1920.0
|
|||||||
offset_bottom = 56.0
|
offset_bottom = 56.0
|
||||||
|
|
||||||
[node name="Title" type="Label" parent="." unique_id=1187907861]
|
[node name="Title" type="Label" parent="." unique_id=1187907861]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 64.0
|
offset_left = 64.0
|
||||||
offset_top = 12.0
|
offset_top = 12.0
|
||||||
@@ -120,14 +124,12 @@ follow_focus = true
|
|||||||
script = ExtResource("7_dj026")
|
script = ExtResource("7_dj026")
|
||||||
|
|
||||||
[node name="MusicList" type="VBoxContainer" parent="MusicListPanel/ScrollContainer" unique_id=373398568]
|
[node name="MusicList" type="VBoxContainer" parent="MusicListPanel/ScrollContainer" unique_id=373398568]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
theme_override_constants/separation = 10
|
theme_override_constants/separation = 10
|
||||||
|
|
||||||
[node name="ScrollContainer" type="ScrollContainer" parent="." unique_id=498283761]
|
[node name="ScrollContainer" type="ScrollContainer" parent="." unique_id=498283761]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1216.0
|
offset_left = 1216.0
|
||||||
offset_top = 128.0
|
offset_top = 128.0
|
||||||
@@ -138,7 +140,6 @@ vertical_scroll_mode = 3
|
|||||||
script = ExtResource("2_gxtxm")
|
script = ExtResource("2_gxtxm")
|
||||||
|
|
||||||
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer" unique_id=1215162949]
|
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer" unique_id=1215162949]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 3
|
size_flags_vertical = 3
|
||||||
@@ -151,7 +152,6 @@ offset_right = 1152.0
|
|||||||
offset_bottom = 384.0
|
offset_bottom = 384.0
|
||||||
|
|
||||||
[node name="SoundtrackLabel" type="Label" parent="VBoxContainer" unique_id=173147793]
|
[node name="SoundtrackLabel" type="Label" parent="VBoxContainer" unique_id=173147793]
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(1, 1)
|
custom_minimum_size = Vector2(1, 1)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
label_settings = SubResource("LabelSettings_qspbu")
|
label_settings = SubResource("LabelSettings_qspbu")
|
||||||
@@ -159,7 +159,6 @@ horizontal_alignment = 1
|
|||||||
autowrap_mode = 2
|
autowrap_mode = 2
|
||||||
|
|
||||||
[node name="SongLabel" type="Label" parent="VBoxContainer" unique_id=1687490027]
|
[node name="SongLabel" type="Label" parent="VBoxContainer" unique_id=1687490027]
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(1, 1)
|
custom_minimum_size = Vector2(1, 1)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
label_settings = SubResource("LabelSettings_3m52w")
|
label_settings = SubResource("LabelSettings_3m52w")
|
||||||
@@ -195,7 +194,6 @@ custom_minimum_size = Vector2(2.08165e-12, 40)
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="Players/VBoxContainer/HBoxContainer" unique_id=1331357386]
|
[node name="Label" type="Label" parent="Players/VBoxContainer/HBoxContainer" unique_id=1331357386]
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(2.08165e-12, 40)
|
custom_minimum_size = Vector2(2.08165e-12, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
@@ -205,7 +203,6 @@ horizontal_alignment = 1
|
|||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="AddPlayersButton" type="TextureButton" parent="Players/VBoxContainer/HBoxContainer" unique_id=634410148]
|
[node name="AddPlayersButton" type="TextureButton" parent="Players/VBoxContainer/HBoxContainer" unique_id=634410148]
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(2.08165e-12, 40)
|
custom_minimum_size = Vector2(2.08165e-12, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 8
|
size_flags_horizontal = 8
|
||||||
@@ -232,7 +229,6 @@ placeholder_text = "Player name"
|
|||||||
script = ExtResource("7_qsdfy")
|
script = ExtResource("7_qsdfy")
|
||||||
|
|
||||||
[node name="AddPlayerButton" type="Button" parent="Players/VBoxContainer/AddPlayerContainer" unique_id=245001313]
|
[node name="AddPlayerButton" type="Button" parent="Players/VBoxContainer/AddPlayerContainer" unique_id=245001313]
|
||||||
texture_filter = 1
|
|
||||||
custom_minimum_size = Vector2(2.08165e-12, 40)
|
custom_minimum_size = Vector2(2.08165e-12, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "Add"
|
text = "Add"
|
||||||
@@ -246,13 +242,14 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_k1ygi")
|
|||||||
[node name="ScrollContainer" type="ScrollContainer" parent="Players/VBoxContainer" unique_id=1000000001]
|
[node name="ScrollContainer" type="ScrollContainer" parent="Players/VBoxContainer" unique_id=1000000001]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_vertical = 15
|
size_flags_vertical = 15
|
||||||
|
horizontal_scroll_mode = 0
|
||||||
|
|
||||||
[node name="PlayersListVBoxContainer" type="VBoxContainer" parent="Players/VBoxContainer/ScrollContainer" unique_id=1000000002]
|
[node name="PlayersListVBoxContainer" type="VBoxContainer" parent="Players/VBoxContainer/ScrollContainer" unique_id=1000000002]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 15
|
size_flags_vertical = 15
|
||||||
|
|
||||||
[node name="ResetPlaylistButton" type="Button" parent="." unique_id=1754155620]
|
[node name="ResetPlaylistButton" type="Button" parent="." unique_id=1754155620]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1360.0
|
offset_left = 1360.0
|
||||||
offset_top = 64.0
|
offset_top = 64.0
|
||||||
@@ -263,7 +260,6 @@ action_mode = 0
|
|||||||
text = "Reset playlist"
|
text = "Reset playlist"
|
||||||
|
|
||||||
[node name="ResetPointsButton" type="Button" parent="." unique_id=942880776]
|
[node name="ResetPointsButton" type="Button" parent="." unique_id=942880776]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1488.0
|
offset_left = 1488.0
|
||||||
offset_top = 64.0
|
offset_top = 64.0
|
||||||
@@ -274,7 +270,6 @@ action_mode = 0
|
|||||||
text = "Reset points"
|
text = "Reset points"
|
||||||
|
|
||||||
[node name="SyncButton" type="Button" parent="." unique_id=1228313556]
|
[node name="SyncButton" type="Button" parent="." unique_id=1228313556]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1616.0
|
offset_left = 1616.0
|
||||||
offset_top = 64.0
|
offset_top = 64.0
|
||||||
@@ -285,7 +280,6 @@ action_mode = 0
|
|||||||
text = "Sync soundtracks"
|
text = "Sync soundtracks"
|
||||||
|
|
||||||
[node name="SoundTestButton" type="Button" parent="." unique_id=1332971879]
|
[node name="SoundTestButton" type="Button" parent="." unique_id=1332971879]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1776.0
|
offset_left = 1776.0
|
||||||
offset_top = 64.0
|
offset_top = 64.0
|
||||||
@@ -296,7 +290,6 @@ action_mode = 0
|
|||||||
text = "Sound test"
|
text = "Sound test"
|
||||||
|
|
||||||
[node name="ShowAnswerButton" type="Button" parent="." unique_id=415388039]
|
[node name="ShowAnswerButton" type="Button" parent="." unique_id=415388039]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 65.0
|
offset_left = 65.0
|
||||||
offset_top = 944.0
|
offset_top = 944.0
|
||||||
@@ -308,7 +301,6 @@ shortcut = SubResource("Shortcut_a7fvb")
|
|||||||
text = "Show answer"
|
text = "Show answer"
|
||||||
|
|
||||||
[node name="NextButton" type="Button" parent="." unique_id=1744703488]
|
[node name="NextButton" type="Button" parent="." unique_id=1744703488]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 193.0
|
offset_left = 193.0
|
||||||
offset_top = 944.0
|
offset_top = 944.0
|
||||||
@@ -321,7 +313,6 @@ shortcut = SubResource("Shortcut_d6fml")
|
|||||||
text = "Randomize new track"
|
text = "Randomize new track"
|
||||||
|
|
||||||
[node name="SearchButton" type="Button" parent="." unique_id=1782453581]
|
[node name="SearchButton" type="Button" parent="." unique_id=1782453581]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1354.0
|
offset_left = 1354.0
|
||||||
offset_top = 8.0
|
offset_top = 8.0
|
||||||
@@ -333,7 +324,6 @@ shortcut = SubResource("Shortcut_fbju4")
|
|||||||
text = "Search"
|
text = "Search"
|
||||||
|
|
||||||
[node name="SettingsButton" type="Button" parent="." unique_id=1193400323]
|
[node name="SettingsButton" type="Button" parent="." unique_id=1193400323]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1442.0
|
offset_left = 1442.0
|
||||||
offset_top = 8.0
|
offset_top = 8.0
|
||||||
@@ -344,7 +334,6 @@ action_mode = 0
|
|||||||
text = "Settings"
|
text = "Settings"
|
||||||
|
|
||||||
[node name="StatisticsButton" type="Button" parent="." unique_id=2045021269]
|
[node name="StatisticsButton" type="Button" parent="." unique_id=2045021269]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1530.0
|
offset_left = 1530.0
|
||||||
offset_top = 8.0
|
offset_top = 8.0
|
||||||
@@ -355,7 +344,6 @@ action_mode = 0
|
|||||||
text = "Statistics"
|
text = "Statistics"
|
||||||
|
|
||||||
[node name="ShortcutsButton" type="Button" parent="." unique_id=2066498226]
|
[node name="ShortcutsButton" type="Button" parent="." unique_id=2066498226]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1626.0
|
offset_left = 1626.0
|
||||||
offset_top = 8.0
|
offset_top = 8.0
|
||||||
@@ -366,7 +354,6 @@ action_mode = 0
|
|||||||
text = "Shortcuts"
|
text = "Shortcuts"
|
||||||
|
|
||||||
[node name="AboutButton" type="Button" parent="." unique_id=1057035253]
|
[node name="AboutButton" type="Button" parent="." unique_id=1057035253]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1722.0
|
offset_left = 1722.0
|
||||||
offset_top = 8.0
|
offset_top = 8.0
|
||||||
@@ -377,7 +364,6 @@ action_mode = 0
|
|||||||
text = "About"
|
text = "About"
|
||||||
|
|
||||||
[node name="QRButton" type="Button" parent="." unique_id=2021908559]
|
[node name="QRButton" type="Button" parent="." unique_id=2021908559]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 1802.0
|
offset_left = 1802.0
|
||||||
offset_top = 8.0
|
offset_top = 8.0
|
||||||
@@ -440,12 +426,12 @@ offset_right = 1262.0
|
|||||||
offset_bottom = 860.0
|
offset_bottom = 860.0
|
||||||
|
|
||||||
[node name="StatisticsPopupPanel" type="PopupPanel" parent="." unique_id=298311407]
|
[node name="StatisticsPopupPanel" type="PopupPanel" parent="." unique_id=298311407]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
oversampling_override = 1.0
|
oversampling_override = 1.0
|
||||||
initial_position = 2
|
initial_position = 2
|
||||||
size = Vector2i(450, 100)
|
size = Vector2i(450, 100)
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="StatisticsPopupPanel" unique_id=548316493]
|
[node name="Label" type="Label" parent="StatisticsPopupPanel" unique_id=548316493]
|
||||||
texture_filter = 1
|
|
||||||
offset_left = 4.0
|
offset_left = 4.0
|
||||||
offset_top = 4.0
|
offset_top = 4.0
|
||||||
offset_right = 446.0
|
offset_right = 446.0
|
||||||
@@ -454,7 +440,6 @@ text = "Statistics"
|
|||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="StatisticsLabel" type="Label" parent="StatisticsPopupPanel" unique_id=58226477]
|
[node name="StatisticsLabel" type="Label" parent="StatisticsPopupPanel" unique_id=58226477]
|
||||||
texture_filter = 1
|
|
||||||
offset_left = 4.0
|
offset_left = 4.0
|
||||||
offset_top = 4.0
|
offset_top = 4.0
|
||||||
offset_right = 446.0
|
offset_right = 446.0
|
||||||
|
|||||||
+10
-5
@@ -29,9 +29,12 @@ script = ExtResource("1_if4kc")
|
|||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
||||||
custom_minimum_size = Vector2(2.08165e-12, 40)
|
custom_minimum_size = Vector2(2.08165e-12, 40)
|
||||||
layout_mode = 0
|
layout_mode = 1
|
||||||
offset_right = 40.0
|
anchors_preset = 15
|
||||||
offset_bottom = 40.0
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
[node name="Panel4" type="Panel" parent="HBoxContainer"]
|
[node name="Panel4" type="Panel" parent="HBoxContainer"]
|
||||||
custom_minimum_size = Vector2(5, 40)
|
custom_minimum_size = Vector2(5, 40)
|
||||||
@@ -41,12 +44,15 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_821k2")
|
|||||||
[node name="Name" type="Label" parent="HBoxContainer"]
|
[node name="Name" type="Label" parent="HBoxContainer"]
|
||||||
custom_minimum_size = Vector2(130, 40)
|
custom_minimum_size = Vector2(130, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
size_flags_vertical = 1
|
size_flags_vertical = 1
|
||||||
text = ": 0"
|
text = ": 0"
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
clip_text = true
|
||||||
|
text_overrun_behavior = 3
|
||||||
|
|
||||||
[node name="Panel3" type="Panel" parent="HBoxContainer"]
|
[node name="Panel3" type="Panel" parent="HBoxContainer"]
|
||||||
custom_minimum_size = Vector2(80, 2.08165e-12)
|
custom_minimum_size = Vector2(16, 2.08165e-12)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_styles/panel = SubResource("StyleBoxFlat_w10e8")
|
theme_override_styles/panel = SubResource("StyleBoxFlat_w10e8")
|
||||||
|
|
||||||
@@ -91,7 +97,6 @@ theme_override_styles/panel = SubResource("StyleBoxFlat_b2crt")
|
|||||||
[node name="RemovePlayer" type="TextureButton" parent="HBoxContainer"]
|
[node name="RemovePlayer" type="TextureButton" parent="HBoxContainer"]
|
||||||
custom_minimum_size = Vector2(40, 40)
|
custom_minimum_size = Vector2(40, 40)
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
|
||||||
focus_mode = 0
|
focus_mode = 0
|
||||||
action_mode = 0
|
action_mode = 0
|
||||||
texture_normal = ExtResource("3_j3uxe")
|
texture_normal = ExtResource("3_j3uxe")
|
||||||
|
|||||||
+4
-1
@@ -19,7 +19,10 @@ var player_score: int
|
|||||||
|
|
||||||
var is_first_point: bool = true
|
var is_first_point: bool = true
|
||||||
|
|
||||||
var character: Texture = load("res://noCharacter.png")
|
## Picture shown until the player picks a character.
|
||||||
|
const NO_CHARACTER_PATH: String = "res://noCharacter.png"
|
||||||
|
|
||||||
|
var character: Texture = load(NO_CHARACTER_PATH)
|
||||||
|
|
||||||
func _init(new_name: String) -> void:
|
func _init(new_name: String) -> void:
|
||||||
player_name = new_name
|
player_name = new_name
|
||||||
|
|||||||
+3
-14
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var qr_panel: Panel = $QRPanel
|
var qr_panel: Panel = $QRPanel
|
||||||
@@ -21,21 +21,10 @@ func _ready() -> void:
|
|||||||
url_label.text = qr_code_rect.data
|
url_label.text = qr_code_rect.data
|
||||||
print("QR code generated for: ", url)
|
print("QR code generated for: ", url)
|
||||||
|
|
||||||
func show_window() -> void:
|
func open() -> void:
|
||||||
visible = true
|
super()
|
||||||
# Regenerate QR code in case settings changed
|
# Regenerate QR code in case settings changed
|
||||||
var url: String = Settings.default_path + "/search"
|
var url: String = Settings.default_path + "/search"
|
||||||
qr_code_rect.data = url
|
qr_code_rect.data = url
|
||||||
url_label.text = qr_code_rect.data
|
url_label.text = qr_code_rect.data
|
||||||
|
|
||||||
|
|
||||||
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), qr_panel.size).has_point(evLocal.position):
|
|
||||||
self.visible = false
|
|
||||||
|
|
||||||
|
|
||||||
func hide_window() -> void:
|
|
||||||
visible = false
|
|
||||||
+4
-1
@@ -2,8 +2,10 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bsa6xg5xos6h7" path="res://QRWindow.gd" id="1_qr_script"]
|
[ext_resource type="Script" uid="uid://bsa6xg5xos6h7" path="res://QRWindow.gd" id="1_qr_script"]
|
||||||
[ext_resource type="Script" uid="uid://dynulhnyq5hpq" path="res://addons/kenyoni/qr_code/qr_code_rect.gd" id="2_jpsxt"]
|
[ext_resource type="Script" uid="uid://dynulhnyq5hpq" path="res://addons/kenyoni/qr_code/qr_code_rect.gd" id="2_jpsxt"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[node name="QRControl" type="Control" unique_id=1996957585]
|
[node name="QRControl" type="Control" unique_id=1996957585 node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -11,6 +13,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_qr_script")
|
script = ExtResource("1_qr_script")
|
||||||
|
panel = NodePath("QRPanel")
|
||||||
|
|
||||||
[node name="QRPanel" type="Panel" parent="." unique_id=1021365843]
|
[node name="QRPanel" type="Panel" parent="." unique_id=1021365843]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
+2
-9
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var search_list: VBoxContainer = $ScrollContainer/VBoxContainer
|
var search_list: VBoxContainer = $ScrollContainer/VBoxContainer
|
||||||
@@ -36,7 +36,7 @@ func focus() -> void:
|
|||||||
|
|
||||||
func close() -> void:
|
func close() -> void:
|
||||||
clear()
|
clear()
|
||||||
self.visible = false
|
super()
|
||||||
|
|
||||||
func search() -> void:
|
func search() -> void:
|
||||||
print(search_bar.text)
|
print(search_bar.text)
|
||||||
@@ -179,13 +179,6 @@ func set_soundtracks(list: Array) -> void:
|
|||||||
"cleaned": clean_term(soundtrack)
|
"cleaned": clean_term(soundtrack)
|
||||||
})
|
})
|
||||||
|
|
||||||
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), search_panel.size).has_point(evLocal.position):
|
|
||||||
self.visible = false
|
|
||||||
|
|
||||||
func clear() -> void:
|
func clear() -> void:
|
||||||
search_bar.text = ""
|
search_bar.text = ""
|
||||||
show_all_soundtracks()
|
show_all_soundtracks()
|
||||||
|
|||||||
+4
-3
@@ -1,8 +1,10 @@
|
|||||||
[gd_scene format=3 uid="uid://bxydgil1yifps"]
|
[gd_scene format=3 uid="uid://bxydgil1yifps"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bg5yo08638600" path="res://SearchWindow.gd" id="1_m7bij"]
|
[ext_resource type="Script" uid="uid://bg5yo08638600" path="res://SearchWindow.gd" id="1_m7bij"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[node name="Control" type="Control" unique_id=616238617]
|
[node name="Control" type="Control" unique_id=616238617 node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -10,6 +12,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_m7bij")
|
script = ExtResource("1_m7bij")
|
||||||
|
panel = NodePath("SearchPanel")
|
||||||
|
|
||||||
[node name="SearchPanel" type="Panel" parent="." unique_id=1262945994]
|
[node name="SearchPanel" type="Panel" parent="." unique_id=1262945994]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -18,7 +21,6 @@ offset_right = 1152.0
|
|||||||
offset_bottom = 640.0
|
offset_bottom = 640.0
|
||||||
|
|
||||||
[node name="ClearButton" type="Button" parent="." unique_id=1549439398]
|
[node name="ClearButton" type="Button" parent="." unique_id=1549439398]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 936.0
|
offset_left = 936.0
|
||||||
offset_top = 16.0
|
offset_top = 16.0
|
||||||
@@ -30,7 +32,6 @@ action_mode = 0
|
|||||||
text = "Clear"
|
text = "Clear"
|
||||||
|
|
||||||
[node name="Searchbar" type="TextEdit" parent="." unique_id=2112669372]
|
[node name="Searchbar" type="TextEdit" parent="." unique_id=2112669372]
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 32.0
|
offset_left = 32.0
|
||||||
offset_top = 16.0
|
offset_top = 16.0
|
||||||
|
|||||||
+1
-8
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var settings_panel: Panel = %SettingsPanel
|
var settings_panel: Panel = %SettingsPanel
|
||||||
@@ -116,13 +116,6 @@ func _on_visibility_changed() -> void:
|
|||||||
if visible:
|
if visible:
|
||||||
add_to_database_button.button_pressed = Settings.add_to_stats
|
add_to_database_button.button_pressed = Settings.add_to_stats
|
||||||
|
|
||||||
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:
|
||||||
|
|||||||
+4
-1
@@ -1,11 +1,13 @@
|
|||||||
[gd_scene format=3 uid="uid://dldpeo5y3l5hq"]
|
[gd_scene format=3 uid="uid://dldpeo5y3l5hq"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dukqyjoduf1af" path="res://SettingsWindow.gd" id="1_bt55j"]
|
[ext_resource type="Script" uid="uid://dukqyjoduf1af" path="res://SettingsWindow.gd" id="1_bt55j"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_3xrlm"]
|
[sub_resource type="LabelSettings" id="LabelSettings_3xrlm"]
|
||||||
font_size = 25
|
font_size = 25
|
||||||
|
|
||||||
[node name="SettingsControl" type="Control" unique_id=1298840328]
|
[node name="SettingsControl" type="Control" unique_id=1298840328 node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -13,6 +15,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_bt55j")
|
script = ExtResource("1_bt55j")
|
||||||
|
panel = NodePath("SettingsPanel")
|
||||||
|
|
||||||
[node name="SettingsPanel" type="Panel" parent="." unique_id=45537159]
|
[node name="SettingsPanel" type="Panel" parent="." unique_id=45537159]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
+4
-1
@@ -1,11 +1,13 @@
|
|||||||
[gd_scene format=3 uid="uid://dpdem7pdxweb5"]
|
[gd_scene format=3 uid="uid://dpdem7pdxweb5"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://c3ejukwth512a" path="res://sync_window.gd" id="1_8ba47"]
|
[ext_resource type="Script" uid="uid://c3ejukwth512a" path="res://sync_window.gd" id="1_8ba47"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_anbfi"]
|
[sub_resource type="LabelSettings" id="LabelSettings_anbfi"]
|
||||||
font_size = 25
|
font_size = 25
|
||||||
|
|
||||||
[node name="Control2" type="Control" unique_id=1302914356]
|
[node name="Control2" type="Control" unique_id=1302914356 node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -13,6 +15,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_8ba47")
|
script = ExtResource("1_8ba47")
|
||||||
|
panel = NodePath("SyncPanel")
|
||||||
|
|
||||||
[node name="SyncPanel" type="Panel" parent="." unique_id=1714634204]
|
[node name="SyncPanel" type="Panel" parent="." unique_id=1714634204]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
+4
-2
@@ -2,11 +2,13 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dxpb22xbwf3t1" path="res://winner_window.gd" id="1_winner_script"]
|
[ext_resource type="Script" uid="uid://dxpb22xbwf3t1" path="res://winner_window.gd" id="1_winner_script"]
|
||||||
[ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="2_no_character"]
|
[ext_resource type="Texture2D" uid="uid://r4as0nmtoa7p" path="res://noCharacter.png" id="2_no_character"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_hr75l"]
|
[sub_resource type="LabelSettings" id="LabelSettings_hr75l"]
|
||||||
font_size = 35
|
font_size = 35
|
||||||
|
|
||||||
[node name="WinnerControl" type="Control" unique_id=1111111111]
|
[node name="WinnerControl" type="Control" unique_id=1111111111 node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@@ -14,6 +16,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_winner_script")
|
script = ExtResource("1_winner_script")
|
||||||
|
panel = NodePath("WinnerPanel")
|
||||||
|
|
||||||
[node name="WinnerPanel" type="Panel" parent="." unique_id=89212869]
|
[node name="WinnerPanel" type="Panel" parent="." unique_id=89212869]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@@ -40,7 +43,6 @@ stretch_mode = 5
|
|||||||
|
|
||||||
[node name="WinnerLabel" type="Label" parent="WinnerPanel/VBoxContainer" unique_id=1437597286]
|
[node name="WinnerLabel" type="Label" parent="WinnerPanel/VBoxContainer" unique_id=1437597286]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
texture_filter = 1
|
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "Winner!"
|
text = "Winner!"
|
||||||
label_settings = SubResource("LabelSettings_hr75l")
|
label_settings = SubResource("LabelSettings_hr75l")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var log_panel: Panel = %LogPanel
|
var log_panel: Panel = %LogPanel
|
||||||
@@ -15,7 +15,6 @@ func add_log_row(text: String) -> void:
|
|||||||
|
|
||||||
func make_log_label(row: String) -> Label:
|
func make_log_label(row: String) -> Label:
|
||||||
var log_label: Label = Label.new()
|
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.add_theme_font_size_override("font_size", 20)
|
||||||
log_label.text = row
|
log_label.text = row
|
||||||
log_label.autowrap_mode = TextServer.AUTOWRAP_WORD
|
log_label.autowrap_mode = TextServer.AUTOWRAP_WORD
|
||||||
|
|||||||
+8
-10
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var character_panel: Panel = %CharacterPanel
|
var character_panel: Panel = %CharacterPanel
|
||||||
@@ -46,22 +46,20 @@ func show_grid(player_name: String) -> void:
|
|||||||
print("show_grid")
|
print("show_grid")
|
||||||
title_label.text = "Select character for " + player_name
|
title_label.text = "Select character for " + player_name
|
||||||
close_timer.stop()
|
close_timer.stop()
|
||||||
self.visible = true
|
open()
|
||||||
can_select_character = true
|
can_select_character = true
|
||||||
Settings.character_select_open = true
|
Settings.character_select_open = true
|
||||||
|
|
||||||
|
func close() -> void:
|
||||||
|
super()
|
||||||
|
Settings.character_select_open = false
|
||||||
|
|
||||||
func _on_character_selected(texture: ImageTexture) -> void:
|
func _on_character_selected(texture: ImageTexture) -> void:
|
||||||
print("_on_character_selected")
|
print("_on_character_selected")
|
||||||
|
# Not close(): character_select_open stays true until close_timer fires, so the click
|
||||||
|
# that picked the character does not also select a song behind it
|
||||||
self.visible = false
|
self.visible = false
|
||||||
if can_select_character:
|
if can_select_character:
|
||||||
new_new_character_selected.emit(texture)
|
new_new_character_selected.emit(texture)
|
||||||
close_timer.start()
|
close_timer.start()
|
||||||
can_select_character = false
|
can_select_character = false
|
||||||
|
|
||||||
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), character_panel.size).has_point(evLocal.position):
|
|
||||||
self.visible = false
|
|
||||||
Settings.character_select_open = false
|
|
||||||
@@ -1,14 +1,17 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://cdy4kvemwaiom"]
|
[gd_scene load_steps=3 format=3 uid="uid://cdy4kvemwaiom"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://cvffg87wr6r3y" path="res://new_character_select.gd" id="1_h4tdp"]
|
[ext_resource type="Script" uid="uid://cvffg87wr6r3y" path="res://new_character_select.gd" id="1_h4tdp"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_p4iny"]
|
[sub_resource type="LabelSettings" id="LabelSettings_p4iny"]
|
||||||
font_size = 25
|
font_size = 25
|
||||||
|
|
||||||
[node name="Control" type="Control"]
|
[node name="Control" type="Control" node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 0
|
anchors_preset = 0
|
||||||
script = ExtResource("1_h4tdp")
|
script = ExtResource("1_h4tdp")
|
||||||
|
panel = NodePath("CharacterPanel")
|
||||||
|
|
||||||
[node name="CharacterPanel" type="Panel" parent="."]
|
[node name="CharacterPanel" type="Panel" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
[gd_resource type="Theme" format=3]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_popup"]
|
||||||
|
bg_color = Color(0.180392, 0.180392, 0.180392, 1)
|
||||||
|
border_width_left = 2
|
||||||
|
border_width_top = 2
|
||||||
|
border_width_right = 2
|
||||||
|
border_width_bottom = 2
|
||||||
|
border_color = Color(0.36, 0.36, 0.36, 1)
|
||||||
|
corner_radius_top_left = 6
|
||||||
|
corner_radius_top_right = 6
|
||||||
|
corner_radius_bottom_right = 6
|
||||||
|
corner_radius_bottom_left = 6
|
||||||
|
content_margin_left = 12.0
|
||||||
|
content_margin_top = 12.0
|
||||||
|
content_margin_right = 12.0
|
||||||
|
content_margin_bottom = 12.0
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
Panel/styles/panel = SubResource("StyleBoxFlat_popup")
|
||||||
|
PopupPanel/styles/panel = SubResource("StyleBoxFlat_popup")
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
class_name PopupWindow
|
||||||
|
extends Control
|
||||||
|
## A window shown on top of the main window, such as Settings or About.
|
||||||
|
##
|
||||||
|
## Clicking outside [member panel] closes it. Popups that need to prepare or clean up
|
||||||
|
## override [method open] or [method close] and call [code]super()[/code].
|
||||||
|
|
||||||
|
## The visible part of the popup. Clicks outside it close the popup.
|
||||||
|
@export var panel: Control
|
||||||
|
|
||||||
|
|
||||||
|
## Shows the popup.
|
||||||
|
func open() -> void:
|
||||||
|
visible = true
|
||||||
|
|
||||||
|
|
||||||
|
## Hides the popup.
|
||||||
|
func close() -> void:
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
|
||||||
|
## Opens the popup if it is closed and closes it if it is open.
|
||||||
|
func toggle() -> void:
|
||||||
|
if visible:
|
||||||
|
close()
|
||||||
|
else:
|
||||||
|
open()
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if !visible || !(event is InputEventMouseButton) || !event.pressed:
|
||||||
|
return
|
||||||
|
var click: InputEventMouseButton = panel.make_input_local(event)
|
||||||
|
if !Rect2(Vector2.ZERO, panel.size).has_point(click.position):
|
||||||
|
close()
|
||||||
|
# The click only closes the popup; it must not also press what is behind it
|
||||||
|
get_viewport().set_input_as_handled()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://dwd4dcbujpv6p
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://bd1by80q1v27e"]
|
[gd_scene load_steps=2 format=3 uid="uid://bd1by80q1v27e"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://rolypd0cqd6h" path="res://shortcuts_window.gd" id="1_12pxi"]
|
[ext_resource type="Script" uid="uid://rolypd0cqd6h" path="res://shortcuts_window.gd" id="1_12pxi"]
|
||||||
|
[ext_resource type="Theme" path="res://popup_theme.tres" id="popup_theme"]
|
||||||
|
|
||||||
[node name="ShorcutsControl" type="Control"]
|
[node name="ShorcutsControl" type="Control" node_paths=PackedStringArray("panel")]
|
||||||
|
theme = ExtResource("popup_theme")
|
||||||
custom_minimum_size = Vector2(700, 700)
|
custom_minimum_size = Vector2(700, 700)
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
@@ -11,6 +13,7 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = ExtResource("1_12pxi")
|
script = ExtResource("1_12pxi")
|
||||||
|
panel = NodePath("ShortcutsPanel")
|
||||||
|
|
||||||
[node name="ShortcutsPanel" type="Panel" parent="."]
|
[node name="ShortcutsPanel" type="Panel" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|||||||
+1
-14
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var shortcuts_vbox: VBoxContainer = %shortcutsVBox
|
var shortcuts_vbox: VBoxContainer = %shortcutsVBox
|
||||||
@@ -29,22 +29,11 @@ var shortcuts_dic: Dictionary = {
|
|||||||
#Color(0.302, 0.302, 0.302)
|
#Color(0.302, 0.302, 0.302)
|
||||||
#Color(0.259, 0.259, 0.259)
|
#Color(0.259, 0.259, 0.259)
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
|
||||||
if self.visible == true:
|
|
||||||
if shortcuts_panel == null:
|
|
||||||
return
|
|
||||||
if event is InputEventMouseButton && event.is_pressed():
|
|
||||||
var evLocal: InputEvent = make_input_local(event)
|
|
||||||
if !Rect2(Vector2(0, 0), shortcuts_panel.size).has_point(evLocal.position):
|
|
||||||
self.visible = false
|
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
shortcuts_dic.sort()
|
shortcuts_dic.sort()
|
||||||
Settings.delete_children(shortcuts_vbox)
|
Settings.delete_children(shortcuts_vbox)
|
||||||
|
|
||||||
var title: Label = Label.new()
|
var title: Label = Label.new()
|
||||||
title.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST)
|
|
||||||
title.add_theme_font_size_override("font_size", 20)
|
title.add_theme_font_size_override("font_size", 20)
|
||||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
title.text = "Shortcuts"
|
title.text = "Shortcuts"
|
||||||
@@ -57,7 +46,6 @@ func _ready() -> void:
|
|||||||
hbox.alignment = BoxContainer.ALIGNMENT_CENTER
|
hbox.alignment = BoxContainer.ALIGNMENT_CENTER
|
||||||
|
|
||||||
var label: Label = Label.new()
|
var label: Label = Label.new()
|
||||||
label.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST)
|
|
||||||
label.add_theme_font_size_override("font_size", 20)
|
label.add_theme_font_size_override("font_size", 20)
|
||||||
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
label.text = shortcut
|
label.text = shortcut
|
||||||
@@ -65,7 +53,6 @@ func _ready() -> void:
|
|||||||
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||||
|
|
||||||
var label2: Label = Label.new()
|
var label2: Label = Label.new()
|
||||||
label2.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST)
|
|
||||||
label2.add_theme_font_size_override("font_size", 20)
|
label2.add_theme_font_size_override("font_size", 20)
|
||||||
label2.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
label2.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
label2.text = shortcuts_dic[shortcut]
|
label2.text = shortcuts_dic[shortcut]
|
||||||
|
|||||||
+1
-10
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var sync_panel: Panel = %SyncPanel
|
var sync_panel: Panel = %SyncPanel
|
||||||
@@ -75,13 +75,6 @@ func _ready() -> void:
|
|||||||
restart_sync_button.pressed.connect(start_sync)
|
restart_sync_button.pressed.connect(start_sync)
|
||||||
restart_sync_button.visible = false
|
restart_sync_button.visible = false
|
||||||
|
|
||||||
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), sync_panel.size).has_point(evLocal.position):
|
|
||||||
self.visible = false
|
|
||||||
|
|
||||||
func show_section_if_has_data(data: Variant, vbox: VBoxContainer, separator: VSeparator, header_text: String) -> bool:
|
func show_section_if_has_data(data: Variant, vbox: VBoxContainer, separator: VSeparator, header_text: String) -> bool:
|
||||||
if data != null && data.size() > 0:
|
if data != null && data.size() > 0:
|
||||||
vbox.visible = true
|
vbox.visible = true
|
||||||
@@ -202,7 +195,6 @@ func list_visible(vbox: VBoxContainer, seperator: VSeparator) -> void:
|
|||||||
|
|
||||||
func make_header_label(vbox: VBoxContainer, text: String) -> void:
|
func make_header_label(vbox: VBoxContainer, text: String) -> void:
|
||||||
var label: Label = Label.new()
|
var label: Label = Label.new()
|
||||||
label.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST)
|
|
||||||
label.add_theme_font_size_override("font_size", 20)
|
label.add_theme_font_size_override("font_size", 20)
|
||||||
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||||
label.add_theme_color_override("font_color", Color(1, 0.5, 0))
|
label.add_theme_color_override("font_color", Color(1, 0.5, 0))
|
||||||
@@ -211,7 +203,6 @@ func make_header_label(vbox: VBoxContainer, text: String) -> void:
|
|||||||
|
|
||||||
func make_soundtrack_label(text: String) -> Label:
|
func make_soundtrack_label(text: String) -> Label:
|
||||||
var label: Label = Label.new()
|
var label: Label = Label.new()
|
||||||
label.set_texture_filter(TextureFilter.TEXTURE_FILTER_NEAREST)
|
|
||||||
label.add_theme_font_size_override("font_size", 18)
|
label.add_theme_font_size_override("font_size", 18)
|
||||||
label.text = text
|
label.text = text
|
||||||
label.autowrap_mode = TextServer.AUTOWRAP_OFF
|
label.autowrap_mode = TextServer.AUTOWRAP_OFF
|
||||||
|
|||||||
@@ -0,0 +1,126 @@
|
|||||||
|
extends MainWindowTestSuite
|
||||||
|
## All popups share PopupWindow: clicking outside the panel closes them, the backdrop
|
||||||
|
## dims the window behind them, and the closing click does not reach the main window.
|
||||||
|
|
||||||
|
const POPUP_NODES: Array[String] = [
|
||||||
|
"Search", "SyncWindow", "SettingsWindow", "QRWindow", "NewCharacterSelect",
|
||||||
|
"ShortcutsWindow", "AboutWindow", "WinnerWindow", "Log",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
func _popup(node_name: String) -> PopupWindow:
|
||||||
|
return _window.get_node(node_name)
|
||||||
|
|
||||||
|
|
||||||
|
func _backdrop() -> ColorRect:
|
||||||
|
return _window.get_node("PopupBackdrop")
|
||||||
|
|
||||||
|
|
||||||
|
## Clicks at [param position], given in the window's 1920x1080 layout coordinates.
|
||||||
|
func _click_at(position: Vector2) -> void:
|
||||||
|
# The runner takes window pixels; the headless test window is much smaller than the
|
||||||
|
# layout, so convert like a real mouse position would be
|
||||||
|
_runner.set_mouse_position(_window.get_viewport().get_final_transform() * position)
|
||||||
|
await _runner.simulate_mouse_button_pressed(MOUSE_BUTTON_LEFT)
|
||||||
|
await _runner.await_input_processed()
|
||||||
|
|
||||||
|
|
||||||
|
## A point on screen outside the popup's panel.
|
||||||
|
func _outside(popup: PopupWindow) -> Vector2:
|
||||||
|
var rect: Rect2 = popup.panel.get_global_rect()
|
||||||
|
return Vector2(rect.end.x + 5, rect.end.y + 5) if rect.end.x < 1900 \
|
||||||
|
else Vector2(rect.position.x - 5, rect.position.y - 5)
|
||||||
|
|
||||||
|
|
||||||
|
func test_backdrop_is_hidden_without_popups() -> void:
|
||||||
|
assert_bool(_backdrop().visible).is_false()
|
||||||
|
|
||||||
|
|
||||||
|
func test_backdrop_covers_the_whole_window() -> void:
|
||||||
|
_popup("SettingsWindow").open()
|
||||||
|
|
||||||
|
assert_vector(_backdrop().get_global_rect().size).is_equal(_window.get_viewport_rect().size)
|
||||||
|
|
||||||
|
|
||||||
|
func test_every_popup_is_a_popup_window() -> void:
|
||||||
|
for node_name: String in POPUP_NODES:
|
||||||
|
assert_object(_window.get_node(node_name)).is_instanceof(PopupWindow)
|
||||||
|
|
||||||
|
|
||||||
|
func test_every_popup_shows_backdrop_and_closes_on_outside_click() -> void:
|
||||||
|
for node_name: String in POPUP_NODES:
|
||||||
|
var popup: PopupWindow = _popup(node_name)
|
||||||
|
popup.open()
|
||||||
|
await _runner.simulate_frames(1)
|
||||||
|
assert_bool(_backdrop().visible).override_failure_message(
|
||||||
|
"%s: backdrop not shown" % node_name).is_true()
|
||||||
|
|
||||||
|
await _click_at(_outside(popup))
|
||||||
|
|
||||||
|
assert_bool(popup.visible).override_failure_message(
|
||||||
|
"%s: not closed by outside click" % node_name).is_false()
|
||||||
|
assert_bool(_backdrop().visible).override_failure_message(
|
||||||
|
"%s: backdrop still shown" % node_name).is_false()
|
||||||
|
|
||||||
|
|
||||||
|
func test_click_inside_popup_keeps_it_open() -> void:
|
||||||
|
var settings: PopupWindow = _popup("SettingsWindow")
|
||||||
|
settings.open()
|
||||||
|
await _runner.simulate_frames(1)
|
||||||
|
|
||||||
|
await _click_at(settings.panel.get_global_rect().get_center())
|
||||||
|
|
||||||
|
assert_bool(settings.visible).is_true()
|
||||||
|
|
||||||
|
|
||||||
|
func test_closing_click_does_not_press_button_behind_popup() -> void:
|
||||||
|
var settings: PopupWindow = _popup("SettingsWindow")
|
||||||
|
var reset_button: Button = _window.get_node("ResetPlaylistButton")
|
||||||
|
settings.open()
|
||||||
|
await _runner.simulate_frames(1)
|
||||||
|
assert_bool(settings.panel.get_global_rect().intersects(reset_button.get_global_rect())) \
|
||||||
|
.is_false()
|
||||||
|
|
||||||
|
await _click_at(reset_button.get_global_rect().get_center())
|
||||||
|
|
||||||
|
assert_bool(settings.visible).is_false()
|
||||||
|
assert_int(_server.count("/music/reset")).is_equal(0)
|
||||||
|
|
||||||
|
|
||||||
|
func test_button_works_again_after_popup_closed() -> void:
|
||||||
|
var reset_button: Button = _window.get_node("ResetPlaylistButton")
|
||||||
|
|
||||||
|
await _click_at(reset_button.get_global_rect().get_center())
|
||||||
|
|
||||||
|
assert_int(_server.count("/music/reset")).is_equal(1)
|
||||||
|
|
||||||
|
|
||||||
|
func test_closing_search_clears_the_search() -> void:
|
||||||
|
var search: PopupWindow = _popup("Search")
|
||||||
|
search.open()
|
||||||
|
var search_bar: TextEdit = search.get_node("Searchbar")
|
||||||
|
search_bar.text = "mario"
|
||||||
|
|
||||||
|
search.close()
|
||||||
|
|
||||||
|
assert_str(search_bar.text).is_empty()
|
||||||
|
|
||||||
|
|
||||||
|
func test_closing_character_select_allows_song_clicks_again() -> void:
|
||||||
|
var character_select: PopupWindow = _popup("NewCharacterSelect")
|
||||||
|
character_select.show_grid("Crono")
|
||||||
|
assert_bool(Settings.character_select_open).is_true()
|
||||||
|
|
||||||
|
character_select.close()
|
||||||
|
|
||||||
|
assert_bool(Settings.character_select_open).is_false()
|
||||||
|
|
||||||
|
|
||||||
|
func test_toggle_opens_and_closes() -> void:
|
||||||
|
var shortcuts: PopupWindow = _popup("ShortcutsWindow")
|
||||||
|
|
||||||
|
shortcuts.toggle()
|
||||||
|
assert_bool(shortcuts.visible).is_true()
|
||||||
|
|
||||||
|
shortcuts.toggle()
|
||||||
|
assert_bool(shortcuts.visible).is_false()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://kcnjdw4ke7hd
|
||||||
+6
-10
@@ -1,4 +1,4 @@
|
|||||||
extends Control
|
extends PopupWindow
|
||||||
|
|
||||||
@onready
|
@onready
|
||||||
var winner_panel: Panel = %WinnerPanel
|
var winner_panel: Panel = %WinnerPanel
|
||||||
@@ -23,6 +23,11 @@ func show_winner(winner: PlayerObject) -> void:
|
|||||||
winner_label.text = winner.player_name + " won with " + str(winner.player_score) + \
|
winner_label.text = winner.player_name + " won with " + str(winner.player_score) + \
|
||||||
" points!!"
|
" points!!"
|
||||||
winner_picture.texture = winner.character
|
winner_picture.texture = winner.character
|
||||||
|
# The "no character" placeholder is pixel art, which blurs when scaled up smoothly
|
||||||
|
if winner.character.resource_path == PlayerObject.NO_CHARACTER_PATH:
|
||||||
|
winner_picture.texture_filter = CanvasItem.TEXTURE_FILTER_NEAREST
|
||||||
|
else:
|
||||||
|
winner_picture.texture_filter = CanvasItem.TEXTURE_FILTER_LINEAR
|
||||||
winner_picture.custom_minimum_size = Vector2(480, 200)
|
winner_picture.custom_minimum_size = Vector2(480, 200)
|
||||||
winner_picture.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
|
winner_picture.expand_mode = TextureRect.EXPAND_FIT_WIDTH_PROPORTIONAL
|
||||||
winner_picture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
winner_picture.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||||
@@ -50,13 +55,4 @@ func show_winner(winner: PlayerObject) -> void:
|
|||||||
placing += 1
|
placing += 1
|
||||||
|
|
||||||
|
|
||||||
func hide_window() -> void:
|
|
||||||
visible = false
|
|
||||||
|
|
||||||
|
|
||||||
func _input(event: InputEvent) -> void:
|
|
||||||
if visible:
|
|
||||||
if event is InputEventMouseButton and event.is_pressed():
|
|
||||||
var ev_local: InputEvent = make_input_local(event)
|
|
||||||
if !Rect2(Vector2(0, 0), winner_panel.size).has_point(ev_local.position):
|
|
||||||
visible = false
|
|
||||||
Reference in new issue
Block a user