Unit assembly system progress

This commit is contained in:
Anuken
2021-12-18 11:50:21 -05:00
parent 3866a9a8e7
commit 41b669d6e1
16 changed files with 397 additions and 35 deletions

View File

@@ -9,6 +9,7 @@ import mindustry.ui.*;
public class ConsumeItemDynamic extends Consume{
public final Func<Building, ItemStack[]> items;
@SuppressWarnings("unchecked")
public <T extends Building> ConsumeItemDynamic(Func<T, ItemStack[]> items){
this.items = (Func<Building, ItemStack[]>)items;
}

View File

@@ -0,0 +1,68 @@
package mindustry.world.consumers;
import arc.func.*;
import arc.scene.ui.layout.*;
import arc.struct.*;
import mindustry.gen.*;
import mindustry.type.*;
import mindustry.ui.*;
import mindustry.world.meta.*;
public class ConsumePayloadDynamic extends Consume{
public final Func<Building, Seq<BlockStack>> payloads;
@SuppressWarnings("unchecked")
public <T extends Building> ConsumePayloadDynamic(Func<T, Seq<BlockStack>> payloads){
this.payloads = (Func<Building, Seq<BlockStack>>)payloads;
}
@Override
public boolean valid(Building build){
return build.getBlockPayloads().contains(payloads.get(build));
}
@Override
public void trigger(Building build){
build.getBlockPayloads().remove(payloads.get(build));
}
@Override
public void display(Stats stats){
//needs to be implemented by the block itself, not enough info to display here
}
@Override
public void build(Building build, Table table){
Seq[] current = {payloads.get(build)};
table.table(cont -> {
table.update(() -> {
if(current[0] != payloads.get(build)){
rebuild(build, cont);
current[0] = payloads.get(build);
}
});
rebuild(build, cont);
});
}
private void rebuild(Building build, Table table){
var inv = build.getBlockPayloads();
var pay = payloads.get(build);
table.table(c -> {
int i = 0;
for(var stack : pay){
c.add(new ReqImage(new ItemImage(stack.block.uiIcon, stack.amount),
() -> inv.contains(stack.block, stack.amount))).padRight(8);
if(++i % 4 == 0) c.row();
}
}).left();
}
@Override
public ConsumeType type(){
return ConsumeType.payload;
}
}