Exemplo n.º 1
0
        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) };
Exemplo n.º 2
0
 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;
     }
 }