is it releasable?

This commit is contained in:
sharlottes
2022-06-05 23:05:03 +09:00
parent a95b876b16
commit 10188b9ebb
2 changed files with 101 additions and 98 deletions

View File

@@ -1,28 +1,25 @@
package informatis.ui.draws; package informatis.ui.draws;
import informatis.ui.FreeBar; import arc.math.geom.*;
import arc.graphics.g2d.Lines; import informatis.SUtils;
import arc.math.Angles; import informatis.ui.*;
import arc.math.Mathf; import arc.graphics.g2d.*;
import arc.scene.style.TextureRegionDrawable; import arc.math.*;
import arc.scene.ui.layout.Scl; import arc.scene.style.*;
import arc.struct.Seq; import arc.scene.ui.layout.*;
import arc.util.Align; import arc.struct.*;
import arc.util.Tmp; import arc.util.*;
import mindustry.Vars; import mindustry.Vars;
import mindustry.ai.Pathfinder; import mindustry.ai.*;
import mindustry.ai.RtsAI;
import mindustry.ai.types.*; import mindustry.ai.types.*;
import mindustry.entities.units.UnitController; import mindustry.entities.units.*;
import mindustry.game.Team; import mindustry.game.*;
import mindustry.gen.Groups; import mindustry.gen.*;
import mindustry.graphics.Pal; import mindustry.graphics.*;
import mindustry.logic.LUnitControl; import mindustry.logic.*;
import mindustry.ui.Fonts; import mindustry.ui.*;
import mindustry.world.Tile; import mindustry.world.*;
import mindustry.world.blocks.storage.CoreBlock; import mindustry.world.blocks.storage.*;
import java.util.Objects;
import static informatis.SUtils.*; import static informatis.SUtils.*;
import static arc.Core.settings; 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 -> { Groups.unit.each(u-> isInCamera(u.x, u.y, u.hitSize), u -> {
UnitController c = u.controller(); 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)) { if(settings.getBool("logicLine") && c instanceof LogicAI ai && (ai.control == LUnitControl.approach || ai.control == LUnitControl.move)) {
Lines.stroke(1, u.team.color); 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); 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); Lines.stroke(1, u.team.color);
otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != u.team); otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != u.team);
pathTiles.clear(); pathTiles.clear();
getNextTile(u.tileOn(), u.controller() instanceof SuicideAI ? 0 : u.pathType(), u.team, u.pathType()); 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++) { for(int i = 0; i < pathTiles.size-1; i++) {
Tile from = pathTiles.get(i); Tile from = pathTiles.get(i);
Tile to = pathTiles.get(i + 1); 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()); Lines.line(from.worldx(), from.worldy(), to.worldx(), to.worldy());
} }
} }
@@ -87,25 +87,22 @@ public class UnitDraw extends OverDraw {
pathTiles.clear(); pathTiles.clear();
otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != enemyTeam); otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != enemyTeam);
getNextTile(t, p, enemyTeam, Pathfinder.fieldCore); getNextTile(t, p, enemyTeam, Pathfinder.fieldCore);
pathTiles.filter(Objects::nonNull);
for(int i = 0; i < pathTiles.size-1; i++) { for(int i = 0; i < pathTiles.size-1; i++) {
Tile from = pathTiles.get(i); Tile from = pathTiles.get(i);
Tile to = pathTiles.get(i + 1); 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()); 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)); Pathfinder.Flowfield field = pathfinder.getField(team, cost, Mathf.clamp(finder, 0, 0));
Tile tile1 = pathfinder.getTargetTile(tile, field); Tile tile1 = pathfinder.getTargetTile(tile, field);
pathTiles.add(tile1); pathTiles.add(tile1);
if(tile1 == tile || tile1 == null || if(tile1 == tile || tile1 == null ||
(finder == 0 && (otherCores != Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team) || tile1.build instanceof CoreBlock.CoreBuild))) (finder == 0 && (otherCores != Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team) || tile1.build instanceof CoreBlock.CoreBuild))) return;
return tile1; getNextTile(tile1, cost, team, finder);
return getNextTile(tile1, cost, team, finder);
} }
} }

View File

@@ -2,6 +2,7 @@ package informatis.ui.window;
import arc.*; import arc.*;
import arc.func.*; import arc.func.*;
import arc.math.Mathf;
import arc.scene.*; import arc.scene.*;
import arc.scene.event.*; import arc.scene.event.*;
import informatis.core.*; import informatis.core.*;
@@ -43,7 +44,7 @@ public class UnitWindow extends Window {
super(Icon.units, "unit"); super(Icon.units, "unit");
} }
//TODO: add new UnitInfoDisplay(), new WeaponDisplay(); //TODO: add weapons
@Override @Override
protected void build(Table table) { protected void build(Table table) {
table.top().background(Styles.black8); table.top().background(Styles.black8);
@@ -81,17 +82,21 @@ public class UnitWindow extends Window {
}).margin(12f); }).margin(12f);
}).margin(12f).row(); }).margin(12f).row();
if(target instanceof Payloadc || target instanceof Statusc) { table.image().color((target == null ? player.unit() : target).team().color).visible(()->target instanceof Payloadc || target instanceof Statusc).height(4f).growX().row();
table.image().color((target == null ? player.unit() : target).team().color).height(4f).growX().row();
table.table(state -> { table.table(state -> {
state.left(); state.left();
final Cons<Table> rebuildPayload = t -> { final Cons<Table> rebuildPayload = t -> {
t.left(); t.left();
if (target instanceof Payloadc payload) { if (target instanceof Payloadc payloader) {
Seq<Payload> payloads = payload.payloads(); Seq<Payload> payloads = payloader.payloads();
for (int i = 0, m = payload.payloads().size; i < m; i++) { for (int i = 0, m = payloader.payloads().size; i < m; i++) {
t.image(payloads.get(i).icon()).size(iconSmall); 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(); if ((i + 1) % Math.max(6, Math.round((window.getWidth() - 24) / iconSmall)) == 0) t.row();
} }
} }
@@ -101,14 +106,16 @@ public class UnitWindow extends Window {
t.top().left(); t.top().left();
if (target instanceof Statusc st) { if (target instanceof Statusc st) {
Bits applied = st.statusBits(); Bits applied = st.statusBits();
if (applied != null) { if (applied == null) return;
Seq<StatusEffect> contents = Vars.content.statusEffects(); Seq<StatusEffect> contents = Vars.content.statusEffects();
for (int i = 0, m = Vars.content.statusEffects().size; i < m; i++) { for (int i = 0, m = Vars.content.statusEffects().size; i < m; i++) {
StatusEffect effect = contents.get(i); StatusEffect effect = contents.get(i);
if (applied.get(effect.id) && !effect.isHidden()) { if (applied.get(effect.id) && !effect.isHidden()) {
t.image(effect.uiIcon).size(iconSmall).get() Image image = new Image(effect.uiIcon);
.addListener(new Tooltip(l -> l.label(() -> effect.localizedName + " [lightgray]" + UI.formatTime(st.getDuration(effect))).style(Styles.outlineLabel))); 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(); if (i + 1 % Math.max(6, Math.round((window.getWidth() - 24) / iconSmall)) == 0) t.row();
} }
} }
@@ -156,7 +163,6 @@ public class UnitWindow extends Window {
} }
}).grow(); }).grow();
}).pad(12f).growX().row(); }).pad(12f).growX().row();
}
table.image().color((target==null?player.unit():target).team().color).height(4f).growX().row(); table.image().color((target==null?player.unit():target).team().color).height(4f).growX().row();