From c1bd5ae9c720c6270ef25e9d5cf7493bf04e5d54 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 7 Feb 2022 11:17:11 -0500 Subject: [PATCH] Full support for batteries in loaders/unloaders --- core/src/mindustry/content/Blocks.java | 2 +- .../world/blocks/payloads/PayloadLoader.java | 9 ++++-- .../blocks/payloads/PayloadUnloader.java | 28 +++++++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 365a40f76f..6b78f3967d 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3530,7 +3530,7 @@ public class Blocks{ size = 5; reloadTime = 130f; chargeTime = 100f; - range = 1000f; + range = 1100f; maxPayloadSize = 3.5f; consumes.power(6f); }}; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadLoader.java b/core/src/mindustry/world/blocks/payloads/PayloadLoader.java index a96b62c98b..de1756f4b8 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadLoader.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadLoader.java @@ -21,6 +21,7 @@ public class PayloadLoader extends PayloadBlock{ public float liquidsLoaded = 40f; public int maxBlockSize = 3; public float maxPowerConsumption = 40f; + public boolean loadPowerDynamic = true; //initialized in init(), do not touch protected float basePowerUse = 0f; @@ -68,8 +69,10 @@ public class PayloadLoader extends PayloadBlock{ @Override public void init(){ - basePowerUse = consumes.hasPower() ? consumes.getPower().usage : 0f; - consumes.powerDynamic((PayloadLoaderBuild loader) -> loader.hasBattery() && !loader.exporting ? maxPowerConsumption + basePowerUse : basePowerUse); + if(loadPowerDynamic){ + basePowerUse = consumes.hasPower() ? consumes.getPower().usage : 0f; + consumes.powerDynamic((PayloadLoaderBuild loader) -> loader.hasBattery() && !loader.exporting ? maxPowerConsumption + basePowerUse : basePowerUse); + } super.init(); } @@ -181,7 +184,7 @@ public class PayloadLoader extends PayloadBlock{ //charge the battery float cap = payload.block().consumes.getPower().capacity; - payload.build.power.status += availableInput / cap * Time.delta; + payload.build.power.status += availableInput / cap * edelta(); //export if full if(payload.build.power.status >= 1f){ diff --git a/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java b/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java index 2746516abe..b6e1b4002e 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadUnloader.java @@ -7,9 +7,14 @@ import static mindustry.Vars.*; public class PayloadUnloader extends PayloadLoader{ public int offloadSpeed = 4; + //per frame + public float maxPowerUnload = 80f; public PayloadUnloader(String name){ super(name); + outputsPower = true; + consumesPower = true; + loadPowerDynamic = false; } @Override @@ -23,6 +28,7 @@ public class PayloadUnloader extends PayloadLoader{ } public class PayloadUnloaderBuild extends PayloadLoaderBuild{ + public float lastOutputPower = 0f; @Override public boolean acceptItem(Building source, Item item){ @@ -34,9 +40,18 @@ public class PayloadUnloader extends PayloadLoader{ return false; } + @Override + public float getPowerProduction(){ + return lastOutputPower; + } + @Override public void updateTile(){ - super.updateTile(); + if(payload != null){ + payload.update(false); + } + lastOutputPower = 0f; + if(shouldExport()){ //one-use, disposable block if(payload.block().instantDeconstruct){ @@ -75,6 +90,14 @@ public class PayloadUnloader extends PayloadLoader{ liquids.add(liq, flow); payload.build.liquids.remove(liq, flow); } + + if(hasBattery()){ + float cap = payload.block().consumes.getPower().capacity; + float total = payload.build.power.status * cap; + float unloaded = Math.min(maxPowerUnload * edelta(), total); + lastOutputPower = unloaded; + payload.build.power.status -= unloaded / cap; + } } dumpLiquid(liquids.current()); @@ -91,7 +114,8 @@ public class PayloadUnloader extends PayloadLoader{ public boolean shouldExport(){ return payload != null && ( (!payload.block().hasItems || payload.build.items.empty()) && - (!payload.block().hasLiquids || payload.build.liquids.currentAmount() <= 0.001f) + (!payload.block().hasLiquids || payload.build.liquids.currentAmount() <= 0.001f) && + (!hasBattery() || payload.build.power.status <= 0.0000001f) ); } }