Files
gplan-2/design/research/game-architecture-2026-10-05.json
T

74 lines
6.3 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schema_version": 1,
"diagram_type": "architecture",
"meta": {
"title": "Dungeon Sweeper game/ 架构(系统级)",
"locale": "zh-CN",
"output": "game-architecture-2026-10-05.html",
"quality_profile": "showcase",
"viewBox": [1130, 650],
"views": [
{ "id": "main-loop", "label": "主循环路径", "focus": ["main-root", "adventure-loop", "battle-domain", "board-mines"], "note": "组合根装配冒险循环,AdventureRunner 逐关推进,关卡内开战进入战斗枢纽与棋盘扫雷。" },
{ "id": "battle-hub", "label": "战斗枢纽", "focus": ["battle-domain", "board-mines", "reward-econ", "item-domain", "rng-service"], "note": "battle_orchestrator 是边最多的域:棋盘生成、扫雷判定、伤害结算、奖励抽取、道具消费、随机掷点。" },
{ "id": "data-path", "label": "数据通路", "focus": ["config-db", "data-tables", "meta-save", "adventure-loop"], "note": "ConfigDB autoload 单点加载 18 组数值表;组合根注入 db,元进度与存档经同一条配置通路。" }
]
},
"components": [
{ "id": "main-root", "type": "frontend", "label": "组合根 main.tscn", "sublabel": "main.gd — 装配·分派·转发", "tag": "入口场景", "pos": [30, 70], "size": [180, 110] },
{ "id": "presenters", "type": "frontend", "label": "呈现器簇", "sublabel": "hud_presenter 等 11 件", "pos": [250, 70], "size": [180, 110] },
{ "id": "views-board", "type": "frontend", "label": "棋盘 · 舞台视图", "sublabel": "board_view 等 9 件", "pos": [470, 70], "size": [180, 110] },
{ "id": "views-screen", "type": "frontend", "label": "屏幕 · 弹窗 · HUD", "sublabel": "level_map_screen 等 17 件", "pos": [690, 70], "size": [180, 110] },
{ "id": "debug-cluster", "type": "frontend", "label": "调试 · 模拟簇", "sublabel": "debug_session 等 4 件", "tag": "DS_DEBUG 门控", "pos": [910, 70], "size": [180, 110] },
{ "id": "config-db", "type": "database", "label": "配置服务 ConfigDB", "sublabel": "config_db — 表单点入口", "tag": "autoload", "pos": [30, 265], "size": [190, 120] },
{ "id": "adventure-loop", "type": "backend", "label": "冒险循环域", "sublabel": "adventure_runner 等 3 件", "pos": [260, 255], "size": [180, 140] },
{ "id": "battle-domain", "type": "backend", "label": "战斗域", "sublabel": "battle_orchestrator 等 5 件", "tag": "边最多枢纽", "pos": [490, 255], "size": [210, 150] },
{ "id": "rng-service", "type": "backend", "label": "随机服务 RngService", "sublabel": "rng_service — 全局随机", "tag": "autoload", "pos": [760, 275], "size": [180, 100] },
{ "id": "data-tables", "type": "database", "label": "数值表层", "sublabel": "schemas ×18 · .tres ×18", "pos": [30, 500], "size": [190, 110] },
{ "id": "item-domain", "type": "backend", "label": "道具 · 奇物 · 同调域", "sublabel": "relics_engine 等 3 件", "pos": [260, 490], "size": [180, 140] },
{ "id": "meta-save", "type": "backend", "label": "元进度 · 存档域", "sublabel": "meta_progression · save_manager", "pos": [470, 490], "size": [200, 140] },
{ "id": "board-mines", "type": "backend", "label": "棋盘 · 扫雷域", "sublabel": "board_data 等 3 件", "pos": [700, 490], "size": [190, 140] },
{ "id": "reward-econ", "type": "backend", "label": "奖励经济域", "sublabel": "reward_economy 等 2 件", "pos": [930, 500], "size": [170, 130] }
],
"boundaries": [
{ "kind": "region", "label": "presentation/ 呈现层", "wraps": ["main-root", "presenters", "views-board", "views-screen", "debug-cluster"] },
{ "kind": "region", "label": "core/ 全局服务(autoload)", "wraps": ["config-db", "rng-service"] },
{ "kind": "region", "label": "core/ 玩法域", "wraps": ["adventure-loop", "battle-domain", "item-domain", "meta-save", "board-mines", "reward-econ"] },
{ "kind": "region", "label": "data/ 数据层", "wraps": ["data-tables"] }
],
"connections": [
{ "id": "main-to-presenters", "from": "main-root", "to": "presenters", "label": "装配" },
{ "id": "presenters-to-views-board", "from": "presenters", "to": "views-board" },
{ "id": "presenters-to-views-screen", "from": "presenters", "to": "views-screen", "fromSide": "top", "toSide": "top" },
{ "id": "main-to-adventure", "from": "main-root", "to": "adventure-loop", "label": "冒险编排 · 注入 db/rng", "variant": "emphasis", "labelDy": -20 },
{ "id": "main-to-configdb", "from": "main-root", "to": "config-db", "label": "组合根引用", "fromSide": "bottom", "toSide": "top", "labelDy": 24 },
{ "id": "adventure-to-configdb", "from": "adventure-loop", "to": "config-db", "label": "读表", "labelDy": 26 },
{ "id": "adventure-to-battle", "from": "adventure-loop", "to": "battle-domain", "label": "开战" },
{ "id": "battle-to-rng", "from": "battle-domain", "to": "rng-service", "label": "掷点" },
{ "id": "battle-to-mines", "from": "battle-domain", "to": "board-mines", "label": "棋盘 · 扫雷", "fromSide": "bottom", "toSide": "top" },
{ "id": "battle-to-items", "from": "battle-domain", "to": "item-domain", "label": "伤害 / 掉落" },
{ "id": "battle-to-reward", "from": "battle-domain", "to": "reward-econ", "label": "结算 · 奖励抽取", "fromSide": "bottom", "toSide": "top", "labelDy": -14, "labelDx": -110 },
{ "id": "adventure-to-items", "from": "adventure-loop", "to": "item-domain", "label": "奇物 / 同调", "labelDy": 30 },
{ "id": "items-to-meta", "from": "item-domain", "to": "meta-save", "label": "落档", "labelDy": 24 },
{ "id": "configdb-to-tables", "from": "config-db", "to": "data-tables", "label": "加载 .tres", "labelDy": 30 }
],
"cards": [
{ "dot": "cyan", "title": "呈现层 presentation/", "items": [
"组合根装配呈现器并转发信号",
"ui_assembler 落地 26 件视图",
"调试簇挂 DS_DEBUG 门控接线"
] },
{ "dot": "emerald", "title": "规则引擎 core/", "items": [
"冒险循环是唯一试玩入口",
"战斗域边最多,向四域出边",
"道具域三侧消费,同调落存档"
] },
{ "dot": "rose", "title": "数据与全局服务", "items": [
"ConfigDB autoload 表单点入口",
"组合根统一注入 db 与 RngService",
"依赖走构造器注入,禁绕过单点"
] }
]
}