Files
SectSimulator/doc/design/建筑系统设计.md
T

10 KiB
Raw Blame History

建筑系统设计(D6:建筑系统基础)

对应开发计划表 D6(8/8):① 灵石矿场景 ② 建造→产出 ③ 升级。交付标准:建筑产资源,升级加速。 本文档只描述设计,不包含代码。 状态:步骤 1–7 已实现(D6 全部完成:食物/开局/配置/建筑模型管理/面板/口粮饥饿离宗),步骤 7 整体挂机验证待 F5 手测


一、核心循环

建造(花灵石)→ 每日产出(灵石/食物)→ 攒资源升级 → 产出加速 → 支撑修炼/招募经济
  • 纯挂机产出:与修炼/招募同节奏,监听 TimeSystem.day_passed 每日结算
  • 产出直接进入 SectManager 资源(HUD 实时联动)

二、数据模型(Building

字段 类型 说明
type 枚举 BuildingType 建筑种类(灵石矿 / 灵田)
level int 等级(1 起)

价格与产出不在建筑上存副本,运行时按 type + level 从 GameConfig 计算,杜绝数值漂移(与修炼数值同一原则)。

本期建筑种类

类型 名称 产出 消费资源
SPIRIT_STONE_MINE 灵石矿 灵石/日 建造/升级花灵石
SPIRIT_FIELD 灵田 食物/日 建造/升级花灵石

食物为通用资源(顶部栏常驻显示,见通用资源分析文档),需在 SectManager 新增。HUD 显示名为"灵米"(内部资源名 food)。

后续建筑规划:灵药园(产灵草,修炼资源,W5 炼丹材料)——与灵田分工:灵田管口粮(食物),药园管药材(灵草),加新建筑 = 配置加一节 + 枚举加一项 + 产出分发加一行。

无地图摆放:本期建筑统一以面板条目呈现(BuildingsPanel 数据行),灵石矿与灵田同套处理,不建单独场景。地图摆放(建筑实体显示在宗门画面上)属 P2 扩展。


三、产出机制

  • BuildingManager(新 Autoload)监听 day_passed,遍历已建建筑逐座结算
  • 灵石矿 → SectManager.add_spirit_stones(output)
  • 灵田 → SectManager.add_food(output)
  • 产出量与等级相关:产出 = 基础产出 × 升级产出倍率^(等级-1)

三·五、口粮消耗与断粮离宗

灵田产出的食物有真实用途——练气期弟子每日吃粮(筑基+辟谷,为将来预留)。

断粮后果三方案(选定:方案 B

按修仙设定,练气期尚未辟谷(引气入体 ≠ 断食),仍需进食;通常筑基期逐渐辟谷、金丹期完全辟谷——"断粮有后果"是成立的。具体后果有三档可选:

方案 断粮后果 特点
A 饿死 断粮累计 N 天(如 30 天)→ 弟子死亡,从名录移除 忠于设定,压力最大;但需死亡表现(遗物/坟冢等),范围膨胀
B 离宗(选定) 断粮累计 N 天 → 弟子出走投奔他处,名录移除 效果同 A,叙事更软("出走"而非"死亡"),UI/代码最简单,契合宗门经营题材
C 不致命 只修炼效率减半,永远不死 最温和,生存压力弱,经济闭环不成立

选定理由:方案 B 的代码量约等于 A(定时检查 + 名录移除,名录/详情 UI 均为现成),但"弟子出走"比"饿死"更符合宗门经营题材的叙事基调,也避开死亡表现系统的范围膨胀,适合 M1 前落地。

机制细则(方案 B

  1. 每日消耗食物 -= 练气弟子数 × 人均消耗(配置 consumption_per_disciple,默认 1
  2. 断粮判定:食物不足以覆盖全部练气弟子时 → 食物归 0,全体练气弟子饥饿天数 +1;食物充足 → 饥饿天数清零
  3. 饥饿惩罚:饥饿期间修炼速度 × hunger_speed_multiplier(默认 0.5
  4. 离宗:饥饿天数 ≥ hunger_threshold_days(默认 30)→ 弟子离宗出走,从名录移除(控制台日志"X 因断粮离宗"
  5. 筑基+弟子不消耗口粮(realm_index != 0 豁免,为筑基系统预留)

设计意图:生存压力驱动经济闭环——断粮 → 修炼放缓 → 弟子出走 → 玩家被迫种灵田/合理经营,而不是让食物纯积累无意义。


四、建造与升级

操作 规则
建造 检查灵石 ≥ 建造价 → 扣除 → 建筑入列(等级 1)
升级 检查灵石 ≥ 升级价 → 扣除 → 等级 +1
升级价 建造价 × 升级价格倍率^等级(即升到 2 级花 建造价×倍率)
等级上限 配置 max_level(默认 10

资源不足时:UI 按钮禁用,无其他副作用。


五、配置节(game_config.cfg 新增)

[building]                     ; 建筑系统通用
starting_spirit_stones=500     ; 开局灵石(解决初始资金为 0,新游戏发放)
starting_food=100              ; 开局食物(口粮缓冲,新游戏发放)
max_level=10                   ; 建筑等级上限

[building_mine]                ; 灵石矿
cost=200                       ; 建造价(灵石)
output=10                      ; 日产出(灵石)
upgrade_cost_x=2.0             ; 升级价格倍率
upgrade_output_x=1.5           ; 升级产出倍率

[building_field]               ; 灵田
cost=100                       ; 建造价(灵石)
output=5                       ; 日产出(食物)
upgrade_cost_x=2.0             ; 升级价格倍率
upgrade_output_x=1.5           ; 升级产出倍率

[food]                         ; 口粮与生存
consumption_per_disciple=1     ; 练气弟子人均日消耗
hunger_speed_multiplier=0.5    ; 饥饿期间修炼速度倍率
hunger_threshold_days=30       ; 断粮累计天数上限(达到即离宗)

加新建筑 = 配置加一节 + 枚举加一项 + BuildingManager 产出分发加一行(对照 [recruitment_*] 模式)。


六、UI 建筑面板(BuildingsPanel

  • 入口TopBar"资源"按钮(Button_ResourcesManagement,当前未接线)→ 打开
  • 打开面板时暂停时间(与弟子名录面板一致,关闭恢复)
  • 面板结构(复用青绿弹窗模式):
    • 标题"宗门建筑"
    • 每种建筑一行:名称 / 等级 / 日产出 + 建造或升级按钮(显示价格,资源不足禁用)
    • 底部"关闭"按钮 + 遮罩点击关闭
  • 数据驱动:监听 buildings_changed 重建列表,打开时主动刷新

七、分步实现规划(小步可验证,每步独立跑通)

步骤 1SectManager 加食物资源 + 开局资源发放

内容
改动 SectManager.gdfood 资源 + add_food/remove_food + food_changed 信号;GameConfig.gd[building] 节开局数量;MainGame.gd 新游戏时发放
验证 HUD 显示 500 灵石 / 100 灵米,增减接口调用正确

步骤 2HUD 食物显示

内容
改动 TopBarHUD.tscn 加"灵米"标签对;top_bar_hud.gdfood_changed 信号 + 初始值
验证 开局 100 灵米显示在顶栏;add_food 实时刷新

步骤 3[building] 配置节 + GameConfig 读取 (部分)

内容
改动 game_config.cfg[building]/[building_mine]/[building_field] 节(开局数量、建筑参数、等级上限);GameConfig.gd 加对应字段 + building_params 字典 + 解析
验证 无头打印各配置值正确;[food] 口粮/饥饿参数待步骤 5 接入

步骤 4Building 模型 + BuildingManager

内容
改动 src/Sect/buildings/Building.gdtype/level + 价格产出计算,运行时读配置);src/Sect/BuildingManager.gd(建造/升级/每日产出/buildings_changed 信号);project.godot 注册 Autoload
验证 建造扣费入列、每日产出进 SectManager、升级后产出提升(10→15)、灵石不足拒绝

步骤 5:口粮消耗 + 饥饿惩罚 + 断粮离宗

内容
改动 Disciple.gdhunger_daysCultivationManager.gd 每日先结算口粮(消耗→饥饿累计→离宗移除),_gain_exp 乘饥饿倍率
验证 充足 30 天精确扣减清零;断粮饥饿累计、修为减半;第 30 天离宗(日志"断粮日久,离宗而去"+名录移除);恢复清零

步骤 6BuildingsPanel UI + "资源"按钮接线

内容
改动 src/UI/Panels/BuildingsPanel/(面板场景+脚本,每类型一行:名称/等级/日产出+建造或升级按钮);TopBarHUD.tscn 连"资源"按钮 → 新信号 → MainGame.gd 打开面板
验证 无头验证:打开暂停/关闭恢复、建造升级扣费、每日产出;面板尺寸与名录面板一致(1340×819 vs 1340×842

步骤 7:整体挂机验证 + 提交

内容
改动 无(仅验证)
验证 挂机模拟:开局 500 灵石→建灵田→产出覆盖口粮→攒灵石升级→产出加速;断粮场景:不建灵田→30 天弟子离宗;对照八节验收清单逐项勾选

依赖关系:1→2 顺序执行(HUD 依赖食物资源);3→4 顺序执行(Building 依赖配置);5 依赖 1/3;6 依赖 4;7 为最终验证。


八、验收清单(D6 交付标准)

  • 新游戏开局赠送 500 灵石 + 100 食物(配置可调),HUD 可见
  • 点"资源"按钮打开建筑面板(时间暂停,关闭恢复)
  • 灵石充足时可建造灵石矿/灵田,扣费入列
  • 每日自动产出灵石/食物,HUD 实时增长
  • 升级建筑后产出提升(升级倍率生效),价格按倍率递增
  • 灵石不足时建造/升级按钮禁用
  • 等级达到上限后不可再升级
  • 练气弟子每日消耗食物;断粮后饥饿天数累计、修炼速度减半
  • 断粮累计 30 天弟子离宗(名录移除 + 日志)
  • 食物恢复充足后饥饿清零
  • 建筑/饥饿数据为纯数据(可序列化,D8 存档接入时加 to_dict/from_dict

九、与后续任务衔接

后续任务 衔接方式
D8 存档接入 Building 纯数据模型直接序列化
W3 财政经济 建筑产出进入收支流水;俸禄发放扣灵石
W5 生产制造 灵田/灵石矿的弟子匹配度(灵根→效率)接入
修炼系统 后续灵气建筑(灵泉/聚灵阵)动态化 qi_concentration