From 804fce06e7acde7d2842a8627e309dfa788bcb9c Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Mar 2022 14:44:08 -0500 Subject: [PATCH] Fixed shouldConsume checking --- .../mindustry/entities/comp/BuildingComp.java | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 6cfd4d29ad..ae6b1e2fef 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1657,25 +1657,31 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, //TODO why check for old state? boolean prevValid = efficiency > 0, update = shouldConsume() && productionValid(); - float minEfficiency = 1f; - //assume efficiency is 1 for the calculations below - efficiency = optionalEfficiency = 1f; + if(update){ + float minEfficiency = 1f; - //first pass: get the minimum efficiency of any consumer - for(var cons : block.nonOptionalConsumers){ - minEfficiency = Math.min(minEfficiency, cons.efficiency(self())); + //assume efficiency is 1 for the calculations below + efficiency = optionalEfficiency = 1f; + + //first pass: get the minimum efficiency of any consumer + for(var cons : block.nonOptionalConsumers){ + minEfficiency = Math.min(minEfficiency, cons.efficiency(self())); + } + + //same for optionals + for(var cons : block.optionalConsumers){ + optionalEfficiency = Math.min(optionalEfficiency, cons.efficiency(self())); + } + + //efficiency is now this minimum value + efficiency = minEfficiency; + optionalEfficiency = Math.min(optionalEfficiency, minEfficiency); + }else{ + //should not consume, efficiency now zero + efficiency = optionalEfficiency = 0f; } - //same for optionals - for(var cons : block.optionalConsumers){ - optionalEfficiency = Math.min(optionalEfficiency, cons.efficiency(self())); - } - - //efficiency is now this minimum value - efficiency = minEfficiency; - optionalEfficiency = Math.min(optionalEfficiency, minEfficiency); - updateEfficiencyMultiplier(); //second pass: update every consumer based on efficiency