Full support for batteries in loaders/unloaders
This commit is contained in:
@@ -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){
|
||||
|
||||
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user