Payload router sorter mode

This commit is contained in:
Anuken
2021-12-16 10:31:16 -05:00
parent 00ed0d017c
commit e481de9d28
27 changed files with 866 additions and 568 deletions

View File

@@ -0,0 +1,66 @@
package mindustry.world.consumers;
import arc.func.*;
import arc.scene.ui.layout.*;
import mindustry.*;
import mindustry.gen.*;
import mindustry.ui.*;
import mindustry.world.*;
import mindustry.world.meta.*;
import static mindustry.Vars.*;
public class ConsumePayloadFilter extends Consume{
//cache fitting blocks to prevent search over all blocks later
protected final Block[] fitting;
public Boolf<Block> filter;
public ConsumePayloadFilter(Boolf<Block> filter){
this.filter = filter;
this.fitting = Vars.content.blocks().select(filter).toArray(Block.class);
}
@Override
public boolean valid(Building build){
var payloads = build.getBlockPayloads();
for(var block : fitting){
if(payloads.contains(block, 1)){
return true;
}
}
return false;
}
@Override
public void trigger(Building build){
var payloads = build.getBlockPayloads();
for(var block : fitting){
if(payloads.contains(block, 1)){
payloads.remove(block);
return;
}
}
}
@Override
public void display(Stats stats){
stats.add(booster ? Stat.booster : Stat.input, StatValues.blocks(filter));
}
@Override
public void build(Building build, Table table){
var inv = build.getBlockPayloads();
MultiReqImage image = new MultiReqImage();
content.blocks().each(i -> filter.get(i) && i.unlockedNow(), block -> image.add(new ReqImage(new ItemImage(block.uiIcon, 1),
() -> inv.contains(block, 1))));
table.add(image).size(8 * 4);
}
@Override
public ConsumeType type(){
return ConsumeType.payload;
}
}

View File

@@ -1,6 +1,5 @@
package mindustry.world.consumers;
import arc.func.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import mindustry.gen.*;
@@ -11,7 +10,7 @@ import mindustry.world.meta.*;
public class ConsumePayloads extends Consume{
public Seq<BlockStack> payloads;
public <T extends Building> ConsumePayloads(Seq<BlockStack> payloads){
public ConsumePayloads(Seq<BlockStack> payloads){
this.payloads = payloads;
}