public void AutoFillModules(RecipeParameters recipeParams, Recipe recipe, Entity entity, Goods fuel, ref ModuleEffects effects, ref RecipeParameters.UsedModule used) { if (autoFillPayback > 0 && (fillMiners || !recipe.flags.HasFlags(RecipeFlags.UsesMiningProductivity))) { var productivityEconomy = recipe.Cost() / recipeParams.recipeTime; var effectivityEconomy = recipeParams.fuelUsagePerSecondPerBuilding * fuel?.Cost() ?? 0; if (effectivityEconomy < 0f) { effectivityEconomy = 0f; } var bestEconomy = 0f; Item usedModule = null; foreach (var module in recipe.modules) { if (module.IsAccessibleWithCurrentMilestones() && entity.CanAcceptModule(module.module)) { var economy = MathF.Max(0f, module.module.productivity) * productivityEconomy - module.module.consumption * effectivityEconomy; if (economy > bestEconomy && module.Cost() / economy <= autoFillPayback) { bestEconomy = economy; usedModule = module; } } } if (usedModule != null) { var count = effects.GetModuleSoftLimit(usedModule.module, entity.moduleSlots); if (count > 0) { effects.AddModules(usedModule.module, count); used.modules = new[] { (usedModule, count) };
private void AddModuleSimple(Item module, ref ModuleEffects effects, Entity entity, ref RecipeParameters.UsedModule used) { if (module.module != null) { var fillerLimit = effects.GetModuleSoftLimit(module.module, entity.moduleSlots); effects.AddModules(module.module, fillerLimit); used.module = module; used.count = fillerLimit; } }