More unit assembler progress
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package mindustry.world.blocks.units;
|
||||
|
||||
import arc.*;
|
||||
import arc.graphics.*;
|
||||
import arc.graphics.g2d.*;
|
||||
import arc.math.*;
|
||||
import arc.math.geom.*;
|
||||
@@ -40,6 +41,7 @@ public class UnitAssembler extends PayloadBlock{
|
||||
update = solid = true;
|
||||
rotate = true;
|
||||
rotateDraw = false;
|
||||
acceptsPayload = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -87,7 +89,7 @@ public class UnitAssembler extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
consumes.add(new ConsumePayloads(requirements, (UnitAssemblerBuild build) -> build.blocks));
|
||||
consumes.add(new ConsumePayloads(requirements));
|
||||
|
||||
super.init();
|
||||
}
|
||||
@@ -96,6 +98,8 @@ public class UnitAssembler extends PayloadBlock{
|
||||
public Seq<Unit> units = new Seq<>();
|
||||
public BlockSeq blocks = new BlockSeq();
|
||||
|
||||
public boolean wasOccupied = false;
|
||||
|
||||
//TODO progress
|
||||
//TODO how should payloads be stored exactly? counts of blocks? intmap? references?
|
||||
|
||||
@@ -130,8 +134,10 @@ public class UnitAssembler extends PayloadBlock{
|
||||
|
||||
Vec2 spawn = getUnitSpawn();
|
||||
|
||||
wasOccupied = checkSolid(spawn);
|
||||
|
||||
//check if all requirements are met
|
||||
if(consValid() & Units.canCreate(team, output)){
|
||||
if(!wasOccupied && consValid() & Units.canCreate(team, output)){
|
||||
|
||||
//TODO ???? should this even be part of a trigger
|
||||
consume();
|
||||
@@ -172,9 +178,23 @@ public class UnitAssembler extends PayloadBlock{
|
||||
Draw.mixcol(Pal.accent, 1f);
|
||||
Draw.alpha(0.4f + Mathf.absin(10f, 0.2f));
|
||||
Draw.rect(output.fullIcon, spawn.x, spawn.y);
|
||||
|
||||
//TODO dash rect for output, fades in/out
|
||||
Draw.color(!wasOccupied ? Color.green : Color.red);
|
||||
Lines.square(spawn.x, spawn.y, output.hitSize/2f);
|
||||
|
||||
Draw.reset();
|
||||
}
|
||||
|
||||
public boolean checkSolid(Vec2 v){
|
||||
return !output.flying && (collisions.overlapsTile(Tmp.r1.setCentered(v.x, v.y, output.hitSize), EntityCollisions::solid) || Units.anyEntities(v.x, v.y, output.hitSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public BlockSeq getBlockPayloads(){
|
||||
return blocks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handlePayload(Building source, Payload payload){
|
||||
//super.handlePayload(source, payload);
|
||||
@@ -184,6 +204,7 @@ public class UnitAssembler extends PayloadBlock{
|
||||
//payloads.add((BuildPayload)payload);
|
||||
}
|
||||
|
||||
//TODO doesn't accept from payload source
|
||||
@Override
|
||||
public boolean acceptPayload(Building source, Payload payload){
|
||||
return payload instanceof BuildPayload bp && requirements.contains(b -> b.block == bp.block() && blocks.get(bp.block()) < b.amount);
|
||||
|
||||
@@ -9,24 +9,20 @@ import mindustry.ui.*;
|
||||
import mindustry.world.meta.*;
|
||||
|
||||
public class ConsumePayloads extends Consume{
|
||||
//TODO bad, should be part of Building + dynamic
|
||||
protected Func<Building, BlockSeq> inventory;
|
||||
|
||||
public Seq<BlockStack> payloads;
|
||||
|
||||
public <T extends Building> ConsumePayloads(Seq<BlockStack> payloads, Func<T, BlockSeq> inventory){
|
||||
public <T extends Building> ConsumePayloads(Seq<BlockStack> payloads){
|
||||
this.payloads = payloads;
|
||||
this.inventory = (Func<Building, BlockSeq>)inventory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean valid(Building build){
|
||||
return inventory.get(build).contains(payloads);
|
||||
return build.getBlockPayloads().contains(payloads);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void trigger(Building build){
|
||||
inventory.get(build).remove(payloads);
|
||||
build.getBlockPayloads().remove(payloads);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +39,7 @@ public class ConsumePayloads extends Consume{
|
||||
|
||||
@Override
|
||||
public void build(Building build, Table table){
|
||||
var inv = inventory.get(build);
|
||||
var inv = build.getBlockPayloads();
|
||||
|
||||
table.table(c -> {
|
||||
int i = 0;
|
||||
|
||||
Reference in New Issue
Block a user