aeugh
This commit is contained in:
@@ -40,6 +40,11 @@ public abstract class Consume{
|
||||
return this;
|
||||
}
|
||||
|
||||
/** @return if true, this consumer will be ignored in the consumer list (no updates or valid() checks) */
|
||||
public boolean ignore(){
|
||||
return false;
|
||||
}
|
||||
|
||||
public void build(Building build, Table table){}
|
||||
|
||||
/** Called when a consumption is triggered manually. */
|
||||
@@ -47,7 +52,13 @@ public abstract class Consume{
|
||||
|
||||
public void update(Building build){}
|
||||
|
||||
/** @return efficiency multiplier based on input; overridden in subclasses. Returns 0 if not valid in subclasses. Should return fraction if needs are partially met. */
|
||||
public float efficiency(Building build){
|
||||
return 1f;
|
||||
}
|
||||
|
||||
public void display(Stats stats){}
|
||||
|
||||
public abstract boolean valid(Building build);
|
||||
//TODO this should use efficiency instead - remove or deprecate
|
||||
//public abstract boolean valid(Building build);
|
||||
}
|
||||
|
||||
@@ -8,9 +8,4 @@ public class ConsumeCoolant extends ConsumeLiquidFilter{
|
||||
this.filter = liquid -> liquid.coolant && liquid.temperature <= maxTemp && liquid.flammability < maxFlammability;
|
||||
this.amount = amount;
|
||||
}
|
||||
|
||||
//mods
|
||||
public ConsumeCoolant(){
|
||||
this(0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public class ConsumeItemCharged extends ConsumeItemFilter{
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
public float efficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.charge;
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ public class ConsumeItemDynamic extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return build.consumeTriggerValid() || build.items.has(items.get(build));
|
||||
public float efficiency(Building build){
|
||||
return build.consumeTriggerValid() || build.items.has(items.get(build)) ? 1f : 0f;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,12 +53,7 @@ public class ConsumeItemExplode extends ConsumeItemFilter{
|
||||
public void apply(Block block){}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
public float efficiency(Building build){
|
||||
return 1f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,9 +46,9 @@ public class ConsumeItemFilter extends Consume{
|
||||
}
|
||||
}
|
||||
|
||||
/** @return efficiency multiplier based on current item to be consumed; overridden in subclasses. Returns 0 if not valid in subclasses. */
|
||||
public float getEfficiency(Building build){
|
||||
return 1f;
|
||||
@Override
|
||||
public float efficiency(Building build){
|
||||
return build.consumeTriggerValid() || getConsumed(build) != null ? 1f : 0f;
|
||||
}
|
||||
|
||||
public @Nullable Item getConsumed(Building build){
|
||||
@@ -61,13 +61,6 @@ public class ConsumeItemFilter extends Consume{
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
if(build.consumeTriggerValid()) return true;
|
||||
|
||||
return getConsumed(build) != null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void display(Stats stats){
|
||||
stats.add(booster ? Stat.booster : Stat.input, stats.timePeriod < 0 ? StatValues.items(filter) : StatValues.items(stats.timePeriod, filter));
|
||||
|
||||
@@ -13,7 +13,7 @@ public class ConsumeItemFlammable extends ConsumeItemFilter{
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
public float efficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.flammability;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ public class ConsumeItemRadioactive extends ConsumeItemFilter{
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
public float efficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.radioactivity;
|
||||
}
|
||||
|
||||
@@ -48,8 +48,8 @@ public class ConsumeItems extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return build.consumeTriggerValid() || build.items.has(items);
|
||||
public float efficiency(Building build){
|
||||
return build.consumeTriggerValid() || build.items.has(items) ? 1f : 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -30,17 +30,18 @@ public class ConsumeLiquid extends ConsumeLiquidBase{
|
||||
|
||||
@Override
|
||||
public void build(Building build, Table table){
|
||||
table.add(new ReqImage(liquid.uiIcon, () -> valid(build))).size(iconMed).top().left();
|
||||
table.add(new ReqImage(liquid.uiIcon, () -> build.liquids.get(liquid) > 0)).size(iconMed).top().left();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Building build){
|
||||
build.liquids.remove(liquid, Math.min(use(build), build.liquids.get(liquid)));
|
||||
build.liquids.remove(liquid, amount * build.edelta());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return build.liquids != null && build.liquids.get(liquid) >= amount * build.delta();
|
||||
public float efficiency(Building build){
|
||||
//there can be more liquid than necessary, so cap at 1
|
||||
return Math.min(build.liquids.get(liquid) / (amount * build.edelta()), 1f);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import mindustry.gen.*;
|
||||
import mindustry.world.*;
|
||||
|
||||
public abstract class ConsumeLiquidBase extends Consume{
|
||||
@@ -17,8 +16,4 @@ public abstract class ConsumeLiquidBase extends Consume{
|
||||
public void apply(Block block){
|
||||
block.hasLiquids = true;
|
||||
}
|
||||
|
||||
protected float use(Building entity){
|
||||
return Math.min(amount * entity.edelta(), entity.block.liquidCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
Seq<Liquid> list = content.liquids().select(l -> !l.isHidden() && filter.get(l));
|
||||
MultiReqImage image = new MultiReqImage();
|
||||
list.each(liquid -> image.add(new ReqImage(liquid.uiIcon, () ->
|
||||
build.liquids != null && build.liquids.get(liquid) >= Math.max(use(build), amount * build.delta()))));
|
||||
build.liquids != null && build.liquids.get(liquid) > 0)));
|
||||
|
||||
table.add(image).size(8 * 4);
|
||||
}
|
||||
@@ -43,23 +43,17 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
@Override
|
||||
public void update(Building build){
|
||||
Liquid liq = getConsumed(build);
|
||||
build.liquids.remove(liq, use(build));
|
||||
build.liquids.remove(liq, amount * build.edelta());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
public float efficiency(Building build){
|
||||
var liq = getConsumed(build);
|
||||
return liq != null && build.liquids.get(liq) >= use(build);
|
||||
}
|
||||
|
||||
/** @return efficiency multiplier based on current item to be consumed; overridden in subclasses. Returns 0 if not valid in subclasses. */
|
||||
public float getEfficiency(Building build){
|
||||
return 1f;
|
||||
return liq != null ? Math.min(build.liquids.get(liq) / (amount * build.edelta()), 1f) : 0f;
|
||||
}
|
||||
|
||||
public @Nullable Liquid getConsumed(Building build){
|
||||
float u = use(build);
|
||||
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() >= u){
|
||||
if(filter.get(build.liquids.current()) && build.liquids.currentAmount() > 0){
|
||||
return build.liquids.current();
|
||||
}
|
||||
|
||||
@@ -67,7 +61,7 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
|
||||
for(int i = 0; i < liqs.size; i++){
|
||||
var liq = liqs.get(i);
|
||||
if(filter.get(liq) && build.liquids.get(liq) >= u){
|
||||
if(filter.get(liq) && build.liquids.get(liq) > 0){
|
||||
return liq;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
public float efficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.flammability;
|
||||
return item == null ? 0f : item.flammability * super.efficiency(build);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,13 +49,13 @@ public class ConsumeLiquids extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
public float efficiency(Building build){
|
||||
//TODO delta or edelta
|
||||
float min = 1f, delta = build.edelta();
|
||||
for(var stack : liquids){
|
||||
if(build.liquids.get(stack.liquid) < stack.amount * build.delta()){
|
||||
return false;
|
||||
}
|
||||
min = Math.min(build.liquids.get(stack.liquid) / (stack.amount * delta), min);
|
||||
}
|
||||
return true;
|
||||
return min;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,8 +17,8 @@ public class ConsumePayloadDynamic extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return build.getPayloads().contains(payloads.get(build));
|
||||
public float efficiency(Building build){
|
||||
return build.getPayloads().contains(payloads.get(build)) ? 1f : 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -24,14 +24,14 @@ public class ConsumePayloadFilter extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
public float efficiency(Building build){
|
||||
var payloads = build.getPayloads();
|
||||
for(var block : fitting){
|
||||
if(payloads.contains(block, 1)){
|
||||
return true;
|
||||
return 1f;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -15,8 +15,8 @@ public class ConsumePayloads extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return build.getPayloads().contains(payloads);
|
||||
public float efficiency(Building build){
|
||||
return build.getPayloads().contains(payloads) ? 1f : 0f;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import arc.math.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.meta.*;
|
||||
@@ -31,12 +30,13 @@ public class ConsumePower extends Consume{
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
if(buffered){
|
||||
return true;
|
||||
}else{
|
||||
return build.power.status > 0f;
|
||||
}
|
||||
public boolean ignore(){
|
||||
return buffered;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float efficiency(Building build){
|
||||
return build.power.status;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -54,18 +54,9 @@ public class ConsumePower extends Consume{
|
||||
* @return The amount of power which is requested per tick.
|
||||
*/
|
||||
public float requestedPower(Building entity){
|
||||
if(entity == null) return 0f;
|
||||
|
||||
if(buffered){
|
||||
return (1f-entity.power.status)*capacity;
|
||||
}else{
|
||||
try{
|
||||
return usage * Mathf.num(entity.shouldConsume());
|
||||
}catch(Exception e){
|
||||
//HACK an error will only happen with a bar that is checking its requested power, and the entity is null/a different class
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return buffered ?
|
||||
(1f - entity.power.status) * capacity :
|
||||
usage * (entity.shouldConsume() ? 1f : 0f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user