From b47de9306b3e52ccf8869a17156362a9b104c8db Mon Sep 17 00:00:00 2001 From: Tiger Date: Fri, 13 Feb 2026 20:04:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E4=BA=86?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E6=9C=AC=E5=9C=B0=E6=95=B0=E6=8D=AE=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/settings.tscn | 30 +++++++++++++++++++++++++++++ scripts/autoload/DownloadManager.gd | 21 ++++++++++++++++++++ scripts/autoload/GameManager.gd | 5 ++++- scripts/settings/settings.gd | 18 +++++++++++++++++ 4 files changed, 73 insertions(+), 1 deletion(-) diff --git a/scenes/settings.tscn b/scenes/settings.tscn index ddd3c4a..613536a 100644 --- a/scenes/settings.tscn +++ b/scenes/settings.tscn @@ -75,6 +75,26 @@ offset_bottom = 81.0 theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 24 +[node name="LoadSource" type="Node2D" parent="." unique_id=230611076] +position = Vector2(44, 314) +metadata/_edit_group_ = true + +[node name="LoadSourceLabel" type="Label" parent="LoadSource" unique_id=299353496] +offset_left = 9.0 +offset_top = 10.0 +offset_right = 132.0 +offset_bottom = 40.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 30 +text = "加载本地数据" + +[node name="ChooseSource" type="OptionButton" parent="LoadSource" unique_id=1045074926] +offset_left = 381.0 +offset_top = 5.0 +offset_right = 830.0 +offset_bottom = 60.0 +theme_override_font_sizes/font_size = 25 + [node name="SaveButton" type="Button" parent="." unique_id=1377249836] offset_left = 85.0 offset_top = 912.0 @@ -111,6 +131,16 @@ theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 50 text = "提示:无" +[node name="LoadButton" type="Button" parent="." unique_id=2015694853] +offset_left = 73.0 +offset_top = 793.0 +offset_right = 249.0 +offset_bottom = 882.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 30 +text = "加载数据" + [connection signal="pressed" from="SaveButton" to="." method="_on_save_button_pressed"] [connection signal="pressed" from="DownloadButton" to="." method="_on_download_button_pressed"] [connection signal="pressed" from="CancelButton" to="." method="_on_cancel_button_pressed"] +[connection signal="pressed" from="LoadButton" to="." method="_on_load_button_pressed"] diff --git a/scripts/autoload/DownloadManager.gd b/scripts/autoload/DownloadManager.gd index 1b7e753..4c4118b 100644 --- a/scripts/autoload/DownloadManager.gd +++ b/scripts/autoload/DownloadManager.gd @@ -69,6 +69,10 @@ func download_from_origin() -> int: get_uuid() + DirAccess.remove_absolute("user://download/temp/index.json") + DirAccess.remove_absolute("user://download/temp/") + + await download_file(origin + "index", "user://download/%s/index.json" % [uuid]) await download_file(origin + "card/list", "user://download/%s/cards/list.json" % [uuid]) await download_file(origin + "reaction/list", "user://download/%s/reactions/list.json" % [uuid]) await download_file(origin + "matter/list", "user://download/%s/matters/list.json" % [uuid]) @@ -80,6 +84,8 @@ func download_from_origin() -> int: await download_assets(origin) + get_sources() + return 0 func load_resource(): @@ -100,3 +106,18 @@ func load_resource(): GameManager.pic_list = asset_list["pics"] GameManager.sound_list = asset_list["sounds"] asset_file.close() + +func get_sources(): + var dir = DirAccess.open("user://download/") + var subdirs: PackedStringArray = dir.get_directories() + print(subdirs) + for subdir in subdirs: + if subdir == "temp": + continue + var file = FileAccess.open("user://download/%s/index.json" % [subdir], FileAccess.READ) + var text = file.get_as_text() + var content = JSON.parse_string(text) + file.close() + var source_name = content["name"] + var source_uuid = content["uuid"] + GameManager.sources[source_name] = source_uuid diff --git a/scripts/autoload/GameManager.gd b/scripts/autoload/GameManager.gd index 37a0871..bf54038 100644 --- a/scripts/autoload/GameManager.gd +++ b/scripts/autoload/GameManager.gd @@ -3,10 +3,13 @@ extends Node var data_origin: String = "" var ip_begin: String = "192.168." var username: String = "Player1" +var source: int = 0 var card_list: Dictionary = {} var matter_list: Dictionary = {} var reaction_list: Dictionary = {} var match_list: Dictionary = {} var pic_list: Dictionary = {} -var sound_list: Dictionary = {} \ No newline at end of file +var sound_list: Dictionary = {} + +var sources: Dictionary = {} \ No newline at end of file diff --git a/scripts/settings/settings.gd b/scripts/settings/settings.gd index 11a25c6..5ebcac9 100644 --- a/scripts/settings/settings.gd +++ b/scripts/settings/settings.gd @@ -1,14 +1,26 @@ extends Node2D func _ready() -> void: + init_sources() + init_text() + +func init_text() -> void: $DataSetting/LineEdit.text = GameManager.data_origin $IPBeginSetting/LineEdit.text = GameManager.ip_begin $UsernameSetting/LineEdit.text = GameManager.username + $LoadSource/ChooseSource.select(GameManager.source) + +func init_sources() -> void: + DownloadManager.get_sources() + var options = $LoadSource/ChooseSource + for source_name in GameManager.sources: + options.add_item(source_name) func _on_save_button_pressed() -> void: GameManager.data_origin = $DataSetting/LineEdit.text GameManager.ip_begin = $IPBeginSetting/LineEdit.text GameManager.username = $UsernameSetting/LineEdit.text + GameManager.source = $LoadSource/ChooseSource.get_selected() SceneManager.goto_scene("main_menu") @@ -29,3 +41,9 @@ func _on_download_button_pressed() -> void: DownloadManager.load_resource() $Tips.text = "提示:完成加载" + + +func _on_load_button_pressed() -> void: + DownloadManager.uuid = GameManager.sources[$LoadSource/ChooseSource.text] + DownloadManager.load_resource() + $Tips.text = "提示:完成加载" From c413cced5632ec404478380c5523fa32c291eeb8 Mon Sep 17 00:00:00 2001 From: Tiger Date: Sat, 14 Feb 2026 10:24:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E6=9B=B4=E6=96=B0README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++-- scenes/settings.tscn | 18 +++++++++--------- scripts/autoload/DownloadManager.gd | 1 - scripts/settings/settings.gd | 3 +-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index ab7bbc5..fdd4de6 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,9 @@ game/ - main_menu.tscn - game.tscn - settings.tscn +- prefabs/ + - game/ + - card.tscn - scripts/ - autoload/ - GameManager.gd # 游戏管理 @@ -39,12 +42,12 @@ game/ ## 如何运行 -请先运行数据后端,在游戏设置中输入后端 URL(包含端口号和 `http://` 或 `https://` 前缀,然后创建游戏或加入游戏开始游玩。 +请先运行数据后端,在游戏设置中输入后端 URL(包含端口号和 `http://` 或 `https://` 前缀,或者选择本地已有的数据源,然后创建游戏或加入游戏开始游玩。 ## 最佳实践 本项目目前正在使用 Godot 4.6 进行开发。开发用语言为 GDScript。 -你的开发应当遵循 Godot 引擎提供的[最佳实践](https://docs.godotengine.org/zh-cn/4.5/tutorials/best_practices/)及[GDScript 编写风格指南](https://docs.godotengine.org/zh-cn/4.5/tutorials/scripting/gdscript/gdscript_styleguide.html)。但下面提到的除外: +你的开发应当遵循 Godot 引擎提供的[最佳实践](https://docs.godotengine.org/zh-cn/4.x/tutorials/best_practices/)及[GDScript 编写风格指南](https://docs.godotengine.org/zh-cn/4.x/tutorials/scripting/gdscript/gdscript_styleguide.html)。但下面提到的除外: 除 `autoload` 目录下的单例脚本使用大驼峰式命名,其余脚本均应使用小蛇形式命令。所有节点均应使用大驼峰式命名。 diff --git a/scenes/settings.tscn b/scenes/settings.tscn index 613536a..73286f7 100644 --- a/scenes/settings.tscn +++ b/scenes/settings.tscn @@ -122,15 +122,6 @@ theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 30 text = "取消" -[node name="Tips" type="Label" parent="." unique_id=1777076648] -offset_left = 711.0 -offset_top = 913.0 -offset_right = 1738.0 -offset_bottom = 966.0 -theme_override_fonts/font = ExtResource("2_6wm04") -theme_override_font_sizes/font_size = 50 -text = "提示:无" - [node name="LoadButton" type="Button" parent="." unique_id=2015694853] offset_left = 73.0 offset_top = 793.0 @@ -140,6 +131,15 @@ theme_override_fonts/font = ExtResource("2_6wm04") theme_override_font_sizes/font_size = 30 text = "加载数据" +[node name="Tips" type="Label" parent="." unique_id=1777076648] +offset_left = 711.0 +offset_top = 913.0 +offset_right = 1738.0 +offset_bottom = 966.0 +theme_override_fonts/font = ExtResource("2_6wm04") +theme_override_font_sizes/font_size = 50 +text = "提示:无" + [connection signal="pressed" from="SaveButton" to="." method="_on_save_button_pressed"] [connection signal="pressed" from="DownloadButton" to="." method="_on_download_button_pressed"] [connection signal="pressed" from="CancelButton" to="." method="_on_cancel_button_pressed"] diff --git a/scripts/autoload/DownloadManager.gd b/scripts/autoload/DownloadManager.gd index 4c4118b..7a1ba40 100644 --- a/scripts/autoload/DownloadManager.gd +++ b/scripts/autoload/DownloadManager.gd @@ -110,7 +110,6 @@ func load_resource(): func get_sources(): var dir = DirAccess.open("user://download/") var subdirs: PackedStringArray = dir.get_directories() - print(subdirs) for subdir in subdirs: if subdir == "temp": continue diff --git a/scripts/settings/settings.gd b/scripts/settings/settings.gd index 5ebcac9..a3151e3 100644 --- a/scripts/settings/settings.gd +++ b/scripts/settings/settings.gd @@ -12,9 +12,8 @@ func init_text() -> void: func init_sources() -> void: DownloadManager.get_sources() - var options = $LoadSource/ChooseSource for source_name in GameManager.sources: - options.add_item(source_name) + $LoadSource/ChooseSource.add_item(source_name) func _on_save_button_pressed() -> void: GameManager.data_origin = $DataSetting/LineEdit.text