Minor power graph optimization

This commit is contained in:
Anuken
2024-06-20 17:41:36 -04:00
parent b5e8a2a865
commit 87584ebd0b
3 changed files with 15 additions and 23 deletions

View File

@@ -87,6 +87,8 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
transient float optionalEfficiency;
/** The efficiency this block *would* have if shouldConsume() returned true. */
transient float potentialEfficiency;
/** Whether there are any consumers (aside from power) that have efficiency > 0. */
transient boolean shouldConsumePower;
transient float healSuppressionTime = -1f;
transient float lastHealTime = -120f * 10f;
@@ -1773,6 +1775,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
if(!block.hasConsumers || cheating()){
potentialEfficiency = enabled && productionValid() ? 1f : 0f;
efficiency = optionalEfficiency = shouldConsume() ? potentialEfficiency : 0f;
shouldConsumePower = true;
updateEfficiencyMultiplier();
return;
}
@@ -1780,6 +1783,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
//disabled -> nothing works
if(!enabled){
potentialEfficiency = efficiency = optionalEfficiency = 0f;
shouldConsumePower = false;
return;
}
@@ -1789,10 +1793,17 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
//assume efficiency is 1 for the calculations below
efficiency = optionalEfficiency = 1f;
shouldConsumePower = true;
//first pass: get the minimum efficiency of any consumer
for(var cons : block.nonOptionalConsumers){
minEfficiency = Math.min(minEfficiency, cons.efficiency(self()));
float result = cons.efficiency(self());
if(cons != block.consPower && result <= 0.0000001f){
shouldConsumePower = false;
}
minEfficiency = Math.min(minEfficiency, result);
}
//same for optionals