Better multi-liquid support / Reinforced pump progress
This commit is contained in:
@@ -4,7 +4,6 @@ import arc.math.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.world.blocks.power.NuclearReactor.*;
|
||||
import mindustry.world.blocks.production.*;
|
||||
import mindustry.world.draw.*;
|
||||
|
||||
@@ -30,7 +29,7 @@ public class HeatProducer extends GenericCrafter{
|
||||
public void setBars(){
|
||||
super.setBars();
|
||||
|
||||
bars.add("heat", (NuclearReactorBuild entity) -> new Bar("bar.heat", Pal.lightOrange, () -> entity.heat));
|
||||
bars.add("heat", (HeatProducerBuild entity) -> new Bar("bar.heat", Pal.lightOrange, () -> entity.heat));
|
||||
}
|
||||
|
||||
public class HeatProducerBuild extends GenericCrafterBuild implements HeatBlock{
|
||||
|
||||
@@ -5,6 +5,7 @@ import mindustry.gen.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
//TODO should leak!
|
||||
public class LiquidJunction extends LiquidBlock{
|
||||
|
||||
public LiquidJunction(String name){
|
||||
|
||||
@@ -12,9 +12,7 @@ import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.logic.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.ui.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.consumers.*;
|
||||
import mindustry.world.draw.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
@@ -74,41 +72,14 @@ public class GenericCrafter extends Block{
|
||||
public void setBars(){
|
||||
super.setBars();
|
||||
|
||||
//set up liquid bars for multiple liquid outputs
|
||||
//TODO this will currently screw up input display if input liquids are filters - no good way to fix that yet
|
||||
//set up liquid bars for liquid outputs
|
||||
if(outputLiquids != null && outputLiquids.length > 0){
|
||||
//no need for dynamic liquid bar
|
||||
bars.remove("liquid");
|
||||
|
||||
Seq<Liquid> consumed = new Seq<>();
|
||||
|
||||
//find list of liquids consumed
|
||||
if(consumes.has(ConsumeType.liquid)){
|
||||
var consl = consumes.get(ConsumeType.liquid);
|
||||
if(consl instanceof ConsumeLiquid liq){
|
||||
consumed.add(liq.liquid);
|
||||
}else if(consl instanceof ConsumeLiquids multi){
|
||||
for(var stack : multi.liquids){
|
||||
consumed.add(stack.liquid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//display consumed first
|
||||
for(var liq : consumed){
|
||||
bars.add("liquid-consume-" + liq.name, entity -> new Bar(
|
||||
() -> liq.localizedName,
|
||||
liq::barColor,
|
||||
() -> entity.liquids.get(liq) / liquidCapacity)
|
||||
);
|
||||
}
|
||||
|
||||
//then display output buffer
|
||||
for(var stack : outputLiquids){
|
||||
bars.add("liquid-output-" + stack.liquid.name, entity -> new Bar(
|
||||
() -> stack.liquid.localizedName,
|
||||
() -> stack.liquid.barColor(),
|
||||
() -> entity.liquids.get(stack.liquid) / liquidCapacity)
|
||||
);
|
||||
addLiquidBar(stack.liquid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package mindustry.world.blocks.production;
|
||||
import arc.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.util.*;
|
||||
import mindustry.game.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.type.*;
|
||||
@@ -82,6 +83,14 @@ public class Pump extends LiquidBlock{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBars(){
|
||||
super.setBars();
|
||||
|
||||
//replace dynamic output bar with own custom bar
|
||||
addLiquidBar((PumpBuild build) -> build.liquidDrop);
|
||||
}
|
||||
|
||||
protected boolean canPump(Tile tile){
|
||||
return tile != null && tile.floor().liquidDrop != null;
|
||||
}
|
||||
@@ -89,13 +98,15 @@ public class Pump extends LiquidBlock{
|
||||
public class PumpBuild extends LiquidBuild{
|
||||
public float consTimer;
|
||||
public float amount = 0f;
|
||||
public Liquid liquidDrop = null;
|
||||
public @Nullable Liquid liquidDrop = null;
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
Draw.rect(name, x, y);
|
||||
Draw.rect(region, x, y);
|
||||
|
||||
Drawf.liquid(liquidRegion, x, y, liquids.currentAmount() / liquidCapacity, liquids.current().color);
|
||||
if(liquidDrop == null) return;
|
||||
|
||||
Drawf.liquid(liquidRegion, x, y, liquids.get(liquidDrop) / liquidCapacity, liquidDrop.color);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -126,17 +137,19 @@ public class Pump extends LiquidBlock{
|
||||
@Override
|
||||
public void updateTile(){
|
||||
if(consValid() && liquidDrop != null){
|
||||
float maxPump = Math.min(liquidCapacity - liquids.total(), amount * pumpAmount * edelta());
|
||||
float maxPump = Math.min(liquidCapacity - liquids.get(liquidDrop), amount * pumpAmount * edelta());
|
||||
liquids.add(liquidDrop, maxPump);
|
||||
|
||||
//does nothing for most pumps, as those do not require items.
|
||||
if((consTimer += delta()) >= consumeTime){
|
||||
consume();
|
||||
consumeTime = 0f;
|
||||
consTimer = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
dumpLiquid(liquids.current());
|
||||
if(liquidDrop != null){
|
||||
dumpLiquid(liquidDrop);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ public class LiquidVoid extends Block{
|
||||
|
||||
@Override
|
||||
public void handleLiquid(Building source, Liquid liquid, float amount){
|
||||
liquids.handleFlow(liquid, amount);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user