口腔的消化转化规则和食物传递逻辑

05/071 浏览
现在我看清楚了。HandleExit 中 transferData.typeName = e.typeName,而 e.typeName 是在生成敌人时确定的。关键问题是:口腔里碳水类(bread/candy)敌人被塔攻击后化学转化为 polysaccharide tag,之后如果是经过化学转化后被击杀的,会 decompose 生成 polysaccharide 类型的子体。
让我看看化学转化后敌人的 typeName 是否也变了。
现在我理解了完整流程:
口腔中生成 bread(碳水)、candy(碳水)、chicken(脂肪)、meat(蛋白质) 等敌人
淀粉酶塔(amylase)攻击碳水类(carb)后,将它们的 chemTag 从 carb 转化为 polysaccharide
被击杀的转化后敌人生成 polysaccharide 类型的分解产物子体
走出出口的食物通过 HandleExit → TransferToNextOrgan → FoodPipeline.PushToOrgan 入队到胃
关键:传递到胃的 typeName 就是敌人的原始类型(如 bread、candy),或是分解产物(polysaccharide)。但传递时 name 字段用的是 e.config.name,所以 bread 的 config.name = “面包块”,这个本身是中文。
问题的核心是:用户在口腔关卡中,淀粉酶塔太强,碳水类食物全被转化为多糖,其他类型(肉、脂肪等)可能被击杀了不会传递,或者投喂的全是碳水类食物。
但用户的反馈是"只有多糖不符合现实"。让我再看看投喂入口——Leaderboard 投喂食物时推入口腔队列的逻辑。
现在我完全理解了整个击杀流程。有三个击杀入口需要修改:
Tower.HandleKillProducts — 物理塔击杀
EnzymeParticle.HandleKill — 酶粒子击杀
EnzymeNpc.HandleKill — 酶NPC击杀
方案:在 Enemy.lua 中新增 Enemy.TransferKilledFood(e) 函数,然后在三个击杀入口中,当没有产生子体时调用它。
构建成功,修复已完成。以下是这次修改的核心逻辑:
问题:之前只有走到出口(EXIT)的食物敌人才会通过 FoodPipeline.TransferToNextOrgan 传递到下一器官。被塔/酶击杀的敌人直接消失了,导致胃里只有少量多糖和糖块(碰巧走到出口的)。
修复思路:击杀 = 成功咀嚼/消化处理,食物不会凭空消失,而是被"吞下"传递到下一器官。
具体改动:
Enemy.lua — 新增 Enemy.TransferKilledFood(e) 函数
跳过细菌/Boss(击杀细菌 = 消灭,不传递)
使用 chewed 传递比例(击杀 = 成功处理)
processedLevel + 1(加工等级提升)
透传菜品字段(dishKey、ingredientKeys 等)
Tower.lua — HandleKillProducts 修改
分解产物(isDecomposeProduct):不再产生子体,但调用 TransferKilledFood
化学分解/物理碎裂:子体继承传递责任,不重复传递
无子体产生时:调用 TransferKilledFood
EnzymeParticle.lua 和 EnzymeNpc.lua — HandleKill 同步修改,逻辑一致
现在口腔关卡中被牙齿塔咬碎的蔬菜、水果、肉类、面食等都会正确传递到胃的食物队列中,而不只是多糖和糖块。