From 84686a260d002d5134a62cf211a3936d5aa9f5d4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 10 Apr 2022 12:14:22 -0400 Subject: [PATCH] Fetch instruction --- ...planetary-accelerator-team_TODO_UNUSED.png | Bin 3767 -> 0 bytes .../campaign/interplanetary-accelerator.png | Bin 11273 -> 5407 bytes core/src/mindustry/content/UnitTypes.java | 3 +- core/src/mindustry/game/Teams.java | 7 +++ core/src/mindustry/logic/FetchType.java | 12 ++++ core/src/mindustry/logic/LExecutor.java | 39 ++++++++++++- core/src/mindustry/logic/LStatements.java | 54 ++++++++++++++++++ tools/build.gradle | 2 +- 8 files changed, 112 insertions(+), 5 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team_TODO_UNUSED.png create mode 100644 core/src/mindustry/logic/FetchType.java diff --git a/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team_TODO_UNUSED.png b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator-team_TODO_UNUSED.png deleted file mode 100644 index e141d97940c02871eca8eeb946edc0aeded96d8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3767 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 diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 79ea0b9daa..faec72cada 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -976,7 +976,8 @@ public class UnitTypes{ flying = true; health = 70; engineOffset = 5.75f; - targetAir = false; + //TODO balance + //targetAir = false; targetFlags = new BlockFlag[]{BlockFlag.generator, null}; hitSize = 7; itemCapacity = 10; diff --git a/core/src/mindustry/game/Teams.java b/core/src/mindustry/game/Teams.java index 1b3cfa61c9..50015e612b 100644 --- a/core/src/mindustry/game/Teams.java +++ b/core/src/mindustry/game/Teams.java @@ -150,6 +150,7 @@ public class Teams{ data.presentFlag = false; data.unitCount = 0; data.units.clear(); + data.players.clear(); if(data.tree != null){ data.tree.clear(); } @@ -195,6 +196,10 @@ public class Teams{ count(unit); } + for(var player : Groups.player){ + player.team().data().players.add(player); + } + //update presence of each team. for(Team team : Team.all){ TeamData data = team.data(); @@ -251,6 +256,8 @@ public class Teams{ public @Nullable QuadTree tree; /** Units of this team. Updated each frame. */ public Seq units = new Seq<>(); + /** Same as units, but players. */ + public Seq players = new Seq<>(); /** Units of this team by type. Updated each frame. */ public @Nullable Seq[] unitsByType; diff --git a/core/src/mindustry/logic/FetchType.java b/core/src/mindustry/logic/FetchType.java new file mode 100644 index 0000000000..6936fe3960 --- /dev/null +++ b/core/src/mindustry/logic/FetchType.java @@ -0,0 +1,12 @@ +package mindustry.logic; + +public enum FetchType{ + unit, + unitCount, + player, + playerCount, + core, + coreCount; + + public static final FetchType[] all = values(); +} diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index d52cfc5e65..a934971aa7 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1164,6 +1164,37 @@ public class LExecutor{ } } + public static class FetchI implements LInstruction{ + public FetchType type = FetchType.unit; + public int result, team, index; + + public FetchI(FetchType type, int result, int team, int index){ + this.type = type; + this.result = result; + this.team = team; + this.index = index; + } + + public FetchI(){ + } + + @Override + public void run(LExecutor exec){ + int i = exec.numi(index); + if(!(exec.obj(team) instanceof Team t)) return; + TeamData data = t.data(); + + switch(type){ + case unit -> exec.setobj(result, i < 0 || i >= data.units.size ? null : data.units.get(i)); + case player -> exec.setobj(result, i < 0 || i >= data.players.size || data.players.get(i).unit().isNull() ? null : data.players.get(i).unit()); + case core -> exec.setobj(result, i < 0 || i >= data.cores.size ? null : data.cores.get(i)); + case unitCount -> exec.setnum(result, data.units.size); + case coreCount -> exec.setnum(result, data.cores.size); + case playerCount -> exec.setnum(result, data.players.size); + } + } + } + //endregion //region privileged / world instructions @@ -1225,14 +1256,16 @@ public class LExecutor{ //TODO this can be quite laggy... switch(layer){ case ore -> { - if(b instanceof OverlayFloor o) tile.setOverlayNet(o); + if(b instanceof OverlayFloor o && tile.overlay() != o) tile.setOverlayNet(o); } case floor -> { - if(b instanceof Floor f) tile.setFloorNet(f); + if(b instanceof Floor f && tile.floor() != f) tile.setFloorNet(f); } case block -> { Team t = exec.obj(team) instanceof Team steam ? steam : Team.derelict; - tile.setNet(b, t, Mathf.clamp(exec.numi(rotation), 0, 3)); + if(tile.block() != b || tile.team() != t){ + tile.setNet(b, t, Mathf.clamp(exec.numi(rotation), 0, 3)); + } } //building case not allowed } diff --git a/core/src/mindustry/logic/LStatements.java b/core/src/mindustry/logic/LStatements.java index 40809d7cdb..7fff92da7d 100644 --- a/core/src/mindustry/logic/LStatements.java +++ b/core/src/mindustry/logic/LStatements.java @@ -1460,4 +1460,58 @@ public class LStatements{ return new SetRateI(builder.var(amount)); } } + + @RegisterStatement("fetch") + public static class FetchStatement extends LStatement{ + public FetchType type = FetchType.unit; + public String result = "result", team = "@sharded", index = "0"; + + @Override + public void build(Table table){ + rebuild(table); + } + + void rebuild(Table table){ + table.clearChildren(); + + fields(table, result, r -> result = r); + + table.add(" = "); + + table.button(b -> { + b.label(() -> type.name()).growX().wrap().labelAlign(Align.center); + b.clicked(() -> showSelect(b, FetchType.all, type, o -> { + type = o; + rebuild(table); + }, 2, c -> c.width(150f))); + }, Styles.logict, () -> {}).size(160f, 40f).margin(5f).pad(4f).color(table.color); + + row(table); + + fields(table, "team", team, s -> team = s); + + if(type != FetchType.coreCount && type != FetchType.playerCount && type != FetchType.unitCount){ + table.add(" # "); + + row(table); + + fields(table, index, i -> index = i); + } + } + + @Override + public boolean privileged(){ + return true; + } + + @Override + public Color color(){ + return Pal.logicWorld; + } + + @Override + public LInstruction build(LAssembler builder){ + return new FetchI(type, builder.var(result), builder.var(team), builder.var(index)); + } + } } diff --git a/tools/build.gradle b/tools/build.gradle index f861ad27b6..244edc4133 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -164,7 +164,7 @@ task pack(dependsOn: [classes, configurations.runtimeClasspath]){ //antialias everything except UI elements fileTree(dir: new File(rootDir, 'core/assets-raw/sprites_out/').absolutePath, include: "**/*.png").visit{ file -> - if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png") || file.toString().contains("alphaaaa")) return + if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png") || file.toString().contains("aaaa")) return executor.submit{ antialias(file.file, doAntialias, useFastAA)