commit b94ebf342004d7a9c5cde389a24d1066c1bb7bfb Author: soul-walker Date: Wed Apr 10 11:47:13 2024 +0800 1,测试多种方式实现车站钥匙交互;2,添加三维场景及按钮测试通过按钮打开钥匙交互窗口 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..704a51d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# Godot 4+ specific ignores +.godot/ + +target/ +dist/ \ No newline at end of file diff --git a/Assets/FeiHuaSongTi-2.ttf b/Assets/FeiHuaSongTi-2.ttf new file mode 100644 index 0000000..1e43525 Binary files /dev/null and b/Assets/FeiHuaSongTi-2.ttf differ diff --git a/Assets/FeiHuaSongTi-2.ttf.import b/Assets/FeiHuaSongTi-2.ttf.import new file mode 100644 index 0000000..3fedf3e --- /dev/null +++ b/Assets/FeiHuaSongTi-2.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://bkbpyidjguavf" +path="res://.godot/imported/FeiHuaSongTi-2.ttf-7249022ef8c1b3b8e5297415039f75d2.fontdata" + +[deps] + +source_file="res://Assets/FeiHuaSongTi-2.ttf" +dest_files=["res://.godot/imported/FeiHuaSongTi-2.ttf-7249022ef8c1b3b8e5297415039f75d2.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/Assets/LCB钥匙.png b/Assets/LCB钥匙.png new file mode 100644 index 0000000..3928fec Binary files /dev/null and b/Assets/LCB钥匙.png differ diff --git a/Assets/LCB钥匙.png.import b/Assets/LCB钥匙.png.import new file mode 100644 index 0000000..53019b5 --- /dev/null +++ b/Assets/LCB钥匙.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c3dplk5y1607u" +path="res://.godot/imported/LCB钥匙.png-9a0b8dd0d914e7c33c51a8a09ab46110.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/LCB钥匙.png" +dest_files=["res://.godot/imported/LCB钥匙.png-9a0b8dd0d914e7c33c51a8a09ab46110.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/PSL钥匙.png b/Assets/PSL钥匙.png new file mode 100644 index 0000000..63f9d0b Binary files /dev/null and b/Assets/PSL钥匙.png differ diff --git a/Assets/PSL钥匙.png.import b/Assets/PSL钥匙.png.import new file mode 100644 index 0000000..f2b2eeb --- /dev/null +++ b/Assets/PSL钥匙.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bo00i4cjotiha" +path="res://.godot/imported/PSL钥匙.png-d3252c10291876cca496a7f14f20ef6d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/PSL钥匙.png" +dest_files=["res://.godot/imported/PSL钥匙.png-d3252c10291876cca496a7f14f20ef6d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/手动解锁钥匙.png b/Assets/手动解锁钥匙.png new file mode 100644 index 0000000..38438ee Binary files /dev/null and b/Assets/手动解锁钥匙.png differ diff --git a/Assets/手动解锁钥匙.png.import b/Assets/手动解锁钥匙.png.import new file mode 100644 index 0000000..6eb7c23 --- /dev/null +++ b/Assets/手动解锁钥匙.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://t2bidn6kf7rd" +path="res://.godot/imported/手动解锁钥匙.png-c668594920f324d336cafd40bf6718db.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/手动解锁钥匙.png" +dest_files=["res://.godot/imported/手动解锁钥匙.png-c668594920f324d336cafd40bf6718db.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/紧急停车钥匙.png b/Assets/紧急停车钥匙.png new file mode 100644 index 0000000..de29caa Binary files /dev/null and b/Assets/紧急停车钥匙.png differ diff --git a/Assets/紧急停车钥匙.png.import b/Assets/紧急停车钥匙.png.import new file mode 100644 index 0000000..5600308 --- /dev/null +++ b/Assets/紧急停车钥匙.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chqfr27o61tfd" +path="res://.godot/imported/紧急停车钥匙.png-e6b97eb0adfba7fbc4c1e4a00ec04880.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/紧急停车钥匙.png" +dest_files=["res://.godot/imported/紧急停车钥匙.png-e6b97eb0adfba7fbc4c1e4a00ec04880.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/UI/panel_container.tscn b/UI/panel_container.tscn new file mode 100644 index 0000000..4f7a188 --- /dev/null +++ b/UI/panel_container.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=10 format=3 uid="uid://b7k8341jwy22f"] + +[ext_resource type="PackedScene" uid="uid://bsr40ogx2e2ir" path="res://UI/station_keys/jjtc_key_control.tscn" id="1_taymr"] +[ext_resource type="Theme" uid="uid://bycedcl2nwwlu" path="res://ui_theme.tres" id="1_vlsle"] +[ext_resource type="PackedScene" uid="uid://dkqnt73pyqgwj" path="res://UI/station_keys/lcb1_key_control.tscn" id="2_a6b1q"] +[ext_resource type="PackedScene" uid="uid://63r8gueubu2q" path="res://UI/station_keys/lcb2_key_control.tscn" id="3_8astu"] +[ext_resource type="PackedScene" uid="uid://biwdpy5pifxgi" path="res://UI/station_keys/lcb_key_control.tscn" id="4_dahi7"] +[ext_resource type="PackedScene" uid="uid://dnmfwdvba6td3" path="res://UI/station_keys/psl_key_control.tscn" id="5_n4mmv"] +[ext_resource type="PackedScene" uid="uid://cjjs2fsw6i8ye" path="res://UI/station_keys/sdjs_key_control.tscn" id="6_7pwvh"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_eooev"] +bg_color = Color(0, 0, 0, 0.235294) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_nu4ha"] +bg_color = Color(0, 0, 0, 0.352941) + +[node name="PanelContainer" type="PanelContainer"] +offset_right = 368.0 +offset_bottom = 232.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_eooev") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 2 + +[node name="PanelContainer" type="PanelContainer" parent="VBoxContainer"] +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_nu4ha") + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="VBoxContainer/PanelContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 3.0 +text = "标题" +horizontal_alignment = 1 + +[node name="Button" type="Button" parent="VBoxContainer/PanelContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 8 +focus_mode = 0 +theme = ExtResource("1_vlsle") +text = "X" + +[node name="GridContainer" type="GridContainer" parent="VBoxContainer"] +layout_mode = 2 +columns = 4 + +[node name="JJTC_Key" parent="VBoxContainer/GridContainer" instance=ExtResource("1_taymr")] +layout_mode = 2 + +[node name="LCB1_Key" parent="VBoxContainer/GridContainer" instance=ExtResource("2_a6b1q")] +layout_mode = 2 + +[node name="LCB2_Key" parent="VBoxContainer/GridContainer" instance=ExtResource("3_8astu")] +layout_mode = 2 + +[node name="LCB3_Key" parent="VBoxContainer/GridContainer" instance=ExtResource("4_dahi7")] +layout_mode = 2 + +[node name="PSL_Key" parent="VBoxContainer/GridContainer" instance=ExtResource("5_n4mmv")] +layout_mode = 2 + +[node name="SDJS_Key" parent="VBoxContainer/GridContainer" instance=ExtResource("6_7pwvh")] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_top = 30 +theme_override_constants/margin_bottom = 0 + +[node name="Button" type="Button" parent="VBoxContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +focus_mode = 0 +theme_override_font_sizes/font_size = 24 +text = "确认" diff --git a/UI/sta3ABD.tmp b/UI/sta3ABD.tmp new file mode 100644 index 0000000..a3e09be --- /dev/null +++ b/UI/sta3ABD.tmp @@ -0,0 +1,50 @@ +[gd_scene load_steps=6 format=3 uid="uid://ddtqwspx8ivry"] + +[ext_resource type="Script" path="res://UI/station_keys.gd" id="1_ovslt"] +[ext_resource type="PackedScene" uid="uid://b76vohiqtooks" path="res://UI/em_key.tscn" id="4_0l66e"] +[ext_resource type="PackedScene" uid="uid://bvuns248nsafw" path="res://UI/sdjs_key.tscn" id="5_lp0t8"] +[ext_resource type="PackedScene" uid="uid://brof6p4eyjx4r" path="res://UI/psl_key.tscn" id="5_mtxat"] +[ext_resource type="PackedScene" uid="uid://bo27xj60duv1n" path="res://UI/lcb_key.tscn" id="6_h4yyj"] + +[node name="StationKeys" type="Node"] +script = ExtResource("1_ovslt") + +[node name="PopupPanel" type="Window" parent="."] +snap_2d_transforms_to_pixel = true +title = "请选择钥匙" +position = Vector2i(27, 100) +size = Vector2i(600, 400) +mouse_passthrough_polygon = PackedVector2Array(0, 0, 400, 0, 400, 400, 0, 400) +unresizable = true +transparent = true +extend_to_title = true +keep_title_visible = true + +[node name="SDJS_Key" parent="PopupPanel" instance=ExtResource("5_lp0t8")] +position = Vector2(80, 72) + +[node name="PSL_Key" parent="PopupPanel" instance=ExtResource("5_mtxat")] +position = Vector2(217, 72) + +[node name="EM_Key" parent="PopupPanel" instance=ExtResource("4_0l66e")] +position = Vector2(336, 72) + +[node name="LCB_Key" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(464, 72) + +[node name="LCB_Key2" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(80, 248) + +[node name="LCB_Key3" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(215, 248) + +[node name="LCB_Key4" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(336, 248) + +[connection signal="focus_changed" from="PopupPanel/SDJS_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/PSL_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/EM_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key2" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key3" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key4" to="." method="_on_key_focus_changed"] diff --git a/UI/staD9F.tmp b/UI/staD9F.tmp new file mode 100644 index 0000000..f572fd6 --- /dev/null +++ b/UI/staD9F.tmp @@ -0,0 +1,50 @@ +[gd_scene load_steps=6 format=3 uid="uid://ddtqwspx8ivry"] + +[ext_resource type="Script" path="res://UI/station_keys.gd" id="1_ovslt"] +[ext_resource type="PackedScene" uid="uid://b76vohiqtooks" path="res://UI/em_key.tscn" id="4_0l66e"] +[ext_resource type="PackedScene" uid="uid://bvuns248nsafw" path="res://UI/sdjs_key.tscn" id="5_lp0t8"] +[ext_resource type="PackedScene" uid="uid://brof6p4eyjx4r" path="res://UI/psl_key.tscn" id="5_mtxat"] +[ext_resource type="PackedScene" uid="uid://bo27xj60duv1n" path="res://UI/lcb_key.tscn" id="6_h4yyj"] + +[node name="StationKeys" type="Node"] +script = ExtResource("1_ovslt") + +[node name="PopupPanel" type="Window" parent="."] +disable_3d = true +handle_input_locally = false +gui_snap_controls_to_pixels = false +title = "请选择钥匙" +position = Vector2i(0, 33) +size = Vector2i(600, 400) +unresizable = true +transparent = true +extend_to_title = true + +[node name="SDJS_Key" parent="PopupPanel" instance=ExtResource("5_lp0t8")] +position = Vector2(80, 72) + +[node name="PSL_Key" parent="PopupPanel" instance=ExtResource("5_mtxat")] +position = Vector2(217, 72) + +[node name="EM_Key" parent="PopupPanel" instance=ExtResource("4_0l66e")] +position = Vector2(336, 72) + +[node name="LCB_Key" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(464, 72) + +[node name="LCB_Key2" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(80, 248) + +[node name="LCB_Key3" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(215, 248) + +[node name="LCB_Key4" parent="PopupPanel" instance=ExtResource("6_h4yyj")] +position = Vector2(336, 248) + +[connection signal="focus_changed" from="PopupPanel/SDJS_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/PSL_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/EM_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key2" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key3" to="." method="_on_key_focus_changed"] +[connection signal="focus_changed" from="PopupPanel/LCB_Key4" to="." method="_on_key_focus_changed"] diff --git a/UI/stand.tscn b/UI/stand.tscn new file mode 100644 index 0000000..e7e86ef --- /dev/null +++ b/UI/stand.tscn @@ -0,0 +1,47 @@ +[gd_scene load_steps=6 format=3 uid="uid://d1lavjoj2lsgo"] + +[ext_resource type="PackedScene" uid="uid://d167och8l6jms" path="res://UI/station_keys/station_keys_window.tscn" id="1_2e5v0"] +[ext_resource type="PackedScene" uid="uid://b7k8341jwy22f" path="res://UI/panel_container.tscn" id="1_jhtk0"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_qpl3n"] +size = Vector3(60, 2, 60) + +[sub_resource type="BoxMesh" id="BoxMesh_n702p"] +size = Vector3(60, 2, 60) + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_tlxkr"] + +[node name="Node3D" type="Node3D"] + +[node name="Ground" type="StaticBody3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground"] +shape = SubResource("BoxShape3D_qpl3n") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Ground"] +mesh = SubResource("BoxMesh_n702p") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.5, 0.866025, 0, -0.866025, 0.5, 0, 9, 11) + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 15, 0) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(1.6, 0, 0, 0, 2.24, 0, 0, 0, 1.6, -11, 1, -2) +mesh = SubResource("CapsuleMesh_tlxkr") + +[node name="PSL_Button" type="Button" parent="."] +offset_left = 144.0 +offset_top = 132.0 +offset_right = 180.0 +offset_bottom = 163.0 +text = "PSL" + +[node name="PanelContainer" parent="." instance=ExtResource("1_jhtk0")] +visible = false + +[node name="Window" parent="." instance=ExtResource("1_2e5v0")] + +[connection signal="pressed" from="PSL_Button" to="Window" method="_on_show_button_pressed"] diff --git a/UI/station_keys/jjtc_key_control.tscn b/UI/station_keys/jjtc_key_control.tscn new file mode 100644 index 0000000..c68a311 --- /dev/null +++ b/UI/station_keys/jjtc_key_control.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://bsr40ogx2e2ir"] + +[ext_resource type="Texture2D" uid="uid://chqfr27o61tfd" path="res://Assets/紧急停车钥匙.png" id="1_qplpj"] +[ext_resource type="Script" path="res://UI/station_keys/outlined_key.gd" id="2_sjhee"] +[ext_resource type="Shader" path="res://shaders/outline.gdshader" id="3_fy1lu"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0dtby"] +shader = ExtResource("3_fy1lu") +shader_parameter/color = Color(0, 1, 1, 1) +shader_parameter/width = 3.0 +shader_parameter/pattern = 1 +shader_parameter/inside = false +shader_parameter/add_margins = true +shader_parameter/number_of_images = Vector2(1, 1) + +[node name="JJTC_Key" type="VBoxContainer"] +offset_right = 128.0 +offset_bottom = 155.0 +focus_mode = 1 +script = ExtResource("2_sjhee") +outline_material = SubResource("ShaderMaterial_0dtby") + +[node name="Key" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 2 +texture = ExtResource("1_qplpj") + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 4 +text = "紧急停车钥匙" + +[connection signal="focus_entered" from="Key" to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="Key" to="." method="_on_focus_exited"] +[connection signal="mouse_entered" from="Key" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Key" to="." method="_on_area_2d_mouse_exited"] diff --git a/UI/station_keys/lcb1_key_control.tscn b/UI/station_keys/lcb1_key_control.tscn new file mode 100644 index 0000000..1d2ae56 --- /dev/null +++ b/UI/station_keys/lcb1_key_control.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://dkqnt73pyqgwj"] + +[ext_resource type="Script" path="res://UI/station_keys/outlined_key.gd" id="1_5bwgk"] +[ext_resource type="Shader" path="res://shaders/outline.gdshader" id="2_bgq1b"] +[ext_resource type="Texture2D" uid="uid://c3dplk5y1607u" path="res://Assets/LCB钥匙.png" id="3_5sgan"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0dtby"] +shader = ExtResource("2_bgq1b") +shader_parameter/color = Color(0, 1, 1, 1) +shader_parameter/width = 3.0 +shader_parameter/pattern = 1 +shader_parameter/inside = false +shader_parameter/add_margins = true +shader_parameter/number_of_images = Vector2(1, 1) + +[node name="LCB_Key" type="VBoxContainer"] +offset_right = 128.0 +offset_bottom = 155.0 +focus_mode = 1 +script = ExtResource("1_5bwgk") +outline_material = SubResource("ShaderMaterial_0dtby") + +[node name="Key" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 2 +texture = ExtResource("3_5sgan") + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 4 +text = "LCB钥匙" + +[connection signal="focus_entered" from="Key" to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="Key" to="." method="_on_focus_exited"] +[connection signal="mouse_entered" from="Key" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Key" to="." method="_on_area_2d_mouse_exited"] diff --git a/UI/station_keys/lcb2_key_control.tscn b/UI/station_keys/lcb2_key_control.tscn new file mode 100644 index 0000000..cb3e93d --- /dev/null +++ b/UI/station_keys/lcb2_key_control.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://63r8gueubu2q"] + +[ext_resource type="Script" path="res://UI/station_keys/outlined_key.gd" id="1_f23n4"] +[ext_resource type="Shader" path="res://shaders/outline.gdshader" id="2_op1qj"] +[ext_resource type="Texture2D" uid="uid://c3dplk5y1607u" path="res://Assets/LCB钥匙.png" id="3_2ad7b"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0dtby"] +shader = ExtResource("2_op1qj") +shader_parameter/color = Color(0, 1, 1, 1) +shader_parameter/width = 3.0 +shader_parameter/pattern = 1 +shader_parameter/inside = false +shader_parameter/add_margins = true +shader_parameter/number_of_images = Vector2(1, 1) + +[node name="LCB_Key" type="VBoxContainer"] +offset_right = 128.0 +offset_bottom = 155.0 +focus_mode = 1 +script = ExtResource("1_f23n4") +outline_material = SubResource("ShaderMaterial_0dtby") + +[node name="Key" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 2 +texture = ExtResource("3_2ad7b") + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 4 +text = "LCB钥匙" + +[connection signal="focus_entered" from="Key" to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="Key" to="." method="_on_focus_exited"] +[connection signal="mouse_entered" from="Key" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Key" to="." method="_on_area_2d_mouse_exited"] diff --git a/UI/station_keys/lcb_key_control.tscn b/UI/station_keys/lcb_key_control.tscn new file mode 100644 index 0000000..9866a01 --- /dev/null +++ b/UI/station_keys/lcb_key_control.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://biwdpy5pifxgi"] + +[ext_resource type="Script" path="res://UI/station_keys/outlined_key.gd" id="1_f23gc"] +[ext_resource type="Shader" path="res://shaders/outline.gdshader" id="2_uecg5"] +[ext_resource type="Texture2D" uid="uid://c3dplk5y1607u" path="res://Assets/LCB钥匙.png" id="3_dqlco"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0dtby"] +shader = ExtResource("2_uecg5") +shader_parameter/color = Color(0, 1, 1, 1) +shader_parameter/width = 3.0 +shader_parameter/pattern = 1 +shader_parameter/inside = false +shader_parameter/add_margins = true +shader_parameter/number_of_images = Vector2(1, 1) + +[node name="LCB_Key" type="VBoxContainer"] +offset_right = 128.0 +offset_bottom = 155.0 +focus_mode = 1 +script = ExtResource("1_f23gc") +outline_material = SubResource("ShaderMaterial_0dtby") + +[node name="Key" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 2 +texture = ExtResource("3_dqlco") + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 4 +text = "LCB钥匙" + +[connection signal="focus_entered" from="Key" to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="Key" to="." method="_on_focus_exited"] +[connection signal="mouse_entered" from="Key" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Key" to="." method="_on_area_2d_mouse_exited"] diff --git a/UI/station_keys/outlined_key.gd b/UI/station_keys/outlined_key.gd new file mode 100644 index 0000000..04cc933 --- /dev/null +++ b/UI/station_keys/outlined_key.gd @@ -0,0 +1,42 @@ + +extends VBoxContainer + +## 外轮廓线凸显shader材质 +@export var outline_material: ShaderMaterial + +## 鼠标进入范围外轮廓线颜色 +static var ENTERED_COLOR = Vector4(0, 1.0, 1.0, 0.5) +## 聚焦时外轮廓线颜色 +static var FOCUS_COLOR = Vector4(0, 1.0, 1.0, 1) + +signal on_focus + +var focus: bool = false + +## 鼠标进入检测范围 +func _on_area_2d_mouse_entered(): + if not focus: + outline_material.set_shader_parameter("color", ENTERED_COLOR) + %Key.material = outline_material + +## 鼠标离开检测范围 +func _on_area_2d_mouse_exited(): + if not focus: + %Key.material = null + +func _on_focus_entered(): + focus = true + on_focus.emit(self) + outline_material.set_shader_parameter("color", FOCUS_COLOR) + %Key.material = outline_material + + +func _on_focus_exited(): + focus = false + %Key.material = null + +func hide_key(): + %Key.modulate.a = 0 + +func show_key(): + %Key.modulate.a = 255 diff --git a/UI/station_keys/psl_key_control.tscn b/UI/station_keys/psl_key_control.tscn new file mode 100644 index 0000000..f755f2a --- /dev/null +++ b/UI/station_keys/psl_key_control.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://dnmfwdvba6td3"] + +[ext_resource type="Texture2D" uid="uid://bo00i4cjotiha" path="res://Assets/PSL钥匙.png" id="1_mk67g"] +[ext_resource type="Script" path="res://UI/station_keys/outlined_key.gd" id="2_04vl8"] +[ext_resource type="Shader" path="res://shaders/outline.gdshader" id="3_cglet"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0dtby"] +shader = ExtResource("3_cglet") +shader_parameter/color = Color(0, 1, 1, 1) +shader_parameter/width = 3.0 +shader_parameter/pattern = 1 +shader_parameter/inside = false +shader_parameter/add_margins = true +shader_parameter/number_of_images = Vector2(1, 1) + +[node name="PSL_Key" type="VBoxContainer"] +offset_right = 128.0 +offset_bottom = 155.0 +focus_mode = 1 +script = ExtResource("2_04vl8") +outline_material = SubResource("ShaderMaterial_0dtby") + +[node name="Key" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 2 +texture = ExtResource("1_mk67g") + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 4 +text = "PSL钥匙" + +[connection signal="focus_entered" from="Key" to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="Key" to="." method="_on_focus_exited"] +[connection signal="mouse_entered" from="Key" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Key" to="." method="_on_area_2d_mouse_exited"] diff --git a/UI/station_keys/sdjs_key_control.tscn b/UI/station_keys/sdjs_key_control.tscn new file mode 100644 index 0000000..07f9b59 --- /dev/null +++ b/UI/station_keys/sdjs_key_control.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=5 format=3 uid="uid://cjjs2fsw6i8ye"] + +[ext_resource type="Texture2D" uid="uid://t2bidn6kf7rd" path="res://Assets/手动解锁钥匙.png" id="1_q15ly"] +[ext_resource type="Script" path="res://UI/station_keys/outlined_key.gd" id="2_hf0aq"] +[ext_resource type="Shader" path="res://shaders/outline.gdshader" id="3_dxun7"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_0dtby"] +shader = ExtResource("3_dxun7") +shader_parameter/color = Color(0, 1, 1, 1) +shader_parameter/width = 3.0 +shader_parameter/pattern = 1 +shader_parameter/inside = false +shader_parameter/add_margins = true +shader_parameter/number_of_images = Vector2(1, 1) + +[node name="SDJS_Key" type="VBoxContainer"] +offset_right = 128.0 +offset_bottom = 155.0 +focus_mode = 1 +script = ExtResource("2_hf0aq") +outline_material = SubResource("ShaderMaterial_0dtby") + +[node name="Key" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 2 +focus_mode = 2 +texture = ExtResource("1_q15ly") + +[node name="Label" type="Label" parent="."] +layout_mode = 2 +size_flags_horizontal = 4 +text = "手动解锁钥匙" + +[connection signal="focus_entered" from="Key" to="." method="_on_focus_entered"] +[connection signal="focus_exited" from="Key" to="." method="_on_focus_exited"] +[connection signal="mouse_entered" from="Key" to="." method="_on_area_2d_mouse_entered"] +[connection signal="mouse_exited" from="Key" to="." method="_on_area_2d_mouse_exited"] diff --git a/UI/station_keys/station_keys_window.gd b/UI/station_keys/station_keys_window.gd new file mode 100644 index 0000000..5f3ba22 --- /dev/null +++ b/UI/station_keys/station_keys_window.gd @@ -0,0 +1,25 @@ +extends Window + +var current_focus: CanvasItem + +func _on_key_focus_entered(node): + current_focus = node + print("node : ", current_focus.name, " focus") + + +func _on_button_pressed(): + if current_focus == null: + print("请选择钥匙") + else: + print("使用钥匙:", current_focus.name) + current_focus.hide_key() + + + +func _on_close_requested(): + print("close req") + self.hide() + + +func _on_show_button_pressed(): + self.show() diff --git a/UI/station_keys/station_keys_window.tscn b/UI/station_keys/station_keys_window.tscn new file mode 100644 index 0000000..1dee82f --- /dev/null +++ b/UI/station_keys/station_keys_window.tscn @@ -0,0 +1,83 @@ +[gd_scene load_steps=11 format=3 uid="uid://d167och8l6jms"] + +[ext_resource type="Theme" uid="uid://bycedcl2nwwlu" path="res://ui_theme.tres" id="1_gct42"] +[ext_resource type="PackedScene" uid="uid://dnmfwdvba6td3" path="res://UI/station_keys/psl_key_control.tscn" id="1_pwbsc"] +[ext_resource type="PackedScene" uid="uid://cjjs2fsw6i8ye" path="res://UI/station_keys/sdjs_key_control.tscn" id="1_wmags"] +[ext_resource type="Script" path="res://UI/station_keys/station_keys_window.gd" id="1_x7tnv"] +[ext_resource type="PackedScene" uid="uid://bsr40ogx2e2ir" path="res://UI/station_keys/jjtc_key_control.tscn" id="2_cndsv"] +[ext_resource type="PackedScene" uid="uid://dkqnt73pyqgwj" path="res://UI/station_keys/lcb1_key_control.tscn" id="2_h8ap0"] +[ext_resource type="FontFile" uid="uid://bkbpyidjguavf" path="res://Assets/FeiHuaSongTi-2.ttf" id="2_mlqh2"] +[ext_resource type="PackedScene" uid="uid://biwdpy5pifxgi" path="res://UI/station_keys/lcb_key_control.tscn" id="2_xelwb"] +[ext_resource type="PackedScene" uid="uid://63r8gueubu2q" path="res://UI/station_keys/lcb2_key_control.tscn" id="3_0e67u"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_1w22c"] + +[node name="Window" type="Window"] +title = "请选择钥匙" +position = Vector2i(10, 36) +size = Vector2i(532, 426) +wrap_controls = true +unresizable = true +transparent = true +theme = ExtResource("1_gct42") +theme_override_fonts/title_font = ExtResource("2_mlqh2") +script = ExtResource("1_x7tnv") + +[node name="PanelContainer" type="PanelContainer" parent="."] +offset_left = 4.0 +offset_top = 4.0 +offset_right = 528.0 +offset_bottom = 404.0 +theme_override_styles/panel = SubResource("StyleBoxEmpty_1w22c") + +[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer"] +layout_mode = 2 + +[node name="GridContainer" type="GridContainer" parent="PanelContainer/VBoxContainer"] +layout_mode = 2 +columns = 4 + +[node name="JJTC_Key" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("2_cndsv")] +layout_mode = 2 +tooltip_text = "紧急停车钥匙" + +[node name="LCB1_Key" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("2_h8ap0")] +layout_mode = 2 + +[node name="LCB2_Key" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("3_0e67u")] +layout_mode = 2 + +[node name="LCB2_Key2" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("3_0e67u")] +layout_mode = 2 + +[node name="LCB3_Key" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("2_xelwb")] +layout_mode = 2 + +[node name="PSL_Key" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("1_pwbsc")] +layout_mode = 2 + +[node name="SDJS_Key" parent="PanelContainer/VBoxContainer/GridContainer" instance=ExtResource("1_wmags")] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="PanelContainer/VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_top = 30 +theme_override_constants/margin_bottom = 0 + +[node name="Button" type="Button" parent="PanelContainer/VBoxContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +focus_mode = 0 +theme_override_font_sizes/font_size = 24 +text = "确认" + +[connection signal="close_requested" from="." to="." method="_on_close_requested"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/JJTC_Key" to="." method="_on_key_focus_entered"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/LCB1_Key" to="." method="_on_key_focus_entered"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/LCB2_Key" to="." method="_on_key_focus_entered"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/LCB2_Key2" to="." method="_on_key_focus_entered"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/LCB3_Key" to="." method="_on_key_focus_entered"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/PSL_Key" to="." method="_on_key_focus_entered"] +[connection signal="on_focus" from="PanelContainer/VBoxContainer/GridContainer/SDJS_Key" to="." method="_on_key_focus_entered"] +[connection signal="pressed" from="PanelContainer/VBoxContainer/MarginContainer/Button" to="." method="_on_button_pressed"] diff --git a/UI/transparent_window.gd b/UI/transparent_window.gd new file mode 100644 index 0000000..d248fb8 --- /dev/null +++ b/UI/transparent_window.gd @@ -0,0 +1 @@ +extends Window diff --git a/UI/transparent_window.tscn b/UI/transparent_window.tscn new file mode 100644 index 0000000..4ba1ca6 --- /dev/null +++ b/UI/transparent_window.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=6 format=3 uid="uid://bhtvin66eei32"] + +[ext_resource type="Script" path="res://UI/transparent_window.gd" id="1_bfvn2"] +[ext_resource type="PackedScene" uid="uid://bsr40ogx2e2ir" path="res://UI/station_keys/jjtc_key_control.tscn" id="1_l6iqj"] +[ext_resource type="PackedScene" uid="uid://dkqnt73pyqgwj" path="res://UI/station_keys/lcb1_key_control.tscn" id="2_5nk4v"] +[ext_resource type="PackedScene" uid="uid://63r8gueubu2q" path="res://UI/station_keys/lcb2_key_control.tscn" id="3_lpt01"] +[ext_resource type="PackedScene" uid="uid://biwdpy5pifxgi" path="res://UI/station_keys/lcb_key_control.tscn" id="4_ud6su"] + +[node name="Window" type="Window"] +transparent_bg = true +position = Vector2i(10, 36) +transparent = true +script = ExtResource("1_bfvn2") + +[node name="JJTC_Key" parent="." instance=ExtResource("1_l6iqj")] + +[node name="LCB_Key" parent="." instance=ExtResource("2_5nk4v")] + +[node name="LCB_Key2" parent="." instance=ExtResource("3_lpt01")] + +[node name="LCB_Key3" parent="." instance=ExtResource("4_ud6su")] diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..ea805c6 --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,37 @@ +[preset.0] + +name="station_keys" +platform="Web" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="target/godot_station_keys.html" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +variant/extensions_support=false +vram_texture_compression/for_desktop=true +vram_texture_compression/for_mobile=false +html/export_icon=true +html/custom_html_shell="" +html/head_include="" +html/canvas_resize_policy=2 +html/focus_canvas_on_start=true +html/experimental_virtual_keyboard=false +progressive_web_app/enabled=false +progressive_web_app/offline_page="" +progressive_web_app/display=1 +progressive_web_app/orientation=0 +progressive_web_app/icon_144x144="" +progressive_web_app/icon_180x180="" +progressive_web_app/icon_512x512="" +progressive_web_app/background_color=Color(0, 0, 0, 1) diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..b370ceb --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..5de226f --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://covd665fe5fb1" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..257ea99 --- /dev/null +++ b/project.godot @@ -0,0 +1,28 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="godot_experiments" +run/main_scene="res://UI/stand.tscn" +config/features=PackedStringArray("4.2", "GL Compatibility") +config/icon="res://icon.svg" + +[display] + +window/size/viewport_width=1920 +window/size/viewport_height=1080 +window/size/initial_position_type=0 +window/stretch/mode="canvas_items" + +[rendering] + +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" diff --git a/shaders/outline.gdshader b/shaders/outline.gdshader new file mode 100644 index 0000000..78e4c1d --- /dev/null +++ b/shaders/outline.gdshader @@ -0,0 +1,73 @@ +shader_type canvas_item; + +uniform vec4 color : source_color = vec4(1.0); +uniform float width : hint_range(0, 10) = 1.0; +uniform int pattern : hint_range(0, 2) = 0; // diamond, circle, square +uniform bool inside = false; +uniform bool add_margins = true; // only useful when inside is false +uniform vec2 number_of_images = vec2(1.0); // number of horizontal and vertical images in the sprite sheet + +varying flat vec4 modulate; + +void vertex() { + modulate = COLOR; + + if (add_margins) { + if ((UV.x <= 0.0 || UV.x >= 1.0) && (UV.y <= 0.0 || UV.y >= 1.0)) { + VERTEX += (UV * 2.0 - 1.0) * width; + } else { + VERTEX += sign(VERTEX) * width; // replace sign(VERTEX) by (sign(VERTEX) * 2.0 - 1.0) if your AnimatedSprite2D isn't Centered + } + } +} + +bool hasContraryNeighbour(vec2 uv, vec2 texture_pixel_size, vec2 image_top_left, vec2 image_bottom_right, sampler2D texture) { + for (float i = -ceil(width); i <= ceil(width); i++) { + float x = abs(i) > width ? width * sign(i) : i; + float offset; + + if (pattern == 0) { + offset = width - abs(x); + } else if (pattern == 1) { + offset = floor(sqrt(pow(width + 0.5, 2) - x * x)); + } else if (pattern == 2) { + offset = width; + } + + for (float j = -ceil(offset); j <= ceil(offset); j++) { + float y = abs(j) > offset ? offset * sign(j) : j; + vec2 xy = uv + texture_pixel_size * vec2(x, y); + + if ((xy != clamp(xy, image_top_left, image_bottom_right) || texture(texture, xy).a <= 0.0) == inside) { + return true; + } + } + } + + return false; +} + +void fragment() { + vec2 uv = UV; + vec2 image_top_left = floor(uv * number_of_images) / number_of_images; + vec2 image_bottom_right = image_top_left + vec2(1.0) / number_of_images; + + if (add_margins) { + vec2 texture_pixel_size = vec2(1.0) / (vec2(1.0) / TEXTURE_PIXEL_SIZE + vec2(width * 2.0) * number_of_images); + + uv = (uv - texture_pixel_size * width - image_top_left) * TEXTURE_PIXEL_SIZE / texture_pixel_size + image_top_left; + + if (uv != clamp(uv, image_top_left, image_bottom_right)) { + COLOR.a = 0.0; + } else { + COLOR = texture(TEXTURE, uv) * modulate; + } + } else { + COLOR = texture(TEXTURE, uv) * modulate; + } + + if ((COLOR.a > 0.0) == inside && hasContraryNeighbour(uv, TEXTURE_PIXEL_SIZE, image_top_left, image_bottom_right, TEXTURE)) { + COLOR.rgb = inside ? mix(COLOR.rgb, color.rgb * modulate.rgb, color.a * modulate.a) : color.rgb * modulate.rgb; + COLOR.a += (1.0 - COLOR.a) * color.a * modulate.a; + } +} diff --git a/ui_theme.tres b/ui_theme.tres new file mode 100644 index 0000000..9597bbf --- /dev/null +++ b/ui_theme.tres @@ -0,0 +1,19 @@ +[gd_resource type="Theme" load_steps=3 format=3 uid="uid://bycedcl2nwwlu"] + +[ext_resource type="FontFile" uid="uid://bkbpyidjguavf" path="res://Assets/FeiHuaSongTi-2.ttf" id="1_8lpqa"] + +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_spmjw"] + +[resource] +Button/fonts/font = ExtResource("1_8lpqa") +Label/colors/font_color = Color(1, 1, 1, 1) +Label/colors/font_outline_color = Color(1, 1, 1, 1) +Label/colors/font_shadow_color = Color(0, 0, 0, 0) +Label/constants/line_spacing = 3 +Label/constants/outline_size = 0 +Label/constants/shadow_offset_x = 1 +Label/constants/shadow_offset_y = 1 +Label/constants/shadow_outline_size = 1 +Label/font_sizes/font_size = 20 +Label/fonts/font = ExtResource("1_8lpqa") +Label/styles/normal = SubResource("StyleBoxEmpty_spmjw")