From 10188b9ebb5cc509a51bdd80af202afaac2d4512 Mon Sep 17 00:00:00 2001 From: sharlottes Date: Sun, 5 Jun 2022 23:05:03 +0900 Subject: [PATCH] is it releasable? --- src/informatis/ui/draws/UnitDraw.java | 61 +++++----- src/informatis/ui/window/UnitWindow.java | 138 ++++++++++++----------- 2 files changed, 101 insertions(+), 98 deletions(-) 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 rebuildPayload = t -> { - t.left(); - if (target instanceof Payloadc payload) { - Seq payloads = payload.payloads(); - for (int i = 0, m = payload.payloads().size; i < m; i++) { - t.image(payloads.get(i).icon()).size(iconSmall); - if ((i + 1) % Math.max(6, Math.round((window.getWidth() - 24) / iconSmall)) == 0) t.row(); + table.table(state -> { + state.left(); + final Cons
rebuildPayload = t -> { + t.left(); + if (target instanceof Payloadc payloader) { + Seq payloads = payloader.payloads(); + for (int i = 0, m = payloader.payloads().size; i < m; i++) { + Payload payload = payloads.get(i); + Image image = new Image(payload.icon()); + image.clicked(()->ui.content.show(payload.content())); + image.hovered(()->image.setColor(Tmp.c1.set(image.color).lerp(Color.lightGray, Mathf.clamp(Time.delta)))); + image.exited(()->image.setColor(Tmp.c1.set(image.color).lerp(Color.white, Mathf.clamp(Time.delta)))); + t.add(image).size(iconSmall).tooltip(l -> l.label(() -> payload.content().localizedName).style(Styles.outlineLabel)); + if ((i + 1) % Math.max(6, Math.round((window.getWidth() - 24) / iconSmall)) == 0) t.row(); + } + } + }; + + final Cons
rebuildStatus = t -> { + t.top().left(); + if (target instanceof Statusc st) { + Bits applied = st.statusBits(); + if (applied == null) return; + Seq contents = Vars.content.statusEffects(); + for (int i = 0, m = Vars.content.statusEffects().size; i < m; i++) { + StatusEffect effect = contents.get(i); + if (applied.get(effect.id) && !effect.isHidden()) { + Image image = new Image(effect.uiIcon); + image.clicked(()->ui.content.show(effect)); + image.hovered(()->image.setColor(Tmp.c1.set(image.color).lerp(Color.lightGray, Mathf.clamp(Time.delta)))); + image.exited(()->image.setColor(Tmp.c1.set(image.color).lerp(Color.white, Mathf.clamp(Time.delta)))); + t.add(image).size(iconSmall).tooltip(l -> l.label(() -> effect.localizedName + " [lightgray]" + UI.formatTime(st.getDuration(effect))).style(Styles.outlineLabel)); + if (i + 1 % Math.max(6, Math.round((window.getWidth() - 24) / iconSmall)) == 0) t.row(); } } - }; + } + }; - final Cons
rebuildStatus = t -> { - t.top().left(); - if (target instanceof Statusc st) { - Bits applied = st.statusBits(); - if (applied != null) { - Seq contents = Vars.content.statusEffects(); - for (int i = 0, m = Vars.content.statusEffects().size; i < m; i++) { - StatusEffect effect = contents.get(i); - if (applied.get(effect.id) && !effect.isHidden()) { - t.image(effect.uiIcon).size(iconSmall).get() - .addListener(new Tooltip(l -> l.label(() -> effect.localizedName + " [lightgray]" + UI.formatTime(st.getDuration(effect))).style(Styles.outlineLabel))); - } - if (i + 1 % Math.max(6, Math.round((window.getWidth() - 24) / iconSmall)) == 0) t.row(); - } - } - } - }; - - final float[] lastWidth1 = {0}; - state.table(rebuildPayload).update(t -> { - t.left(); - if (lastWidth1[0] != window.getWidth()) { - lastWidth1[0] = window.getWidth(); - t.clear(); - rebuildPayload.get(t); - } else if (target instanceof Payloadc payload) { - if (usedPayload != payload.payloadUsed()) { - usedPayload = payload.payloadUsed(); - t.clear(); - rebuildPayload.get(t); - } - } else { - usedPayload = -1; + final float[] lastWidth1 = {0}; + state.table(rebuildPayload).update(t -> { + t.left(); + if (lastWidth1[0] != window.getWidth()) { + lastWidth1[0] = window.getWidth(); + t.clear(); + rebuildPayload.get(t); + } else if (target instanceof Payloadc payload) { + if (usedPayload != payload.payloadUsed()) { + usedPayload = payload.payloadUsed(); t.clear(); rebuildPayload.get(t); } - }).grow().row(); + } else { + usedPayload = -1; + t.clear(); + rebuildPayload.get(t); + } + }).grow().row(); - final float[] lastWidth2 = {0}; - state.table(rebuildStatus).update(t -> { - t.left(); - if (lastWidth2[0] != window.getWidth()) { - lastWidth2[0] = window.getWidth(); - t.clear(); - rebuildStatus.get(t); - } else if (target instanceof Statusc st) { - Bits applied = st.statusBits(); - if (applied != null && !statuses.equals(applied)) { - statuses.set(applied); - t.clear(); - rebuildStatus.get(t); - } - } else { - statuses.clear(); + final float[] lastWidth2 = {0}; + state.table(rebuildStatus).update(t -> { + t.left(); + if (lastWidth2[0] != window.getWidth()) { + lastWidth2[0] = window.getWidth(); + t.clear(); + rebuildStatus.get(t); + } else if (target instanceof Statusc st) { + Bits applied = st.statusBits(); + if (applied != null && !statuses.equals(applied)) { + statuses.set(applied); t.clear(); rebuildStatus.get(t); } - }).grow(); - }).pad(12f).growX().row(); - } + } else { + statuses.clear(); + t.clear(); + rebuildStatus.get(t); + } + }).grow(); + }).pad(12f).growX().row(); table.image().color((target==null?player.unit():target).team().color).height(4f).growX().row();