From a16dc5a5d412022b3ad0944be32807d589ed6025 Mon Sep 17 00:00:00 2001 From: sharlotte Date: Fri, 6 Aug 2021 16:18:01 +0900 Subject: [PATCH] improved resources tap --- src/UnitInfo/core/HudUi.java | 22 ++++++ src/UnitInfo/ui/CoresItemsDisplay.java | 99 ++++++++++++++++++++------ 2 files changed, 100 insertions(+), 21 deletions(-) diff --git a/src/UnitInfo/core/HudUi.java b/src/UnitInfo/core/HudUi.java index e24a2b1..6576d8f 100644 --- a/src/UnitInfo/core/HudUi.java +++ b/src/UnitInfo/core/HudUi.java @@ -698,6 +698,28 @@ public class HudUi { tt.add(label); tt.add(button).size(Scl.scl(5 * 8f)); tt.add(lockButton).size(Scl.scl(3 * 8f)); + + tt.clicked(()->{ + if(getTarget() == null) return; + if(control.input instanceof DesktopInput) + ((DesktopInput) control.input).panning = true; + Core.camera.position.set(getTarget().x(), getTarget().y()); + }); + tt.addListener(new Tooltip(tool -> tool.background(Tex.button).table(to -> { + to.table(Tex.underline2, tool2 -> { + tool2.label(()->{ + if(getTarget() instanceof Unit u){ + if(u.getPlayer() != null) return u.getPlayer().name; + else if(u.type != null) return u.type.localizedName; + } + else if(getTarget() instanceof Building b) return b.block.localizedName; + return ""; + }); + + }); + to.row(); + to.label(()->getTarget() == null ? "(" + 0 + ", " + 0 + ")" : "(" + Strings.fixed(getTarget().x() / tilesize, 2) + ", " + Strings.fixed(getTarget().y() / tilesize, 2) + ")"); + }))); }); t.row(); t.table(tt -> { diff --git a/src/UnitInfo/ui/CoresItemsDisplay.java b/src/UnitInfo/ui/CoresItemsDisplay.java index 3d22bf6..409af75 100644 --- a/src/UnitInfo/ui/CoresItemsDisplay.java +++ b/src/UnitInfo/ui/CoresItemsDisplay.java @@ -1,7 +1,9 @@ package UnitInfo.ui; +import arc.scene.ui.Label; import arc.scene.ui.layout.*; import arc.struct.*; +import arc.util.Time; import mindustry.content.*; import mindustry.core.*; import mindustry.game.*; @@ -10,28 +12,53 @@ import mindustry.type.*; import mindustry.ui.*; import mindustry.world.blocks.storage.*; -import static mindustry.Vars.content; -import static mindustry.Vars.iconSmall; +import static mindustry.Vars.*; public class CoresItemsDisplay { - private final ObjectSet usedItems = new ObjectSet<>(); - private final ObjectSet usedUnits = new ObjectSet<>(); + private final ObjectMap> usedItems = new ObjectMap<>(); + private final ObjectMap> usedUnits = new ObjectMap<>(); private CoreBlock.CoreBuild core; public Team[] teams; public Seq tables = new Seq<>(); + public ObjectMap> prevItems = new ObjectMap<>(); + public ObjectMap> updateItems = new ObjectMap<>(); + float heat; public CoresItemsDisplay(Team[] teams) { this.teams = teams; + resetUsed(); rebuild(); } public void resetUsed(){ usedItems.clear(); usedUnits.clear(); + updateItems.clear(); + prevItems.clear(); + for(Team team : teams) { + usedItems.put(team, new ObjectSet<>()); + usedUnits.put(team, new ObjectSet<>()); + Seq stacks = new Seq(); + content.items().each(i -> stacks.add(new ItemStack(i, 0))); + updateItems.put(team, stacks); + prevItems.put(team, stacks); + } tables.each(t->t.background(null)); } - void rebuild(){ + public void updateItem(Team team){ + if(prevItems.get(team) != null && core != null) for(Item item : content.items()){ + updateItems.get(team).get(item.id).set(item, core.items.get(item) - prevItems.get(team).get(item.id).amount); + prevItems.get(team).get(item.id).set(item, core.items.get(item)); + } + prevItems.clear(); + Seq stacks = new Seq(); + if(core != null) content.items().each(i -> stacks.add(new ItemStack(i, core.items.get(i)))); + prevItems.put(team, stacks); + + } + + public void rebuild(){ tables.clear(); for(Team team : teams) { tables.add(new Table(t -> { @@ -45,29 +72,59 @@ public class CoresItemsDisplay { t.update(() -> { core = team.core(); - if(content.items().contains(item -> core != null && core.items.get(item) > 0 && usedItems.add(item)) || content.units().contains(unit -> core != null && Groups.unit.count(u -> u.team == team) > 0 && usedUnits.add(unit))){ + heat += Time.delta; + if(heat >= 60f) { + heat = 0; + updateItem(team); + } + + if(content.items().contains(item -> core != null && + core.items.get(item) > 0 && + usedItems.get(team).add(item)) || + content.units().contains(unit -> core != null && + Groups.unit.count(u -> u.type == unit && u.team == team) > 0 && + usedUnits.get(team).add(unit))){ rebuild(); } }); - int i = 0; - for(Item item : content.items()){ - if(usedItems.contains(item)){ - t.image(item.uiIcon).size(iconSmall).padRight(3).tooltip(tt -> tt.background(Styles.black6).margin(2f).add(item.localizedName).style(Styles.outlineLabel)); - t.label(() -> core == null ? "0" : UI.formatAmount(core.items.get(item))).padRight(3).minWidth(5 * 8f).left(); - if(++i % 5 == 0) t.row(); + final int[] i = {0}; + t.table(itemTable -> { + itemTable.center(); + for(Item item : content.items()){ + if(usedItems.get(team).contains(item)){ + itemTable.add(new Stack(){{ + add(new Table(tt -> { + tt.image(item.uiIcon).size(iconSmall).tooltip(ttt -> ttt.background(Styles.black6).margin(2f).add(item.localizedName).style(Styles.outlineLabel)); + tt.label(() -> core == null ? "0" : UI.formatAmount(core.items.get(item))).minWidth(5 * 8f).left(); + })); + add(new Table(tt -> { + tt.bottom().right(); + Label label = new Label(() -> { + int amount = updateItems.get(team).get(item.id).amount; + return (amount > 0 ? "[green]+" : amount == 0 ? "[orange]" : "[red]") + amount + "[]"; + }); + label.setFontScale(0.65f); + tt.add(label).bottom().right().padTop(16f); + tt.pack(); + })); + }}).padRight(3).left(); + if(++i[0] % 5 == 0) itemTable.row(); + } } - } + }); t.row(); - i = 0; - for(UnitType unit : content.units()){ - if(unit == UnitTypes.block) continue; - if(usedUnits.contains(unit)){ - t.image(unit.uiIcon).size(iconSmall).padRight(3).tooltip(tt -> tt.background(Styles.black6).margin(2f).add(unit.localizedName).style(Styles.outlineLabel)); - t.label(() -> core == null ? "0" : UI.formatAmount(Groups.unit.count(u -> u.team == team && u.type == unit))).padRight(3).minWidth(5 * 8f).left(); - if(++i % 5 == 0) t.row(); + i[0] = 0; + t.table(unitTable -> { + unitTable.center(); + for(UnitType unit : content.units()){ + if(unit != UnitTypes.block && usedUnits.get(team).contains(unit)){ + unitTable.image(unit.uiIcon).size(iconSmall).padRight(3).tooltip(tt -> tt.background(Styles.black6).margin(2f).add(unit.localizedName).style(Styles.outlineLabel)); + unitTable.label(() -> core == null ? "0" : UI.formatAmount(Groups.unit.count(u -> u.team == team && u.type == unit))).padRight(3).minWidth(5 * 8f).left(); + if(++i[0] % 5 == 0) unitTable.row(); + } } - } + }); })); } }