Merge pull request #2542 from viliml/patch-3

Add a cooling buffer, fix #2530
This commit is contained in:
Adrian Siekierka 2015-03-09 13:07:06 +01:00
commit c5fb869bbc

View file

@ -47,6 +47,7 @@ public class TileEngineIron extends TileEngineWithInventory implements IFluidHan
public Tank tankCoolant = new Tank("tankCoolant", MAX_LIQUID, this); public Tank tankCoolant = new Tank("tankCoolant", MAX_LIQUID, this);
private int burnTime = 0; private int burnTime = 0;
private float coolingBuffer = 0.0f;
private TankManager<Tank> tankManager = new TankManager<Tank>(); private TankManager<Tank> tankManager = new TankManager<Tank>();
private IFuel currentFuel; private IFuel currentFuel;
@ -240,6 +241,21 @@ public class TileEngineIron extends TileEngineWithInventory implements IFluidHan
private void coolEngine(float idealHeat) { private void coolEngine(float idealHeat) {
float extraHeat = heat - idealHeat; float extraHeat = heat - idealHeat;
if (coolingBuffer < extraHeat) {
fillCoolingBuffer();
}
if (coolingBuffer >= extraHeat) {
coolingBuffer -= extraHeat;
heat -= extraHeat;
return;
}
heat -= coolingBuffer;
coolingBuffer = 0.0f;
}
private void fillCoolingBuffer() {
FluidStack coolant = this.tankCoolant.getFluid(); FluidStack coolant = this.tankCoolant.getFluid();
if (coolant == null) { if (coolant == null) {
return; return;
@ -250,18 +266,8 @@ public class TileEngineIron extends TileEngineWithInventory implements IFluidHan
if (currentCoolant != null) { if (currentCoolant != null) {
float cooling = currentCoolant.getDegreesCoolingPerMB(heat); float cooling = currentCoolant.getDegreesCoolingPerMB(heat);
cooling /= getBiomeTempScalar(); cooling /= getBiomeTempScalar();
coolingBuffer += coolantAmount * cooling;
if (cooling > extraHeat) { tankCoolant.drain(coolantAmount, true);
return;
}
if (coolantAmount * cooling > extraHeat) {
tankCoolant.drain(Math.round(extraHeat / cooling), true);
heat -= extraHeat;
} else {
tankCoolant.drain(coolantAmount, true);
heat -= coolantAmount * cooling;
}
} }
} }