Turret-based radar

This commit is contained in:
Anuken
2020-08-10 23:04:52 -04:00
parent 4f7d6fc018
commit 75ada3cca1
19 changed files with 377 additions and 29 deletions

View File

@@ -1,5 +1,6 @@
package mindustry.logic;
import arc.func.*;
import arc.graphics.*;
import arc.scene.style.*;
import arc.scene.ui.*;
@@ -266,7 +267,7 @@ public class LStatements{
table.left();
table.add("set ");
table.add(" set ");
table.button(b -> {
b.label(() -> type.name());
@@ -304,6 +305,62 @@ public class LStatements{
}
}
@RegisterStatement("radar")
public static class RadarStatement extends LStatement{
public RadarTarget target1 = RadarTarget.enemy, target2 = RadarTarget.any, target3 = RadarTarget.any;
public RadarSort sort = RadarSort.distance;
public String radar = "@0", sortOrder = "0", output = "result";
@Override
public void build(Table table){
table.defaults().left();
table.add(" from ");
fields(table, radar, v -> radar = v);
table.row();
for(int i = 0; i < 3; i++){
int fi = i;
Prov<RadarTarget> get = () -> (fi == 0 ? target1 : fi == 1 ? target2 : target3);
table.add(i == 0 ? " target " : " and ");
table.button(b -> {
b.label(() -> get.get().name());
b.clicked(() -> showSelect(b, RadarTarget.all, get.get(), t -> {
if(fi == 0) target1 = t; else if(fi == 1) target2 = t; else target3 = t;
}, 2, cell -> cell.size(100, 50)));
}, Styles.logict, () -> {}).size(90, 40).color(table.color).left().padLeft(2);
if(i == 1){
table.row();
}
}
table.add(" order ");
fields(table, sortOrder, v -> sortOrder = v);
table.row();
table.add(" output ");
fields(table, output, v -> output = v);
}
@Override
public LCategory category(){
return LCategory.blocks;
}
@Override
public LInstruction build(LAssembler builder){
return new RadarI(target1, target2, target3, sort, builder.var(radar), builder.var(sortOrder), builder.var(output));
}
}
@RegisterStatement("sensor")
public static class SensorStatement extends LStatement{
public String to = "result";