Minor power graph optimization
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user