From 8b9648c298d42dbf7a03d4bd3768c9d926d1946a Mon Sep 17 00:00:00 2001 From: sharlotte Date: Sun, 15 Aug 2021 22:03:01 +0900 Subject: [PATCH] p a t h f i n d e r = p.a.i.n --- src/UnitInfo/SVars.java | 4 ++++ src/UnitInfo/core/HudUi.java | 7 +++++++ src/UnitInfo/core/Main.java | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) diff --git a/src/UnitInfo/SVars.java b/src/UnitInfo/SVars.java index c972ea9..1768b8a 100644 --- a/src/UnitInfo/SVars.java +++ b/src/UnitInfo/SVars.java @@ -4,6 +4,7 @@ import UnitInfo.core.*; import arc.files.*; import arc.graphics.g2d.TextureRegion; import arc.struct.*; +import mindustry.world.Tile; import static arc.Core.atlas; import static arc.Core.settings; @@ -18,4 +19,7 @@ public class SVars { public static TextureRegion clear = atlas.find("clear"); public static TextureRegion error = atlas.find("error"); public static float modUiScale = settings.getInt("infoUiScale") / 100f == 0 ? 1 : settings.getInt("infoUiScale") / 100f; + + + public static Seq pathTiles = new Seq<>(); } diff --git a/src/UnitInfo/core/HudUi.java b/src/UnitInfo/core/HudUi.java index 19a1749..fa15715 100644 --- a/src/UnitInfo/core/HudUi.java +++ b/src/UnitInfo/core/HudUi.java @@ -372,6 +372,13 @@ public class HudUi { ttt.right().bottom(); ttt.add(new Label(() -> Groups.unit.count(u -> u.type == type && u.team == state.rules.waveTeam && u.isBoss()) + "")); })); + add(new Table(ttt -> { + ttt.top().right(); + Image image = new Image(Icon.warning.getRegion()).setScaling(Scaling.fit); + image.update(() -> image.setColor(Tmp.c2.set(Color.orange).lerp(Color.scarlet, Mathf.absin(Time.time, 2f, 1f)))); + ttt.add(image).size(Scl.scl(modUiScale < 1 ? modUiScale : 1) * 12f); + ttt.pack(); + })); }}).pad(6); if(++i[0] % 6 == 0) tt.row(); }); diff --git a/src/UnitInfo/core/Main.java b/src/UnitInfo/core/Main.java index bb36b3e..a9da3ff 100644 --- a/src/UnitInfo/core/Main.java +++ b/src/UnitInfo/core/Main.java @@ -6,8 +6,11 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.scene.ui.layout.*; +import arc.struct.IntSeq; +import arc.struct.Seq; import arc.util.*; import mindustry.*; +import mindustry.ai.Pathfinder; import mindustry.ai.types.BuilderAI; import mindustry.ai.types.MinerAI; import mindustry.content.*; @@ -20,12 +23,29 @@ import mindustry.mod.*; import mindustry.ui.*; import mindustry.world.*; import mindustry.world.blocks.defense.turrets.*; +import mindustry.world.blocks.storage.CoreBlock; +import mindustry.world.meta.BlockFlag; + +import java.lang.reflect.Field; +import java.util.Objects; import static UnitInfo.SVars.*; import static arc.Core.*; import static mindustry.Vars.*; public class Main extends Mod { + int otherCores; + + public Tile getNextTile(Tile tile){ + Team team = state.rules.waveTeam; + Pathfinder.Flowfield field = pathfinder.getField(team, Pathfinder.costGround, Pathfinder.fieldCore); + Tile tile1 = pathfinder.getTargetTile(tile, field); + pathTiles.add(tile1); + if(otherCores != Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team) || tile1 == tile || tile1 == null || tile1.build instanceof CoreBlock.CoreBuild || !Groups.build.contains(b -> b.team != team)) //so many ififififififif. + return tile1; + return getNextTile(tile1); + } + @Override public void init(){ Events.on(ClientLoadEvent.class, e -> { @@ -53,6 +73,21 @@ public class Main extends Mod { }); Events.run(Trigger.draw, () -> { + spawner.getSpawns().each(t -> { + Team enemyTeam = state.rules.waveTeam; + otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != enemyTeam); + getNextTile(t); + pathTiles.filter(Objects::nonNull); + for(int i = 1; i < pathTiles.size; i++){ + if(i + 1 >= pathTiles.size) continue; //prevent IndexOutException + Tile tile1 = pathTiles.get(i); + Tile tile2 = pathTiles.get(i + 1); + Lines.stroke(1, enemyTeam.color); + Lines.line(tile1.worldx(), tile1.worldy(), tile2.worldx(), tile2.worldy()); + } + pathTiles.clear(); + }); + if(settings.getBool("blockstatus")) Groups.build.each(build -> { if(Vars.player != null && Vars.player.team() == build.team) return;