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