diff --git a/experiments/psd_panel.tscn b/experiments/psd_panel.tscn index 474dc7c..b2f3889 100644 --- a/experiments/psd_panel.tscn +++ b/experiments/psd_panel.tscn @@ -3,23 +3,22 @@ [ext_resource type="Script" path="res://experiments/psd_panel.gd" id="1_wg3fd"] [ext_resource type="PackedScene" uid="uid://c5vvgu50akjwl" path="res://experiments/psd_panel_ui.tscn" id="2_rtht1"] -[sub_resource type="ViewportTexture" id="ViewportTexture_c5roc"] +[sub_resource type="ViewportTexture" id="ViewportTexture_c7xnk"] viewport_path = NodePath("LabelTexture") [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_pbh8q"] -albedo_texture = SubResource("ViewportTexture_c5roc") +albedo_texture = SubResource("ViewportTexture_c7xnk") uv1_scale = Vector3(4, 1, 1) [sub_resource type="PlaneMesh" id="PlaneMesh_mfy0l"] resource_local_to_scene = true -size = Vector2(45.948, 2) +size = Vector2(131.533, 2) orientation = 2 [node name="PSD_Panel" type="Node3D"] script = ExtResource("1_wg3fd") repeat_times = 4.0 panel_width = 131.533 -station_names = null [node name="LabelTexture" type="SubViewport" parent="."] canvas_item_default_texture_repeat = 1 diff --git a/experiments/tes2180.tmp b/experiments/tes2180.tmp new file mode 100644 index 0000000..6d4bb02 --- /dev/null +++ b/experiments/tes2180.tmp @@ -0,0 +1,39 @@ +[gd_scene load_steps=7 format=3 uid="uid://4ygkabji3g16"] + +[ext_resource type="PackedScene" uid="uid://bmiexmyoh0ehv" path="res://experiments/platform1.tscn" id="1_cq2ki"] +[ext_resource type="Script" path="res://experiments/test_3d.gd" id="1_uqsdo"] +[ext_resource type="PackedScene" uid="uid://crpmwcp85khdr" path="res://experiments/screen_door_t1.tscn" id="2_rvfj7"] +[ext_resource type="PackedScene" uid="uid://b5c3atssvhkwy" path="res://experiments/lcb.tscn" id="3_htmjl"] +[ext_resource type="PackedScene" uid="uid://c63e3ugq35q5g" path="res://experiments/psd_panel.tscn" id="4_wjde3"] + +[sub_resource type="Environment" id="Environment_mybsf"] +ambient_light_color = Color(0.831373, 0.290196, 0.556863, 1) +ambient_light_energy = 6.23 + +[node name="Node3D" type="Node3D"] +script = ExtResource("1_uqsdo") + +[node name="platform" parent="." instance=ExtResource("1_cq2ki")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.16258, 0) + +[node name="LCB" parent="." instance=ExtResource("3_htmjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.58244, 2.40247, -7.38809) + +[node name="PSD_Panel" parent="." instance=ExtResource("4_wjde3")] +transform = Transform3D(0.381944, 0, 0, 0, 0.381944, 0, 0, 0, 0.381944, 4.13301, 1.83159, -7.03252) + +[node name="screenDoor" parent="." instance=ExtResource("2_rvfj7")] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_mybsf") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.775947, 2.3125e-07, -0.630798, 0.387003, 0.789684, 0.476054, 0.498131, -0.613514, 0.612753, -0.369306, 2.06538, 1.72595) +light_energy = 4.962 + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.92041, 0.390956, 0, -0.390956, 0.92041, 4.25592, 2.82422, -2.07876) +projection = 1 +current = true +fov = 23.7 +size = 4.56913 diff --git a/experiments/tesDB48.tmp b/experiments/tesDB48.tmp new file mode 100644 index 0000000..6d4bb02 --- /dev/null +++ b/experiments/tesDB48.tmp @@ -0,0 +1,39 @@ +[gd_scene load_steps=7 format=3 uid="uid://4ygkabji3g16"] + +[ext_resource type="PackedScene" uid="uid://bmiexmyoh0ehv" path="res://experiments/platform1.tscn" id="1_cq2ki"] +[ext_resource type="Script" path="res://experiments/test_3d.gd" id="1_uqsdo"] +[ext_resource type="PackedScene" uid="uid://crpmwcp85khdr" path="res://experiments/screen_door_t1.tscn" id="2_rvfj7"] +[ext_resource type="PackedScene" uid="uid://b5c3atssvhkwy" path="res://experiments/lcb.tscn" id="3_htmjl"] +[ext_resource type="PackedScene" uid="uid://c63e3ugq35q5g" path="res://experiments/psd_panel.tscn" id="4_wjde3"] + +[sub_resource type="Environment" id="Environment_mybsf"] +ambient_light_color = Color(0.831373, 0.290196, 0.556863, 1) +ambient_light_energy = 6.23 + +[node name="Node3D" type="Node3D"] +script = ExtResource("1_uqsdo") + +[node name="platform" parent="." instance=ExtResource("1_cq2ki")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.16258, 0) + +[node name="LCB" parent="." instance=ExtResource("3_htmjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.58244, 2.40247, -7.38809) + +[node name="PSD_Panel" parent="." instance=ExtResource("4_wjde3")] +transform = Transform3D(0.381944, 0, 0, 0, 0.381944, 0, 0, 0, 0.381944, 4.13301, 1.83159, -7.03252) + +[node name="screenDoor" parent="." instance=ExtResource("2_rvfj7")] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_mybsf") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.775947, 2.3125e-07, -0.630798, 0.387003, 0.789684, 0.476054, 0.498131, -0.613514, 0.612753, -0.369306, 2.06538, 1.72595) +light_energy = 4.962 + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.92041, 0.390956, 0, -0.390956, 0.92041, 4.25592, 2.82422, -2.07876) +projection = 1 +current = true +fov = 23.7 +size = 4.56913 diff --git a/experiments/tesF8A3.tmp b/experiments/tesF8A3.tmp new file mode 100644 index 0000000..6d4bb02 --- /dev/null +++ b/experiments/tesF8A3.tmp @@ -0,0 +1,39 @@ +[gd_scene load_steps=7 format=3 uid="uid://4ygkabji3g16"] + +[ext_resource type="PackedScene" uid="uid://bmiexmyoh0ehv" path="res://experiments/platform1.tscn" id="1_cq2ki"] +[ext_resource type="Script" path="res://experiments/test_3d.gd" id="1_uqsdo"] +[ext_resource type="PackedScene" uid="uid://crpmwcp85khdr" path="res://experiments/screen_door_t1.tscn" id="2_rvfj7"] +[ext_resource type="PackedScene" uid="uid://b5c3atssvhkwy" path="res://experiments/lcb.tscn" id="3_htmjl"] +[ext_resource type="PackedScene" uid="uid://c63e3ugq35q5g" path="res://experiments/psd_panel.tscn" id="4_wjde3"] + +[sub_resource type="Environment" id="Environment_mybsf"] +ambient_light_color = Color(0.831373, 0.290196, 0.556863, 1) +ambient_light_energy = 6.23 + +[node name="Node3D" type="Node3D"] +script = ExtResource("1_uqsdo") + +[node name="platform" parent="." instance=ExtResource("1_cq2ki")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.16258, 0) + +[node name="LCB" parent="." instance=ExtResource("3_htmjl")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.58244, 2.40247, -7.38809) + +[node name="PSD_Panel" parent="." instance=ExtResource("4_wjde3")] +transform = Transform3D(0.381944, 0, 0, 0, 0.381944, 0, 0, 0, 0.381944, 4.13301, 1.83159, -7.03252) + +[node name="screenDoor" parent="." instance=ExtResource("2_rvfj7")] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_mybsf") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.775947, 2.3125e-07, -0.630798, 0.387003, 0.789684, 0.476054, 0.498131, -0.613514, 0.612753, -0.369306, 2.06538, 1.72595) +light_energy = 4.962 + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.92041, 0.390956, 0, -0.390956, 0.92041, 4.25592, 2.82422, -2.07876) +projection = 1 +current = true +fov = 23.7 +size = 4.56913 diff --git a/experiments/test_3d.tscn b/experiments/test_3d.tscn index 5daeae1..4aec681 100644 --- a/experiments/test_3d.tscn +++ b/experiments/test_3d.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=6 format=3 uid="uid://4ygkabji3g16"] +[gd_scene load_steps=7 format=3 uid="uid://4ygkabji3g16"] [ext_resource type="PackedScene" uid="uid://bmiexmyoh0ehv" path="res://experiments/platform1.tscn" id="1_cq2ki"] [ext_resource type="PackedScene" uid="uid://c8btaqbln1kwd" path="res://Assets/models/test.blend" id="1_vdsgb"] [ext_resource type="PackedScene" uid="uid://crpmwcp85khdr" path="res://experiments/screen_door_t1.tscn" id="2_rvfj7"] -[ext_resource type="PackedScene" uid="uid://c63e3ugq35q5g" path="res://experiments/psd_panel.tscn" id="4_wjde3"] +[ext_resource type="PackedScene" uid="uid://cgu3hl1db2sgn" path="res://station_info_panel/style1/current_station_panel.tscn" id="4_ba44j"] +[ext_resource type="PackedScene" uid="uid://bakfrv2vd4ya3" path="res://station_info_panel/style1/site_panel.tscn" id="5_5lsy8"] [sub_resource type="Environment" id="Environment_mybsf"] ambient_light_color = Color(0.831373, 0.290196, 0.556863, 1) @@ -17,11 +18,6 @@ ambient_light_energy = 6.23 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.16258, 0) visible = false -[node name="PSD_Panel" parent="." instance=ExtResource("4_wjde3")] -transform = Transform3D(0.381944, 0, 0, 0, 0.381944, 0, 0, 0, 0.381944, 15.3792, 1.86346, -7.03252) -visible = false -station_names = Array[String]([]) - [node name="screenDoor" parent="." instance=ExtResource("2_rvfj7")] [node name="WorldEnvironment" type="WorldEnvironment" parent="."] @@ -37,3 +33,9 @@ projection = 1 current = true fov = 23.7 size = 5.357 + +[node name="CurrentStationPanel" parent="." instance=ExtResource("4_ba44j")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.23448, -6.85517) + +[node name="SitePanel" parent="." instance=ExtResource("5_5lsy8")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.012841, 3.83133, -6.10879) diff --git a/project.godot b/project.godot index 41a0d30..0fc0003 100644 --- a/project.godot +++ b/project.godot @@ -11,14 +11,14 @@ config_version=5 [application] config/name="godot_experiments" -run/main_scene="res://experiments/test_3d.tscn" +run/main_scene="res://station_info_panel/style1/site_panel_content.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/viewport_width=1680 +window/size/viewport_height=920 window/size/initial_position_type=0 window/stretch/mode="canvas_items" diff --git a/station_info_panel/style1/SourceHanSerifCN-Regular.ttf b/station_info_panel/style1/SourceHanSerifCN-Regular.ttf new file mode 100644 index 0000000..9c68daf Binary files /dev/null and b/station_info_panel/style1/SourceHanSerifCN-Regular.ttf differ diff --git a/station_info_panel/style1/SourceHanSerifCN-Regular.ttf.import b/station_info_panel/style1/SourceHanSerifCN-Regular.ttf.import new file mode 100644 index 0000000..2ee3215 --- /dev/null +++ b/station_info_panel/style1/SourceHanSerifCN-Regular.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://c0kstbg4bshow" +path="res://.godot/imported/SourceHanSerifCN-Regular.ttf-97c80509c35f0aa3b81c9fd1373f7202.fontdata" + +[deps] + +source_file="res://station_info_panel/style1/SourceHanSerifCN-Regular.ttf" +dest_files=["res://.godot/imported/SourceHanSerifCN-Regular.ttf-97c80509c35f0aa3b81c9fd1373f7202.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/station_info_panel/style1/current_station_panel.gd b/station_info_panel/style1/current_station_panel.gd index e617e07..ef2a078 100644 --- a/station_info_panel/style1/current_station_panel.gd +++ b/station_info_panel/style1/current_station_panel.gd @@ -1,4 +1,4 @@ -#@tool +@tool extends Node3D ## 面板宽度,单位(m) diff --git a/station_info_panel/style1/current_station_panel.tscn b/station_info_panel/style1/current_station_panel.tscn index b952d85..db3b6f6 100644 --- a/station_info_panel/style1/current_station_panel.tscn +++ b/station_info_panel/style1/current_station_panel.tscn @@ -1,9 +1,13 @@ -[gd_scene load_steps=5 format=3 uid="uid://cgu3hl1db2sgn"] +[gd_scene load_steps=6 format=3 uid="uid://cgu3hl1db2sgn"] [ext_resource type="Script" path="res://station_info_panel/style1/current_station_panel.gd" id="1_farda"] [ext_resource type="PackedScene" uid="uid://cnc8yp8xdrm00" path="res://station_info_panel/style1/current_station_panel_content.tscn" id="2_v131p"] +[sub_resource type="ViewportTexture" id="ViewportTexture_5b541"] +viewport_path = NodePath("SubViewport") + [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hypnq"] +albedo_texture = SubResource("ViewportTexture_5b541") [sub_resource type="PlaneMesh" id="PlaneMesh_xu5kk"] size = Vector2(5.189, 1.459) @@ -18,7 +22,6 @@ panelHeight = 1.459 size = Vector2i(1024, 256) [node name="CurrentStationPanelContent" parent="SubViewport" instance=ExtResource("2_v131p")] -bgColor = Color(0.662745, 0.662745, 0.662745, 1) [node name="Plane" type="MeshInstance3D" parent="."] material_override = SubResource("StandardMaterial3D_hypnq") diff --git a/station_info_panel/style1/current_station_panel_content.gd b/station_info_panel/style1/current_station_panel_content.gd index 9320d21..e725c14 100644 --- a/station_info_panel/style1/current_station_panel_content.gd +++ b/station_info_panel/style1/current_station_panel_content.gd @@ -59,8 +59,8 @@ func update(): # 更新背景色 $Bg["theme_override_styles/panel"].bg_color = bgColor # 装饰条颜色 - $Bg/Strip["theme_override_styles/panel"].color = stripColor - $Bg/Strip2["theme_override_styles/panel"].color = stripColor + $Bg/Strip["theme_override_styles/panel"].bg_color = stripColor + $Bg/Strip2["theme_override_styles/panel"].bg_color = stripColor # 控制线路显示 if lineInfoShow: $LineInfo["theme_override_styles/panel"].bg_color = lineInfoBgColor diff --git a/station_info_panel/style1/current_station_panel_content.tscn b/station_info_panel/style1/current_station_panel_content.tscn index 7b87c6e..9522edd 100644 --- a/station_info_panel/style1/current_station_panel_content.tscn +++ b/station_info_panel/style1/current_station_panel_content.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=7 format=3 uid="uid://cnc8yp8xdrm00"] +[gd_scene load_steps=8 format=3 uid="uid://cnc8yp8xdrm00"] [ext_resource type="Script" path="res://station_info_panel/style1/current_station_panel_content.gd" id="1_wspij"] @@ -10,9 +10,11 @@ border_width_right = 2 border_width_bottom = 2 border_color = Color(0, 0, 0, 1) -[sub_resource type="StyleBoxLine" id="StyleBoxLine_vsvkd"] -color = Color(0, 0.392157, 0, 1) -thickness = 24 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_880ss"] +bg_color = Color(0, 0.392157, 0, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7u3ik"] +bg_color = Color(0, 0.392157, 0, 1) [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_iudvd"] bg_color = Color(0, 0.392157, 0, 1) @@ -48,16 +50,16 @@ layout_mode = 0 offset_left = 3.0 offset_top = 100.0 offset_right = 223.0 -offset_bottom = 124.0 -theme_override_styles/panel = SubResource("StyleBoxLine_vsvkd") +offset_bottom = 120.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_880ss") [node name="Strip2" type="Panel" parent="Bg"] layout_mode = 0 offset_left = 801.0 offset_top = 100.0 offset_right = 1021.0 -offset_bottom = 124.0 -theme_override_styles/panel = SubResource("StyleBoxLine_vsvkd") +offset_bottom = 120.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_7u3ik") [node name="LineInfo" type="PanelContainer" parent="."] custom_minimum_size = Vector2(100, 60) diff --git a/SiteInfo.gd b/station_info_panel/style1/site_info.gd similarity index 77% rename from SiteInfo.gd rename to station_info_panel/style1/site_info.gd index de580ad..7df0da9 100644 --- a/SiteInfo.gd +++ b/station_info_panel/style1/site_info.gd @@ -29,6 +29,10 @@ extends Node2D set(v): stationEnName = v update() +## 站点圆圈样式 +@export var siteCircleStyle: StyleBoxFlat +## 站点条样式 +@export var siteStripStyle: StyleBoxFlat var isReady = false @@ -36,11 +40,11 @@ func update(): if not isReady: return # 更新背景色 - $Strip["theme_override_styles/panel"].bg_color = stripColor - $Circle["theme_override_styles/panel"].border_color = stripColor + $Strip["theme_override_styles/panel"] = siteStripStyle + $Circle["theme_override_styles/panel"] = siteCircleStyle # 更新文字颜色 - %Name.label_settings.font_color = nameColor - %EnName.label_settings.font_color = nameColor + %Name["theme_override_colors/font_color"] = nameColor + %EnName["theme_override_colors/font_color"] = nameColor # 更新文字 %Name.text = stationName %EnName.text = stationEnName @@ -55,7 +59,6 @@ func calculateWidth() -> float: return w + 5 func _ready(): - print("site info ready") isReady = true update() diff --git a/station_info_panel/style1/site_info.tscn b/station_info_panel/style1/site_info.tscn index 7057f4b..0ca4324 100644 --- a/station_info_panel/style1/site_info.tscn +++ b/station_info_panel/style1/site_info.tscn @@ -1,41 +1,15 @@ -[gd_scene load_steps=8 format=3 uid="uid://dbun083kn0oom"] +[gd_scene load_steps=5 format=3 uid="uid://dbun083kn0oom"] -[ext_resource type="Script" path="res://SiteInfo.gd" id="1_x2sr2"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_flnbk"] -bg_color = Color(0, 1, 1, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_j0fnk"] -bg_color = Color(1, 1, 1, 1) -border_width_left = 7 -border_width_top = 7 -border_width_right = 7 -border_width_bottom = 7 -border_color = Color(0, 1, 1, 1) -corner_radius_top_left = 40 -corner_radius_top_right = 40 -corner_radius_bottom_right = 40 -corner_radius_bottom_left = 40 - -[sub_resource type="SystemFont" id="SystemFont_7obcg"] - -[sub_resource type="LabelSettings" id="LabelSettings_6l0vq"] -font = SubResource("SystemFont_7obcg") -font_size = 20 -font_color = Color(0, 0, 1, 1) - -[sub_resource type="SystemFont" id="SystemFont_ys3vy"] - -[sub_resource type="LabelSettings" id="LabelSettings_uy188"] -font = SubResource("SystemFont_ys3vy") -font_size = 11 -font_color = Color(0, 0, 1, 1) +[ext_resource type="Script" path="res://station_info_panel/style1/site_info.gd" id="1_ys73f"] +[ext_resource type="FontFile" uid="uid://c0kstbg4bshow" path="res://station_info_panel/style1/SourceHanSerifCN-Regular.ttf" id="2_26ovv"] +[ext_resource type="StyleBox" uid="uid://ddj1ajtx312pj" path="res://station_info_panel/style1/site_style_circle.tres" id="2_qdtjh"] +[ext_resource type="StyleBox" uid="uid://dxf00nrmospua" path="res://station_info_panel/style1/site_style_strip.tres" id="3_55roq"] [node name="SiteInfo" type="Node2D"] -script = ExtResource("1_x2sr2") -stripColor = Color(0, 0.788235, 0.482353, 1) -stationName = "北客站北广场" +script = ExtResource("1_ys73f") stationEnName = "DATANGFURONGYUAN" +siteCircleStyle = ExtResource("2_qdtjh") +siteStripStyle = ExtResource("3_55roq") [node name="Strip" type="Panel" parent="."] anchors_preset = 5 @@ -45,8 +19,7 @@ offset_left = -3.5 offset_right = 3.5 offset_bottom = 34.0 grow_horizontal = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_flnbk") -metadata/_edit_use_anchors_ = true +theme_override_styles/panel = ExtResource("3_55roq") [node name="Circle" type="Panel" parent="."] anchors_preset = 8 @@ -60,7 +33,7 @@ offset_right = 17.0 offset_bottom = 19.0 grow_horizontal = 2 grow_vertical = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_j0fnk") +theme_override_styles/panel = ExtResource("2_qdtjh") [node name="VBoxContainer" type="VBoxContainer" parent="."] offset_left = 10.0 @@ -74,18 +47,16 @@ theme_override_constants/separation = -4 [node name="Name" type="Label" parent="VBoxContainer"] unique_name_in_owner = true layout_mode = 2 -text = "北客站北广场" -label_settings = SubResource("LabelSettings_6l0vq") +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("2_26ovv") +theme_override_font_sizes/font_size = 20 +text = "车站一" vertical_alignment = 2 [node name="EnName" type="Label" parent="VBoxContainer"] unique_name_in_owner = true layout_mode = 2 +theme_override_colors/font_color = Color(1, 1, 1, 1) +theme_override_fonts/font = ExtResource("2_26ovv") +theme_override_font_sizes/font_size = 11 text = "DATANGFURONGYUAN" -label_settings = SubResource("LabelSettings_uy188") - -[node name="Panel" type="Panel" parent="."] -offset_left = -2.0 -offset_top = -10.0 -offset_right = 71.0 -offset_bottom = 190.0 diff --git a/station_info_panel/style1/site_panel.gd b/station_info_panel/style1/site_panel.gd index 14311ad..0f22fd8 100644 --- a/station_info_panel/style1/site_panel.gd +++ b/station_info_panel/style1/site_panel.gd @@ -1,56 +1,34 @@ @tool -extends Node2D +extends Node3D -## 从左到右/从右到左 -@export var leftToRight: bool = true: +## 面板宽度,单位(m) +@export_range(1, 10) var panelWidth: float = 3: get: - return leftToRight + return panelWidth set(v): - leftToRight = v + panelWidth = v update() -## 车站列表 -@export var stations: Array[String] = ["车站一|CHEZHANYI"]: +## 面板高度,单位(m) +@export_range(0.1, 5) var panelHeight: float = 1: get: - return stations + return panelHeight set(v): - stations = v - assert(stations.size() > 0, "车站列表不能为空") - for s in stations: - assert(s.split("|").size() == 2, "车站名格式:'车站名|车站英文名'") - update() -## 当前车站索引 -@export var currentStationIndex: int = 0: - get: - return currentStationIndex - set(v): - currentStationIndex = v + panelHeight = v update() +var isReady: bool -@onready var siteInfoScene: PackedScene = preload("res://station_info_panel/style1/site_info.tscn") - -var isReady = false func update(): if not isReady: - return - for c in $Sites.get_children(): - c.free() - var size = stations.size() - var s = stations[0] - var sns = s.split("|") - var sis = siteInfoScene.instantiate() - sis.stationName = sns[0] - sis.stationEnName = sns[1] - sis.stripColor = Color.AQUA - sis.nameColor = Color.BLUE - $Sites.add_child(sis) + var vp = $SubViewport - var w = sis.calculateWidth() - print(w) - #for i in stations.size(): - + $Plane.mesh.size.x = panelWidth + $Plane.mesh.size.y = panelHeight + $Plane.material_override.albedo_texture = vp.get_texture() + func _ready(): isReady = true + print("csPanel ready") update() diff --git a/station_info_panel/style1/site_panel.tscn b/station_info_panel/style1/site_panel.tscn index 6ddaeb2..0967301 100644 --- a/station_info_panel/style1/site_panel.tscn +++ b/station_info_panel/style1/site_panel.tscn @@ -1,50 +1,27 @@ -[gd_scene load_steps=5 format=3 uid="uid://dsv55hv2sr7hd"] +[gd_scene load_steps=6 format=3 uid="uid://bakfrv2vd4ya3"] +[ext_resource type="PackedScene" uid="uid://dsv55hv2sr7hd" path="res://station_info_panel/style1/site_panel_content.tscn" id="1_ayfto"] [ext_resource type="Script" path="res://station_info_panel/style1/site_panel.gd" id="1_fjyyy"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_48edc"] -bg_color = Color(0.941176, 0.466667, 0.788235, 1) -border_width_left = 2 -border_width_top = 2 -border_width_right = 2 -border_width_bottom = 2 -border_color = Color(0, 0, 0, 1) +[sub_resource type="ViewportTexture" id="ViewportTexture_g2fgb"] +viewport_path = NodePath("SubViewport") -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dmayk"] -bg_color = Color(0.113725, 0.470588, 0.113725, 1) +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hypnq"] +albedo_texture = SubResource("ViewportTexture_g2fgb") -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ve86j"] -bg_color = Color(0.47451, 0.47451, 0.47451, 1) +[sub_resource type="PlaneMesh" id="PlaneMesh_xu5kk"] +size = Vector2(4, 1) +orientation = 2 -[node name="SitePanel" type="Node2D"] +[node name="SitePanel" type="Node3D"] script = ExtResource("1_fjyyy") -stations = Array[String](["北客站北广场|BEIKEZHAN"]) +panelWidth = 4.0 -[node name="Bg" type="Panel" parent="."] -offset_right = 1450.0 -offset_bottom = 350.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_48edc") +[node name="SubViewport" type="SubViewport" parent="."] +size = Vector2i(1450, 350) -[node name="Unfinished" type="Panel" parent="Bg"] -layout_mode = 0 -offset_left = 3.0 -offset_top = 100.0 -offset_right = 223.0 -offset_bottom = 120.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_dmayk") +[node name="SitePanel" parent="SubViewport" instance=ExtResource("1_ayfto")] -[node name="Finished" type="Panel" parent="Bg"] -layout_mode = 0 -offset_left = 500.0 -offset_top = 100.0 -offset_right = 720.0 -offset_bottom = 120.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_ve86j") - -[node name="Sites" type="Control" parent="."] -layout_mode = 3 -anchors_preset = 0 -offset_left = 176.0 -offset_top = 110.0 -offset_right = 216.0 -offset_bottom = 150.0 +[node name="Plane" type="MeshInstance3D" parent="."] +material_override = SubResource("StandardMaterial3D_hypnq") +mesh = SubResource("PlaneMesh_xu5kk") diff --git a/station_info_panel/style1/site_panel_content.gd b/station_info_panel/style1/site_panel_content.gd new file mode 100644 index 0000000..5e7d489 --- /dev/null +++ b/station_info_panel/style1/site_panel_content.gd @@ -0,0 +1,160 @@ +@tool +extends Node2D + +## 从左到右/从右到左 +@export var leftToRight: bool = true: + get: + return leftToRight + set(v): + leftToRight = v + update() +## 车站列表 +@export var stations: Array[String] = [ + "航天新城|HANGTIANXINCHENG","航天东路|HANGTIANDONGLU","神舟大道|SHENZHOUDADAO", + "东长安街|DONGCHANGANJIE","飞天路|FEITIANLU", + "航天大道|HANGTIANDADAO","金滹沱|JINHUTUO","曲江池西|QUJIANGCHIXI", + "大唐芙蓉园|DATANGFURONGYUAN","大雁塔|DAYANTA","西安科技大学|XIANKEJIDAXUE", + "建筑科技大学·李家村|JIANZHUKEJIDAXUE-LIJIACUN","和平门|HEPINGMEN", + "大差市|DACHAISHI","五路口|WULUKOU","西安站|XIANZHAN","含元殿|HANYUANDIAN", + "大明宫|DAMINGGONG","大明宫北|DAMINGGONGBEI","余家寨|YUJIAZHAI", + "百花村|BAIHUACUN","常青路|CHANGQINGLU", + "市中医医院|SHIZHONGYIYIYUAN","行政中心|XINGZHENGZHONGXIN","文景路|WENJINGLU", + "凤城九路|FENGCHENGJIULU","凤城十二路|FENGCHENGSHIERLU","元朔路|YUANSHUOLU", + "北客站(北广场)|BEIKEZHAN(BEIGUANGCHANG)"]: + get: + return stations + set(v): + stations = v + assert(stations.size() > 0, "车站列表不能为空") + for s in stations: + assert(s.split("|").size() == 2, "车站名格式:'车站名|车站英文名'") + update() +## 当前车站索引 +@export var currentStationIndex: int = 0: + get: + return currentStationIndex + set(v): + currentStationIndex = v + assert(v >= 0 && v < stations.size(), "当前站超出车站索引范围") + update() +## 背景色 +@export var bgColor: Color = Color.DARK_GRAY: + get: + return bgColor + set(v): + bgColor = v + update() +## 已经过站点图标颜色 +@export var finishedColor: Color = Color.DARK_GRAY: + get: + return finishedColor + set(v): + finishedColor = v + update() +## 未经过站点图标颜色 +@export var unfinishedColor: Color = Color.DARK_GREEN: + get: + return unfinishedColor + set(v): + unfinishedColor = v + update() + +@onready var siteInfoScene: PackedScene = preload("res://station_info_panel/style1/site_info.tscn") +@onready var siteCircleStyle: StyleBoxFlat = preload("res://station_info_panel/style1/site_style_circle.tres") +@onready var siteStripStyle: StyleBoxFlat = preload("res://station_info_panel/style1/site_style_strip.tres") +## 站点样式缓存 +var siteStyleMap: Dictionary = {} + +const BorderWidth = 2 +const PassedColor = Color.DARK_GRAY + +var isReady = false + +# 重绘完成和未完成的线路条 +func updateBgStrips(): + var totalWidth = $Bg.size.x - (2 * BorderWidth) + if leftToRight: + var currentSite = $Sites.get_child(currentStationIndex) + $Bg/Finished["theme_override_styles/panel"].bg_color = finishedColor + $Bg/Finished.position.x = BorderWidth + $Bg/Finished.size.x = currentSite.position.x - BorderWidth + $Bg/Unfinished["theme_override_styles/panel"].bg_color = unfinishedColor + $Bg/Unfinished.position.x = currentSite.position.x + $Bg/Unfinished.size.x = totalWidth - currentSite.position.x + else: + var currentSite = $Sites.get_child(stations.size()-1-currentStationIndex) + $Bg/Finished["theme_override_styles/panel"].bg_color = finishedColor + $Bg/Finished.position.x = currentSite.position.x + $Bg/Finished.size.x = totalWidth - currentSite.position.x + $Bg/Unfinished["theme_override_styles/panel"].bg_color = unfinishedColor + $Bg/Unfinished.position.x = BorderWidth + $Bg/Unfinished.size.x = currentSite.position.x - BorderWidth + +## 更新站点颜色样式 +func updateSite(site, siteStyleColor: Color, nameColor): + var key = siteStyleColor.to_html() + var siteStyle + if siteStyleMap.has(key): + siteStyle = siteStyleMap[key] + else: + var circleStyle = siteCircleStyle.duplicate() + var stripStyle = siteStripStyle.duplicate() + circleStyle.border_color = siteStyleColor + stripStyle.bg_color = siteStyleColor + siteStyle = {"circle": circleStyle, "strip": stripStyle} + siteStyleMap[key] = siteStyle + site.siteCircleStyle = siteStyle["circle"] + site.siteStripStyle = siteStyle["strip"] + site.nameColor = nameColor + +## 重绘 +func update(): + if not isReady: + return + # 更新前先删除之前的 + for c in $Sites.get_children(): + c.free() + # 更新背景色 + $Bg["theme_override_styles/panel"].bg_color = bgColor + # 根据方向添加站点信息组件 + var size = stations.size() + var range: Array + if leftToRight: + range = range(size) + else: + range = range(size-1, -1, -1) + assert(currentStationIndex >= 0 && currentStationIndex < size, "当前站超出车站索引范围") + for i in range: + var si = stations[i] + var sns = si.split("|") + var sis = siteInfoScene.instantiate() + sis.stationName = sns[0] + sis.stationEnName = sns[1] + if i > currentStationIndex: + updateSite(sis, unfinishedColor, unfinishedColor) + else: + #sis.siteCircleStyle = siteFinishedCircleStyle + #sis.siteStripStyle = siteFinishedStripStyle + #sis.nameColor = finishedColor + updateSite(sis, finishedColor, finishedColor) + $Sites.add_child(sis) + # 计算边界最小尺寸(最右边文字不超出边界) + var last = $Sites.get_child(size-1) + var edgeWidth = last.calculateWidth() + # 计算间隔 + var totalWidth = $Bg.size.x - (2 * BorderWidth) + var interval = totalWidth / (size + 1) + print(edgeWidth, ", ", interval) + if interval < edgeWidth: + var remain = totalWidth - edgeWidth + interval = remain / size + var i = 1 + for sc in $Sites.get_children(): + sc.position.x += i * interval + i += 1 + # 更新线路条 + updateBgStrips() + +func _ready(): + isReady = true + update() diff --git a/station_info_panel/style1/site_panel_content.tscn b/station_info_panel/style1/site_panel_content.tscn new file mode 100644 index 0000000..c3e2b28 --- /dev/null +++ b/station_info_panel/style1/site_panel_content.tscn @@ -0,0 +1,52 @@ +[gd_scene load_steps=5 format=3 uid="uid://dsv55hv2sr7hd"] + +[ext_resource type="Script" path="res://station_info_panel/style1/site_panel_content.gd" id="1_rx766"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_48edc"] +bg_color = Color(0.290196, 0.309804, 0.333333, 1) +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(0, 0, 0, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_dmayk"] +bg_color = Color(0.929412, 0.407843, 0.0745098, 1) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ve86j"] +bg_color = Color(0.662745, 0.662745, 0.662745, 1) + +[node name="SitePanel" type="Node2D"] +script = ExtResource("1_rx766") +currentStationIndex = 5 +bgColor = Color(0.290196, 0.309804, 0.333333, 1) +unfinishedColor = Color(0.929412, 0.407843, 0.0745098, 1) + +[node name="Bg" type="Panel" parent="."] +offset_right = 1450.0 +offset_bottom = 350.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_48edc") + +[node name="Unfinished" type="Panel" parent="Bg"] +layout_mode = 0 +offset_left = 275.763 +offset_top = 110.0 +offset_right = 1446.0 +offset_bottom = 130.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_dmayk") + +[node name="Finished" type="Panel" parent="Bg"] +layout_mode = 0 +offset_left = 2.0 +offset_top = 110.0 +offset_right = 275.763 +offset_bottom = 130.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_ve86j") + +[node name="Sites" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 0 +offset_left = 2.0 +offset_top = 117.0 +offset_right = 42.0 +offset_bottom = 157.0 diff --git a/station_info_panel/style1/site_style_circle.tres b/station_info_panel/style1/site_style_circle.tres new file mode 100644 index 0000000..ef69df7 --- /dev/null +++ b/station_info_panel/style1/site_style_circle.tres @@ -0,0 +1,14 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://ddj1ajtx312pj"] + +[resource] +bg_color = Color(1, 1, 1, 1) +border_width_left = 7 +border_width_top = 7 +border_width_right = 7 +border_width_bottom = 7 +border_color = Color(0.662745, 0.662745, 0.662745, 1) +corner_radius_top_left = 40 +corner_radius_top_right = 40 +corner_radius_bottom_right = 40 +corner_radius_bottom_left = 40 +shadow_color = Color(0, 0, 0, 0.780392) diff --git a/station_info_panel/style1/site_style_strip.tres b/station_info_panel/style1/site_style_strip.tres new file mode 100644 index 0000000..64da94c --- /dev/null +++ b/station_info_panel/style1/site_style_strip.tres @@ -0,0 +1,4 @@ +[gd_resource type="StyleBoxFlat" format=3 uid="uid://dxf00nrmospua"] + +[resource] +bg_color = Color(0.662745, 0.662745, 0.662745, 1) diff --git a/station_info_panel/style1/station_site_info.gd b/station_info_panel/style1/station_site_info.gd new file mode 100644 index 0000000..e32d768 --- /dev/null +++ b/station_info_panel/style1/station_site_info.gd @@ -0,0 +1,8 @@ +class_name StationSiteInfo + +## 中文名 +var name: String +## 英文/拼音名称 +var enName: String +## 是否换乘站 +var isTransfer: bool