From 61210955bd5b4e4264f8fb2d40befcc6fff7d8ae Mon Sep 17 00:00:00 2001 From: Timmeey86 Date: Fri, 30 Nov 2018 18:45:40 +0100 Subject: [PATCH] Optimized power distribution implementation for buffered consumers --- .../io/anuke/mindustry/world/blocks/power/PowerGraph.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java index e9e693755a..ea2e8abb26 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerGraph.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.utils.Queue; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.consumers.ConsumePower; import io.anuke.mindustry.world.consumers.Consumers; +import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.threads; @@ -119,11 +120,9 @@ public class PowerGraph{ if(consumes.has(ConsumePower.class)){ ConsumePower consumePower = consumes.get(ConsumePower.class); if(consumePower.isBuffered){ - // Add a percentage of the requested amount, but limit it to the mission amount. - // TODO This can maybe be calculated without converting to absolute values first + // Add an equal percentage of power to all buffers, based on the global power coverage in this graph 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 += Math.min(missingAmount, maximumRate) / consumePower.powerCapacity; + consumer.entity.power.satisfaction = Mathf.clamp(consumer.entity.power.satisfaction + maximumRate / consumePower.powerCapacity); }else{ consumer.entity.power.satisfaction = coverage; }