diff --git a/src/informatis/ui/draws/UnitDraw.java b/src/informatis/ui/draws/UnitDraw.java index b3fe50a..62c8730 100644 --- a/src/informatis/ui/draws/UnitDraw.java +++ b/src/informatis/ui/draws/UnitDraw.java @@ -1,28 +1,25 @@ package informatis.ui.draws; -import informatis.ui.FreeBar; -import arc.graphics.g2d.Lines; -import arc.math.Angles; -import arc.math.Mathf; -import arc.scene.style.TextureRegionDrawable; -import arc.scene.ui.layout.Scl; -import arc.struct.Seq; -import arc.util.Align; -import arc.util.Tmp; +import arc.math.geom.*; +import informatis.SUtils; +import informatis.ui.*; +import arc.graphics.g2d.*; +import arc.math.*; +import arc.scene.style.*; +import arc.scene.ui.layout.*; +import arc.struct.*; +import arc.util.*; import mindustry.Vars; -import mindustry.ai.Pathfinder; -import mindustry.ai.RtsAI; +import mindustry.ai.*; import mindustry.ai.types.*; -import mindustry.entities.units.UnitController; -import mindustry.game.Team; -import mindustry.gen.Groups; -import mindustry.graphics.Pal; -import mindustry.logic.LUnitControl; -import mindustry.ui.Fonts; -import mindustry.world.Tile; -import mindustry.world.blocks.storage.CoreBlock; - -import java.util.Objects; +import mindustry.entities.units.*; +import mindustry.game.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.logic.*; +import mindustry.ui.*; +import mindustry.world.*; +import mindustry.world.blocks.storage.*; import static informatis.SUtils.*; import static arc.Core.settings; @@ -47,7 +44,6 @@ public class UnitDraw extends OverDraw { Groups.unit.each(u-> isInCamera(u.x, u.y, u.hitSize), u -> { UnitController c = u.controller(); - RtsAI rts = u.team.data().rtsAi; if(settings.getBool("logicLine") && c instanceof LogicAI ai && (ai.control == LUnitControl.approach || ai.control == LUnitControl.move)) { Lines.stroke(1, u.team.color); @@ -56,17 +52,21 @@ public class UnitDraw extends OverDraw { Lines.line(u.x(), u.y(), ai.controller.x, ai.controller.y); } - if(settings.getBool("unitLine") && !u.type.flying && !(c instanceof MinerAI || c instanceof BuilderAI || c instanceof RepairAI || c instanceof DefenderAI || c instanceof FlyingAI)) { + if(c instanceof CommandAI com && com.hasCommand()) { + Lines.stroke(1, u.team.color); + + Lines.line(u.x(), u.y(), com.targetPos.x, com.targetPos.y); + } + else if(settings.getBool("unitLine") && !u.type.flying && !(c instanceof MinerAI || c instanceof BuilderAI || c instanceof RepairAI || c instanceof DefenderAI || c instanceof FlyingAI)) { Lines.stroke(1, u.team.color); otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != u.team); pathTiles.clear(); getNextTile(u.tileOn(), u.controller() instanceof SuicideAI ? 0 : u.pathType(), u.team, u.pathType()); - pathTiles.filter(Objects::nonNull); for(int i = 0; i < pathTiles.size-1; i++) { Tile from = pathTiles.get(i); Tile to = pathTiles.get(i + 1); - if(isOutCamera(from.worldx(), from.worldy())) continue; + if(from == null || to == null || isOutCamera(from.worldx(), from.worldy())) continue; Lines.line(from.worldx(), from.worldy(), to.worldx(), to.worldy()); } } @@ -87,25 +87,22 @@ public class UnitDraw extends OverDraw { pathTiles.clear(); otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != enemyTeam); getNextTile(t, p, enemyTeam, Pathfinder.fieldCore); - pathTiles.filter(Objects::nonNull); - for(int i = 0; i < pathTiles.size-1; i++) { Tile from = pathTiles.get(i); Tile to = pathTiles.get(i + 1); - if(isOutCamera(from.worldx(), from.worldy())) continue; + if(from == null || to == null || isOutCamera(from.worldx(), from.worldy())) continue; Lines.line(from.worldx(), from.worldy(), to.worldx(), to.worldy()); } } }); } - Tile getNextTile(Tile tile, int cost, Team team, int finder) { + void getNextTile(Tile tile, int cost, Team team, int finder) { Pathfinder.Flowfield field = pathfinder.getField(team, cost, Mathf.clamp(finder, 0, 0)); Tile tile1 = pathfinder.getTargetTile(tile, field); pathTiles.add(tile1); if(tile1 == tile || tile1 == null || - (finder == 0 && (otherCores != Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team) || tile1.build instanceof CoreBlock.CoreBuild))) - return tile1; - return getNextTile(tile1, cost, team, finder); + (finder == 0 && (otherCores != Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team) || tile1.build instanceof CoreBlock.CoreBuild))) return; + getNextTile(tile1, cost, team, finder); } } diff --git a/src/informatis/ui/window/UnitWindow.java b/src/informatis/ui/window/UnitWindow.java index ce0a357..be7d839 100644 --- a/src/informatis/ui/window/UnitWindow.java +++ b/src/informatis/ui/window/UnitWindow.java @@ -2,6 +2,7 @@ package informatis.ui.window; import arc.*; import arc.func.*; +import arc.math.Mathf; import arc.scene.*; import arc.scene.event.*; import informatis.core.*; @@ -43,7 +44,7 @@ public class UnitWindow extends Window { super(Icon.units, "unit"); } - //TODO: add new UnitInfoDisplay(), new WeaponDisplay(); + //TODO: add weapons @Override protected void build(Table table) { table.top().background(Styles.black8); @@ -81,82 +82,87 @@ public class UnitWindow extends Window { }).margin(12f); }).margin(12f).row(); - if(target instanceof Payloadc || target instanceof Statusc) { - table.image().color((target == null ? player.unit() : target).team().color).height(4f).growX().row(); + table.image().color((target == null ? player.unit() : target).team().color).visible(()->target instanceof Payloadc || target instanceof Statusc).height(4f).growX().row(); - table.table(state -> { - state.left(); - final Cons