diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.dll b/1.6/1.6/Assemblies/ArachnaeSwarm.dll index 8bbdd74..86e5f97 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.dll and b/1.6/1.6/Assemblies/ArachnaeSwarm.dll differ diff --git a/1.6/1.6/Assemblies/ArachnaeSwarm.pdb b/1.6/1.6/Assemblies/ArachnaeSwarm.pdb index 67a4681..003ae81 100644 Binary files a/1.6/1.6/Assemblies/ArachnaeSwarm.pdb and b/1.6/1.6/Assemblies/ArachnaeSwarm.pdb differ diff --git a/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs b/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs index be312d4..2e6408e 100644 --- a/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs +++ b/Source/ArachnaeSwarm/Building_Comps/CompRefuelableNutrition.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using RimWorld; using UnityEngine; using Verse; @@ -133,5 +134,51 @@ namespace ArachnaeSwarm // 覆盖基类属性,确保 WorkGiver 扫描时拦截 public new float TargetFuelLevel => allowAutoRefuel ? base.TargetFuelLevel : 0f; + + /// + /// 覆盖基类方法,根据燃料物品的营养值来计算需要搬运的数量。 + /// 原版方法假设每个物品=1燃料,这对营养燃料系统是错误的。 + /// + public new int GetFuelCountToFullyRefuel() + { + float fuelNeeded = TargetFuelLevel - Fuel; + if (fuelNeeded <= 0.001f) return 0; + + // 获取燃料过滤器中物品的平均营养值 + float avgNutrition = GetAverageNutritionPerUnit(); + if (avgNutrition <= 0.001f) + { + // 如果无法计算营养值,回退到原版行为 + return Mathf.Max(Mathf.CeilToInt(fuelNeeded), 1); + } + + // 根据营养值计算需要的物品数量 + int count = Mathf.CeilToInt(fuelNeeded / avgNutrition); + return Mathf.Max(count, 1); + } + + /// + /// 计算燃料过滤器中允许的物品的平均营养值。 + /// + private float GetAverageNutritionPerUnit() + { + var allowedDefs = Props.fuelFilter?.AllowedThingDefs; + if (allowedDefs == null || !allowedDefs.Any()) return 0f; + + float totalNutrition = 0f; + int count = 0; + + foreach (var thingDef in allowedDefs) + { + float nutrition = thingDef.GetStatValueAbstract(StatDefOf.Nutrition); + if (nutrition > 0f) + { + totalNutrition += nutrition; + count++; + } + } + + return count > 0 ? totalNutrition / count : 0f; + } } } \ No newline at end of file