Full support for batteries in loaders/unloaders

This commit is contained in:
Anuken
2022-02-07 11:17:11 -05:00
parent 6bbbd5ab01
commit c1bd5ae9c7
3 changed files with 33 additions and 6 deletions

View File

@@ -3530,7 +3530,7 @@ public class Blocks{
size = 5; size = 5;
reloadTime = 130f; reloadTime = 130f;
chargeTime = 100f; chargeTime = 100f;
range = 1000f; range = 1100f;
maxPayloadSize = 3.5f; maxPayloadSize = 3.5f;
consumes.power(6f); consumes.power(6f);
}}; }};

View File

@@ -21,6 +21,7 @@ public class PayloadLoader extends PayloadBlock{
public float liquidsLoaded = 40f; public float liquidsLoaded = 40f;
public int maxBlockSize = 3; public int maxBlockSize = 3;
public float maxPowerConsumption = 40f; public float maxPowerConsumption = 40f;
public boolean loadPowerDynamic = true;
//initialized in init(), do not touch //initialized in init(), do not touch
protected float basePowerUse = 0f; protected float basePowerUse = 0f;
@@ -68,8 +69,10 @@ public class PayloadLoader extends PayloadBlock{
@Override @Override
public void init(){ public void init(){
basePowerUse = consumes.hasPower() ? consumes.getPower().usage : 0f; if(loadPowerDynamic){
consumes.powerDynamic((PayloadLoaderBuild loader) -> loader.hasBattery() && !loader.exporting ? maxPowerConsumption + basePowerUse : basePowerUse); basePowerUse = consumes.hasPower() ? consumes.getPower().usage : 0f;
consumes.powerDynamic((PayloadLoaderBuild loader) -> loader.hasBattery() && !loader.exporting ? maxPowerConsumption + basePowerUse : basePowerUse);
}
super.init(); super.init();
} }
@@ -181,7 +184,7 @@ public class PayloadLoader extends PayloadBlock{
//charge the battery //charge the battery
float cap = payload.block().consumes.getPower().capacity; 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 //export if full
if(payload.build.power.status >= 1f){ if(payload.build.power.status >= 1f){

View File

@@ -7,9 +7,14 @@ import static mindustry.Vars.*;
public class PayloadUnloader extends PayloadLoader{ public class PayloadUnloader extends PayloadLoader{
public int offloadSpeed = 4; public int offloadSpeed = 4;
//per frame
public float maxPowerUnload = 80f;
public PayloadUnloader(String name){ public PayloadUnloader(String name){
super(name); super(name);
outputsPower = true;
consumesPower = true;
loadPowerDynamic = false;
} }
@Override @Override
@@ -23,6 +28,7 @@ public class PayloadUnloader extends PayloadLoader{
} }
public class PayloadUnloaderBuild extends PayloadLoaderBuild{ public class PayloadUnloaderBuild extends PayloadLoaderBuild{
public float lastOutputPower = 0f;
@Override @Override
public boolean acceptItem(Building source, Item item){ public boolean acceptItem(Building source, Item item){
@@ -34,9 +40,18 @@ public class PayloadUnloader extends PayloadLoader{
return false; return false;
} }
@Override
public float getPowerProduction(){
return lastOutputPower;
}
@Override @Override
public void updateTile(){ public void updateTile(){
super.updateTile(); if(payload != null){
payload.update(false);
}
lastOutputPower = 0f;
if(shouldExport()){ if(shouldExport()){
//one-use, disposable block //one-use, disposable block
if(payload.block().instantDeconstruct){ if(payload.block().instantDeconstruct){
@@ -75,6 +90,14 @@ public class PayloadUnloader extends PayloadLoader{
liquids.add(liq, flow); liquids.add(liq, flow);
payload.build.liquids.remove(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()); dumpLiquid(liquids.current());
@@ -91,7 +114,8 @@ public class PayloadUnloader extends PayloadLoader{
public boolean shouldExport(){ public boolean shouldExport(){
return payload != null && ( return payload != null && (
(!payload.block().hasItems || payload.build.items.empty()) && (!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)
); );
} }
} }