BodyState 数据层
05/031 浏览
核心设计方向:
异步信号传递为主,非实时对战
反胃呕吐让食物回流(胃 → 口腔 → 吐出),玩家间操作通过 FoodPipeline 异步传递
排行榜投喂就是入口,不需要额外整活模式入口
先做 BodyState 数据层
让我设计并实现 BodyState.lua。
设计决策:
BodyState 是全局身体状态的统一数据层,覆盖所有器官的 HP/属性 + 血液指标 + 营养素池 + 代谢状态
它不替代 GameState(GameState 管理单局运行时状态),而是与 GameState 并行,管理跨器官、跨局的持久身体数据
现有 GameState 中的 indicators(血糖/血脂/血钠)会迁移为从 BodyState 读取
支持云端序列化(异步信号传递的基础)
现在我完全掌握了三个数据源:
Config.Indicators: 血糖/血脂/血钠阈值定义
GameState: 当前单局运行时(indicators, organPressure, intakeHistory)
策划文档: 器官HP/酸度/饱腹度、营养素池、代谢管线、大脑信号
开始实现 BodyState.lua。
scripts/BodyState.lua (~580 行) — 全局身体状态数据层
docs/模块系统/身体状态系统.md — 模块文档(API 速查 + 数据流 + 集成方式)
修改文件
scripts/main.lua — 引入 BodyState,Start() 中从云端加载,ShowMenu() 中云端保存
scripts/GameState.lua — 引入 BodyState,关键操作双写同步:
AddIndicator() → BodyState.AddBlood()
DecayIndicators() → BodyState.DecayBlood()
DecayOrganPressure() → BodyState.DecayAllPressure()
RecordPassedFood() → BodyState.AddPressure()
RecordFoodIntake() → BodyState.RecordIntake()
Reset() → 同步 indicators 到 BodyState
scripts/BeatSystem.lua — OnBeatEnd() 中添加大脑疲劳衰减 + 警报等级评估
BodyState 覆盖的数据域
数据域 内容
器官 (5个) HP / 酸度 / 饱腹度 / 效率 / 等级
血液指标 血糖 / 血脂 / 血钠(兼容 Config.Indicators)
营养素池 碳水 / 蛋白质 / 脂肪 / 维生素 / 矿物质 / 水分
代谢 ATP 产出率 / 均衡度 / 糖原储备
大脑 疲劳度 / 警报等级 / 信号到达率
压力 器官压力(呕吐触发基础)
信号 收件箱 / 发件箱 / 历史(10 种信号类型 + 互斥矩阵)
饮食画像 长期摄入比例 + ABCD 评级
持久化 Serialize/Deserialize + clientCloud 云端读写
集成策略
采用双写模式——GameState 保持现有逻辑不变,同时将关键写操作同步到 BodyState。后续可逐步将 GameState 中的指标/压力读取切换到 BodyState 作为权威源。



