The on-going consumer disaster
This commit is contained in:
@@ -7,11 +7,14 @@ import mindustry.world.meta.*;
|
||||
|
||||
/** An abstract class that defines a type of resource that a block can consume. */
|
||||
public abstract class Consume{
|
||||
|
||||
//TODO maybe remove these and make it an interface if possible?
|
||||
/** If true, this consumer will not influence consumer validity. */
|
||||
public boolean optional;
|
||||
/** If true, this consumer will be displayed as a boost input. */
|
||||
public boolean booster;
|
||||
//TODO bad. I don't like it.
|
||||
@Deprecated
|
||||
public boolean update = true;
|
||||
|
||||
/**
|
||||
@@ -31,6 +34,7 @@ public abstract class Consume{
|
||||
return optional(true, true);
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public Consume update(boolean update){
|
||||
this.update = update;
|
||||
return this;
|
||||
|
||||
21
core/src/mindustry/world/consumers/ConsumeItemCharged.java
Normal file
21
core/src/mindustry/world/consumers/ConsumeItemCharged.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import mindustry.gen.*;
|
||||
|
||||
/** For mods. I don't use this (yet). */
|
||||
public class ConsumeItemCharged extends ConsumeItemFilter{
|
||||
|
||||
public ConsumeItemCharged(float minCharge){
|
||||
super(item -> item.charge >= minCharge);
|
||||
}
|
||||
|
||||
public ConsumeItemCharged(){
|
||||
this(0.2f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.charge;
|
||||
}
|
||||
}
|
||||
64
core/src/mindustry/world/consumers/ConsumeItemExplode.java
Normal file
64
core/src/mindustry/world/consumers/ConsumeItemExplode.java
Normal file
@@ -0,0 +1,64 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import arc.math.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import mindustry.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.entities.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
/** Causes a block to explode when explosive items are moved into it. */
|
||||
public class ConsumeItemExplode extends ConsumeItemFilter{
|
||||
public float damage = 4f;
|
||||
public float threshold, baseChance = 0.06f;
|
||||
public Effect explodeEffect = Fx.generatespark;
|
||||
|
||||
public ConsumeItemExplode(float threshold){
|
||||
super(item -> item.explosiveness >= threshold);
|
||||
this.threshold = threshold;
|
||||
}
|
||||
|
||||
public ConsumeItemExplode(){
|
||||
this(0.5f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Building build){
|
||||
var item = getConsumed(build);
|
||||
|
||||
if(item != null){
|
||||
if(Vars.state.rules.reactorExplosions && Mathf.chance(build.delta() * baseChance * Mathf.clamp(item.explosiveness - threshold))){
|
||||
build.damage(damage);
|
||||
explodeEffect.at(build.x + Mathf.range(build.block.size * tilesize / 2f), build.y + Mathf.range(build.block.size * tilesize / 2f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//as this consumer doesn't actually consume anything, all methods below are empty
|
||||
|
||||
@Override
|
||||
public void build(Building build, Table table){}
|
||||
|
||||
@Override
|
||||
public void trigger(Building build){}
|
||||
|
||||
@Override
|
||||
public void display(Stats stats){}
|
||||
|
||||
@Override
|
||||
public void apply(Block block){}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
return 1f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -46,6 +46,11 @@ 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;
|
||||
}
|
||||
|
||||
public @Nullable Item getConsumed(Building build){
|
||||
for(int i = 0; i < content.items().size; i++){
|
||||
Item item = content.item(i);
|
||||
|
||||
20
core/src/mindustry/world/consumers/ConsumeItemFlammable.java
Normal file
20
core/src/mindustry/world/consumers/ConsumeItemFlammable.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import mindustry.gen.*;
|
||||
|
||||
public class ConsumeItemFlammable extends ConsumeItemFilter{
|
||||
|
||||
public ConsumeItemFlammable(float minFlammability){
|
||||
super(item -> item.flammability >= minFlammability);
|
||||
}
|
||||
|
||||
public ConsumeItemFlammable(){
|
||||
this(0.2f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.flammability;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import mindustry.gen.*;
|
||||
|
||||
public class ConsumeItemRadioactive extends ConsumeItemFilter{
|
||||
|
||||
public ConsumeItemRadioactive(float minRadioactivity){
|
||||
super(item -> item.radioactivity >= minRadioactivity);
|
||||
}
|
||||
|
||||
public ConsumeItemRadioactive(){
|
||||
this(0.2f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.radioactivity;
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,11 @@ public class ConsumeLiquidFilter extends ConsumeLiquidBase{
|
||||
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;
|
||||
}
|
||||
|
||||
public @Nullable Liquid getConsumed(Building build){
|
||||
float u = use(build);
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package mindustry.world.consumers;
|
||||
|
||||
import mindustry.gen.*;
|
||||
|
||||
public class ConsumeLiquidFlammable extends ConsumeLiquidFilter{
|
||||
|
||||
public ConsumeLiquidFlammable(float minFlammability, float amount){
|
||||
super(item -> item.flammability >= minFlammability, amount);
|
||||
}
|
||||
|
||||
public ConsumeLiquidFlammable(float amount){
|
||||
this(0.2f, amount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getEfficiency(Building build){
|
||||
var item = getConsumed(build);
|
||||
return item == null ? 0f : item.flammability;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user