feat(win): T-WIN-008/009/010 主界面/游戏/结算/来源展示/关于页

This commit is contained in:
2026-09-14 20:04:54 +08:00
parent 7776f68f0b
commit 13d6dc915d
8 changed files with 1217 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
class_name AboutScreen
extends Control
## T-WIN-010:关于页面 + 开源声明(可滚动)
## 文档 §8.3 要求 Windows 客户端与 Android App 的「关于」页展示同款声明。
const UiKit = preload("res://src/ui/ui_kit.gd")
const Credits = preload("res://src/ui/credits.gd")
var _on_back: Callable = Callable()
func _init(on_back: Callable = Callable()) -> void:
_on_back = on_back
func _ready() -> void:
set_anchors_preset(Control.PRESET_FULL_RECT)
var root := UiKit.vbox(10)
root.set_anchors_preset(Control.PRESET_FULL_RECT)
root.offset_left = 24
root.offset_top = 18
root.offset_right = -24
root.offset_bottom = -18
add_child(root)
var header := UiKit.hbox(12)
header.add_child(UiKit.title("关于 OpenDance Studio"))
header.add_child(UiKit.expander())
var back := UiKit.button("返回主菜单", func(): if _on_back.is_valid(): _on_back.call())
header.add_child(back)
root.add_child(header)
var info := UiKit.panel()
var info_box := UiKit.vbox(2)
info_box.add_child(UiKit.label("Windows 客户端 v%s" % ProjectSettings.get_setting("application/config/version", "0.1.0"), UiKit.FONT_HEADING))
info_box.add_child(UiKit.muted("摄像头跳舞评分系统:接收 Android 辅助 App 通过 WebSocket 推送的 33 点骨骼关键点,驱动 VRM 角色并实时 DTW 评分。"))
info_box.add_child(UiKit.spacer(4))
info_box.add_child(UiKit.muted("契约版本:rest-api / data-models / skeleton-topology / websocket-keypoints / model-formats = v%s" % Credits.CONTRACT_VERSION))
info_box.add_child(UiKit.muted("本客户端仅接收关键点,不接收、不存储任何视频画面。"))
info.add_child(info_box)
root.add_child(info)
var credits_panel := UiKit.panel()
var credits_box := UiKit.vbox(4)
credits_box.add_child(UiKit.heading("开源项目声明"))
credits_box.add_child(UiKit.muted("共 %d 项;与 contracts/open-source-credits.md 及 THIRD_PARTY.md 保持一致。" % Credits.entry_count()))
var text := UiKit.rich_text()
text.bbcode_enabled = true
text.text = Credits.to_bbcode()
text.custom_minimum_size = Vector2(0, 320)
credits_box.add_child(text)
credits_panel.add_child(credits_box)
credits_panel.size_flags_vertical = Control.SIZE_EXPAND_FILL
root.add_child(credits_panel)