Add consumers for other liquid fields

Temperature, heat capacity, viscosity, and explosiveness
This commit is contained in:
MEEPofFaith
2024-03-26 00:21:32 -07:00
parent faf78b6e77
commit c881681634
11 changed files with 152 additions and 19 deletions

View File

@@ -1,6 +1,5 @@
package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.meta.*;

View File

@@ -1,6 +1,5 @@
package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.meta.*;

View File

@@ -1,6 +1,5 @@
package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.meta.*;

View File

@@ -1,6 +1,5 @@
package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.meta.*;

View File

@@ -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;
}
}

View File

@@ -53,7 +53,13 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
if(ed <= 0.00000001f) return 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){
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){
return build.liquids.current();
@@ -74,4 +80,8 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquids(filter, amount * 60f, true));
}
public float liquidEfficiencyMultiplier(Liquid liquid){
return 1f;
}
}

View File

@@ -1,6 +1,6 @@
package mindustry.world.consumers;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.world.meta.*;
public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
@@ -20,14 +20,13 @@ public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
this(0.2f);
}
@Override
public float efficiencyMultiplier(Building build){
var liq = getConsumed(build);
return liq == null ? 0f : liq.flammability;
}
@Override
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.liquidEffMultiplier(l -> l.flammability, amount * 60f, filter));
}
@Override
public float liquidEfficiencyMultiplier(Liquid liquid){
return liquid.flammability;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -1,12 +1,12 @@
package mindustry.world.consumers;
import arc.func.Func;
import arc.scene.ui.layout.Table;
import mindustry.Vars;
import mindustry.gen.Building;
import mindustry.type.LiquidStack;
import mindustry.ui.ReqImage;
import mindustry.world.Block;
import arc.func.*;
import arc.scene.ui.layout.*;
import mindustry.*;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.*;
public class ConsumeLiquidsDynamic extends Consume{
public final Func<Building, LiquidStack[]> liquids;