Add consumers for other liquid fields

Temperature, heat capacity, viscosity, and explosiveness
This commit is contained in:
MEEPofFaith
2024-03-26 00:22:27 -07:00
parent faf78b6e77
commit c881681634
11 changed files with 152 additions and 19 deletions
@@ -1,6 +1,5 @@
package mindustry.world.consumers; package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
@@ -1,6 +1,5 @@
package mindustry.world.consumers; package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
@@ -1,6 +1,5 @@
package mindustry.world.consumers; package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
@@ -1,6 +1,5 @@
package mindustry.world.consumers; package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*; import mindustry.type.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
@@ -0,0 +1,32 @@
package mindustry.world.consumers;
import mindustry.type.*;
import mindustry.world.meta.*;
public class ConsumeLiquidExplosive extends ConsumeLiquidFilter{
public float minExplosiveness;
public ConsumeLiquidExplosive(float minExplosiveness, float amount){
this.amount = amount;
this.minExplosiveness = minExplosiveness;
this.filter = liquid -> liquid.heatCapacity >= this.minExplosiveness;
}
public ConsumeLiquidExplosive(float amount){
this(0.2f, amount);
}
public ConsumeLiquidExplosive(){
this(0.2f);
}
@Override
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.explosiveness, amount * 60f, filter));
}
@Override
public float liquidEfficiencyMultiplier(Liquid liquid){
return liquid.explosiveness;
}
}
@@ -54,6 +54,12 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
return liq != null ? Math.min(build.liquids.get(liq) / (amount * ed * multiplier.get(build)), 1f) : 0f; return liq != null ? Math.min(build.liquids.get(liq) / (amount * ed * multiplier.get(build)), 1f) : 0f;
} }
@Override
public float efficiencyMultiplier(Building build){
var liq = getConsumed(build);
return liq == null ? 0 : liquidEfficiencyMultiplier(liq);
}
public @Nullable Liquid getConsumed(Building build){ public @Nullable Liquid getConsumed(Building build){
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){ if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){
return build.liquids.current(); return build.liquids.current();
@@ -74,4 +80,8 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
public void display(Stats stats){ public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(filter, amount * 60f, true)); stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(filter, amount * 60f, true));
} }
public float liquidEfficiencyMultiplier(Liquid liquid){
return 1f;
}
} }
@@ -1,6 +1,6 @@
package mindustry.world.consumers; package mindustry.world.consumers;
import mindustry.gen.*; import mindustry.type.*;
import mindustry.world.meta.*; import mindustry.world.meta.*;
public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{ public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
@@ -20,14 +20,13 @@ public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
this(0.2f); this(0.2f);
} }
@Override
public float efficiencyMultiplier(Building build){
var liq = getConsumed(build);
return liq == null ? 0f : liq.flammability;
}
@Override @Override
public void display(Stats stats){ public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.flammability, amount * 60f, filter)); stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.flammability, amount * 60f, filter));
} }
@Override
public float liquidEfficiencyMultiplier(Liquid liquid){
return liquid.flammability;
}
} }
@@ -0,0 +1,32 @@
package mindustry.world.consumers;
import mindustry.type.*;
import mindustry.world.meta.*;
public class ConsumeLiquidHeatCapacity extends ConsumeLiquidFilter{
public float minHeatCapacity;
public ConsumeLiquidHeatCapacity(float minHeatCapacity, float amount){
this.amount = amount;
this.minHeatCapacity = minHeatCapacity;
this.filter = liquid -> liquid.heatCapacity >= this.minHeatCapacity;
}
public ConsumeLiquidHeatCapacity(float amount){
this(0.2f, amount);
}
public ConsumeLiquidHeatCapacity(){
this(0.2f);
}
@Override
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.heatCapacity, amount * 60f, filter));
}
@Override
public float liquidEfficiencyMultiplier(Liquid liquid){
return liquid.heatCapacity;
}
}
@@ -0,0 +1,32 @@
package mindustry.world.consumers;
import mindustry.type.*;
import mindustry.world.meta.*;
public class ConsumeLiquidTemperature extends ConsumeLiquidFilter{
public float minTemperature;
public ConsumeLiquidTemperature(float minTemperature, float amount){
this.amount = amount;
this.minTemperature = minTemperature;
this.filter = liquid -> liquid.temperature >= this.minTemperature;
}
public ConsumeLiquidTemperature(float amount){
this(0.2f, amount);
}
public ConsumeLiquidTemperature(){
this(0.2f);
}
@Override
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.temperature, amount * 60f, filter));
}
@Override
public float liquidEfficiencyMultiplier(Liquid liquid){
return liquid.temperature;
}
}
@@ -0,0 +1,32 @@
package mindustry.world.consumers;
import mindustry.type.*;
import mindustry.world.meta.*;
public class ConsumeLiquidViscosity extends ConsumeLiquidFilter{
public float minViscosity;
public ConsumeLiquidViscosity(float minViscosity, float amount){
this.amount = amount;
this.minViscosity = minViscosity;
this.filter = liquid -> liquid.viscosity >= this.minViscosity;
}
public ConsumeLiquidViscosity(float amount){
this(0.2f, amount);
}
public ConsumeLiquidViscosity(){
this(0.2f);
}
@Override
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.viscosity, amount * 60f, filter));
}
@Override
public float liquidEfficiencyMultiplier(Liquid liquid){
return liquid.viscosity;
}
}
@@ -1,12 +1,12 @@
package mindustry.world.consumers; package mindustry.world.consumers;
import arc.func.Func; import arc.func.*;
import arc.scene.ui.layout.Table; import arc.scene.ui.layout.*;
import mindustry.Vars; import mindustry.*;
import mindustry.gen.Building; import mindustry.gen.*;
import mindustry.type.LiquidStack; import mindustry.type.*;
import mindustry.ui.ReqImage; import mindustry.ui.*;
import mindustry.world.Block; import mindustry.world.*;
public class ConsumeLiquidsDynamic extends Consume{ public class ConsumeLiquidsDynamic extends Consume{
public final Func<Building, LiquidStack[]> liquids; public final Func<Building, LiquidStack[]> liquids;