Optimized power distribution implementation for buffered consumers
This commit is contained in:
@@ -8,6 +8,7 @@ import com.badlogic.gdx.utils.Queue;
|
|||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.consumers.ConsumePower;
|
import io.anuke.mindustry.world.consumers.ConsumePower;
|
||||||
import io.anuke.mindustry.world.consumers.Consumers;
|
import io.anuke.mindustry.world.consumers.Consumers;
|
||||||
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.threads;
|
import static io.anuke.mindustry.Vars.threads;
|
||||||
|
|
||||||
@@ -119,11 +120,9 @@ public class PowerGraph{
|
|||||||
if(consumes.has(ConsumePower.class)){
|
if(consumes.has(ConsumePower.class)){
|
||||||
ConsumePower consumePower = consumes.get(ConsumePower.class);
|
ConsumePower consumePower = consumes.get(ConsumePower.class);
|
||||||
if(consumePower.isBuffered){
|
if(consumePower.isBuffered){
|
||||||
// Add a percentage of the requested amount, but limit it to the mission amount.
|
// Add an equal percentage of power to all buffers, based on the global power coverage in this graph
|
||||||
// TODO This can maybe be calculated without converting to absolute values first
|
|
||||||
float maximumRate = consumePower.requestedPower(consumer.block(), consumer.entity()) * coverage * consumer.entity.delta();
|
float maximumRate = consumePower.requestedPower(consumer.block(), consumer.entity()) * coverage * consumer.entity.delta();
|
||||||
float missingAmount = consumePower.powerCapacity * (1 - consumer.entity.power.satisfaction);
|
consumer.entity.power.satisfaction = Mathf.clamp(consumer.entity.power.satisfaction + maximumRate / consumePower.powerCapacity);
|
||||||
consumer.entity.power.satisfaction += Math.min(missingAmount, maximumRate) / consumePower.powerCapacity;
|
|
||||||
}else{
|
}else{
|
||||||
consumer.entity.power.satisfaction = coverage;
|
consumer.entity.power.satisfaction = coverage;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user