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

@@ -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){

View File

@@ -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)
);
}
}