From e06ef728996cd4c39f1617ebce6249da4ae5d42d Mon Sep 17 00:00:00 2001 From: Patrick 'Quezler' Mounier Date: Thu, 31 Oct 2019 16:19:23 +0100 Subject: [PATCH] Use the sum of graph batteries from both sides --- core/assets/bundles/bundle.properties | 2 +- .../world/blocks/power/PowerDiode.java | 27 +++++++------------ 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 048069c308..a63039ff9a 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1121,7 +1121,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to block.power-node.description = Transmits power to connected nodes. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = An advanced power node with greater range. block.surge-tower.description = An extremely long-range power node with fewer available connections. -block.diode.description = Forwards power in only one direction. Needs batteries on either end. +block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit. block.battery-large.description = Stores much more power than a regular battery. block.combustion-generator.description = Generates power by burning flammable materials, such as coal. diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java index 6b3cbbfff1..6b1a47d61f 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerDiode.java @@ -3,13 +3,12 @@ package io.anuke.mindustry.world.blocks.power; import io.anuke.arc.Core; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.math.Mathf; import io.anuke.mindustry.world.Block; import io.anuke.mindustry.world.Tile; import static io.anuke.mindustry.Vars.world; -public class PowerDiode extends Block { +public class PowerDiode extends Block{ protected TextureRegion arrow; @@ -28,24 +27,18 @@ public class PowerDiode extends Block { Tile back = getNearby(tile, (tile.rotation() + 2) % 4); Tile front = getNearby(tile, tile.rotation()); - if(back.block() != null && back.block() instanceof Battery && - front.block() != null && front.block() instanceof Battery){ + if(back.block() == null || front.block() == null) return; + if(!back.block().hasPower || !front.block().hasPower) return; - float backCapacity = back.block().consumes.getPower().capacity; - float frontCapacity = front.block().consumes.getPower().capacity; + PowerGraph backGraph = back.entity.power.graph; + PowerGraph frontGraph = front.entity.power.graph; + if(backGraph == frontGraph) return; - float backPower = backCapacity * back.entity.power.satisfaction; - float frontPower = frontCapacity * front.entity.power.satisfaction; + if(backGraph.getBatteryStored() > 0f && backGraph.getBatteryStored() > frontGraph.getBatteryStored()){ + float send = (backGraph.getBatteryStored() - frontGraph.getBatteryStored()) / 2; - if(backPower > frontPower && front.entity.power.satisfaction < 1f){ - float send = Mathf.clamp((backPower - frontPower) / 2, 0f, frontCapacity); - - back.entity.power.satisfaction -= send / backCapacity; - front.entity.power.satisfaction += send / frontCapacity; - } - tile.entity.noSleep(); - }else{ - tile.entity.sleep(); + backGraph.useBatteries(send); + frontGraph.chargeBatteries(send); } }