From a95b876b164617917ec889ff97c46d348c1a769c Mon Sep 17 00:00:00 2001 From: sharlottes Date: Sun, 5 Jun 2022 15:58:53 +0900 Subject: [PATCH] code clean up --- src/informatis/SUtils.java | 3 +- src/informatis/ui/SBar.java | 29 ++- src/informatis/ui/WindowManager.java | 8 +- src/informatis/ui/window/CoreWindow.java | 29 +-- src/informatis/ui/window/MapEditorWindow.java | 39 ++- src/informatis/ui/window/PlayerWindow.java | 19 +- src/informatis/ui/window/ToolWindow.java | 21 +- src/informatis/ui/window/UnitWindow.java | 233 ++++++++++-------- src/informatis/ui/window/WaveWindow.java | 26 +- src/informatis/ui/window/Window.java | 12 +- 10 files changed, 224 insertions(+), 195 deletions(-) diff --git a/src/informatis/SUtils.java b/src/informatis/SUtils.java index 626043d..8d57816 100644 --- a/src/informatis/SUtils.java +++ b/src/informatis/SUtils.java @@ -55,12 +55,11 @@ public class SUtils { } public static String formatNumber(T number){ - if(number instanceof Integer integ) return integ.toString(); - if(number.longValue() % 10 == 0) return String.valueOf(number.intValue()); return formatNumber(number, 1); } public static String formatNumber(T number, int step){ if(number.intValue() >= 1000) return UI.formatAmount(number.longValue()); + if(number instanceof Integer || number.longValue() % 10 == 0) return String.valueOf(number.intValue()); return Strings.fixed(number.floatValue(), step); } diff --git a/src/informatis/ui/SBar.java b/src/informatis/ui/SBar.java index 8c641cb..c7a96db 100644 --- a/src/informatis/ui/SBar.java +++ b/src/informatis/ui/SBar.java @@ -20,7 +20,7 @@ public class SBar extends Element{ Floatp fraction; String name = ""; float value, lastValue, blink; - final Color blinkColor = new Color(); + Color blinkColor = new Color(), lastColor = new Color(); NinePatchDrawable bar, top; float spriteWidth; @@ -31,6 +31,7 @@ public class SBar extends Element{ this.fraction = ()->fraction; this.name = Core.bundle.get(name, name); this.blinkColor.set(color); + this.lastColor = color; lastValue = value = fraction; setColor(color); init(); @@ -48,6 +49,29 @@ public class SBar extends Element{ try{ this.name = name.get(); this.blinkColor.set(color.get()); + this.lastColor.set(color.get()); + setColor(color.get()); + }catch(Exception e){ //getting the fraction may involve referring to invalid data + this.name = ""; + } + }); + init(); + } + + //dynamic bar + public SBar(Prov name, Prov color, Prov lastColor, Floatp fraction){ + this.fraction = fraction; + try{ + lastValue = value = Mathf.clamp(fraction.get()); + }catch(Exception e){ //getting the fraction may involve referring to invalid data + lastValue = value = 0f; + } + this.name = name.get(); + update(() -> { + try{ + this.name = name.get(); + this.blinkColor.set(color.get()); + this.lastColor.set(lastColor.get()); setColor(color.get()); }catch(Exception e){ //getting the fraction may involve referring to invalid data this.name = ""; @@ -61,6 +85,7 @@ public class SBar extends Element{ return this; } + //TODO: clean up public SBar init(){ int h = Core.settings.getInt("barstyle"); @@ -129,7 +154,7 @@ public class SBar extends Element{ Draw.colorl(0.1f); bar.draw(x, y, width, height); - Draw.color(Tmp.c1.set(color).mul(Pal.lightishGray), blinkColor, blink); + Draw.color(Tmp.c1.set(lastColor).mul(Pal.lightishGray), blinkColor, blink); float topWidth = width * value; if(topWidth > spriteWidth){ top.draw(x, y, topWidth, height); diff --git a/src/informatis/ui/WindowManager.java b/src/informatis/ui/WindowManager.java index 9631ed1..df020f0 100644 --- a/src/informatis/ui/WindowManager.java +++ b/src/informatis/ui/WindowManager.java @@ -1,18 +1,18 @@ package informatis.ui; import arc.*; +import arc.scene.ui.layout.*; import arc.struct.*; -import arc.util.*; import mindustry.*; import mindustry.ui.*; -import informatis.ui.window.Window; +import informatis.ui.window.*; + +import java.util.Objects; public class WindowManager { public static Seq windows = new Seq<>(); public static void init(){ - Log.info(windows.size); - Vars.ui.hudGroup.fill(t -> { t.name = "Windows"; for(Window window : windows){ diff --git a/src/informatis/ui/window/CoreWindow.java b/src/informatis/ui/window/CoreWindow.java index dd9522a..543a795 100644 --- a/src/informatis/ui/window/CoreWindow.java +++ b/src/informatis/ui/window/CoreWindow.java @@ -1,28 +1,25 @@ package informatis.ui.window; -import arc.Events; -import mindustry.game.EventType; +import arc.*; +import mindustry.game.*; import informatis.ui.*; -import arc.Core; -import arc.graphics.Color; -import arc.math.Mathf; -import arc.math.geom.Vec2; -import arc.scene.event.HandCursorListener; +import arc.graphics.*; +import arc.math.*; +import arc.math.geom.*; +import arc.scene.event.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; -import arc.struct.Seq; import arc.util.*; -import mindustry.Vars; -import mindustry.content.UnitTypes; -import mindustry.core.UI; -import mindustry.game.Team; +import mindustry.*; +import mindustry.content.*; +import mindustry.core.*; import mindustry.gen.*; -import mindustry.graphics.Pal; -import mindustry.input.DesktopInput; +import mindustry.graphics.*; +import mindustry.input.*; import mindustry.type.*; -import mindustry.ui.Styles; -import mindustry.world.blocks.storage.CoreBlock; +import mindustry.ui.*; +import mindustry.world.blocks.storage.*; import static mindustry.Vars.*; diff --git a/src/informatis/ui/window/MapEditorWindow.java b/src/informatis/ui/window/MapEditorWindow.java index 7d7d2bd..ea40870 100644 --- a/src/informatis/ui/window/MapEditorWindow.java +++ b/src/informatis/ui/window/MapEditorWindow.java @@ -2,41 +2,35 @@ package informatis.ui.window; import arc.Events; import arc.graphics.g2d.*; -import arc.math.geom.Geometry; -import arc.scene.Element; -import arc.scene.style.Drawable; -import arc.struct.ObjectMap; -import mindustry.editor.MapEditor; -import mindustry.game.EventType; -import mindustry.graphics.Layer; +import arc.math.geom.*; +import arc.scene.*; +import arc.scene.style.*; +import arc.struct.*; import informatis.core.EditorTool; +import mindustry.editor.*; +import mindustry.game.*; +import mindustry.graphics.*; import informatis.ui.*; -import arc.Core; +import arc.*; import arc.func.*; -import arc.graphics.Color; -import arc.input.KeyCode; -import arc.math.Mathf; -import arc.math.geom.Vec2; -import arc.scene.event.Touchable; -import arc.scene.style.TextureRegionDrawable; +import arc.graphics.*; +import arc.input.*; +import arc.math.*; +import arc.scene.event.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; -import arc.scene.utils.Elem; -import arc.struct.Seq; +import arc.scene.utils.*; import arc.util.*; -import mindustry.Vars; -import mindustry.content.Blocks; -import mindustry.game.Team; +import mindustry.*; +import mindustry.content.*; import mindustry.gen.*; -import mindustry.graphics.Pal; -import mindustry.ui.Styles; +import mindustry.ui.*; import mindustry.world.*; import static mindustry.Vars.*; public class MapEditorWindow extends Window implements Updatable { Vec2 scrollPos = new Vec2(0, 0); - Table window; TextField search; EditorTool tool; final Vec2[][] brushPolygons = new Vec2[MapEditor.brushSizes.length][0]; @@ -152,6 +146,7 @@ public class MapEditorWindow extends Window implements Updatable { @Override public void update() { + //TODO make it more responsive, time -> width delta detect heat += Time.delta; if(heat >= 60f) { heat = 0f; diff --git a/src/informatis/ui/window/PlayerWindow.java b/src/informatis/ui/window/PlayerWindow.java index a8ed2e2..9189325 100644 --- a/src/informatis/ui/window/PlayerWindow.java +++ b/src/informatis/ui/window/PlayerWindow.java @@ -1,25 +1,22 @@ package informatis.ui.window; -import informatis.ui.OverScrollPane; -import informatis.ui.Updatable; -import arc.Core; -import arc.graphics.Color; -import arc.graphics.g2d.Draw; -import arc.graphics.g2d.Lines; -import arc.math.geom.Vec2; +import informatis.ui.*; +import arc.*; +import arc.graphics.*; +import arc.graphics.g2d.*; +import arc.math.geom.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; -import arc.scene.utils.Elem; +import arc.scene.utils.*; import arc.struct.*; import arc.util.*; import mindustry.gen.*; -import mindustry.graphics.Pal; -import mindustry.input.DesktopInput; +import mindustry.graphics.*; +import mindustry.input.*; import mindustry.ui.*; import static mindustry.Vars.*; - public class PlayerWindow extends Window implements Updatable { Vec2 scrollPos = new Vec2(0, 0); TextField search; diff --git a/src/informatis/ui/window/ToolWindow.java b/src/informatis/ui/window/ToolWindow.java index 42af860..e8106be 100644 --- a/src/informatis/ui/window/ToolWindow.java +++ b/src/informatis/ui/window/ToolWindow.java @@ -1,17 +1,14 @@ package informatis.ui.window; -import informatis.ui.OverScrollPane; -import informatis.ui.Updatable; -import informatis.ui.draws.OverDraw; -import informatis.ui.draws.OverDraws; -import arc.math.geom.Vec2; -import arc.scene.ui.ScrollPane; -import arc.scene.ui.layout.Table; -import arc.util.Time; -import mindustry.gen.Icon; -import mindustry.gen.Tex; -import mindustry.graphics.Pal; -import mindustry.ui.Styles; +import informatis.ui.*; +import informatis.ui.draws.*; +import arc.math.geom.*; +import arc.scene.ui.*; +import arc.scene.ui.layout.*; +import arc.util.*; +import mindustry.gen.*; +import mindustry.graphics.*; +import mindustry.ui.*; public class ToolWindow extends Window implements Updatable { Vec2 scrollPos = new Vec2(0, 0); diff --git a/src/informatis/ui/window/UnitWindow.java b/src/informatis/ui/window/UnitWindow.java index 1a6706d..ce0a357 100644 --- a/src/informatis/ui/window/UnitWindow.java +++ b/src/informatis/ui/window/UnitWindow.java @@ -1,61 +1,54 @@ package informatis.ui.window; -import arc.Core; -import arc.scene.Element; -import arc.scene.event.InputEvent; -import arc.scene.event.InputListener; -import arc.scene.utils.Disableable; +import arc.*; +import arc.func.*; +import arc.scene.*; +import arc.scene.event.*; import informatis.core.*; import informatis.ui.*; import arc.graphics.Color; import arc.graphics.g2d.*; -import arc.math.geom.*; import arc.scene.style.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.Bits; import arc.struct.*; import arc.util.*; -import informatis.ui.widgets.RectWidget; -import mindustry.Vars; -import mindustry.core.UI; -import mindustry.entities.units.WeaponMount; +import informatis.ui.widgets.*; +import mindustry.*; +import mindustry.core.*; +import mindustry.entities.units.*; import mindustry.gen.*; -import mindustry.graphics.Pal; -import mindustry.type.StatusEffect; -import mindustry.type.Weapon; -import mindustry.ui.Styles; -import mindustry.world.blocks.ConstructBlock; -import mindustry.world.blocks.payloads.Payload; - -import java.util.Objects; +import mindustry.graphics.*; +import mindustry.type.*; +import mindustry.ui.*; +import mindustry.world.blocks.*; +import mindustry.world.blocks.payloads.*; import static informatis.SVars.*; import static informatis.SUtils.*; import static mindustry.Vars.*; - - -class UnitWindow extends Window { - final Seq lastColors = Seq.with(Color.clear,Color.clear,Color.clear,Color.clear,Color.clear,Color.clear); - Teamc latestTarget = getTarget(); - int barSize = 6; +public class UnitWindow extends Window { + final Seq lastColors = new Seq<>(); + Teamc latestTarget; ScrollPane barPane; - Table window; + private int barSize = 6; + private float usedPayload; private float barScrollPos; + private final Bits statuses = new Bits(); public UnitWindow() { super(Icon.units, "unit"); - window = this; } //TODO: add new UnitInfoDisplay(), new WeaponDisplay(); @Override protected void build(Table table) { table.top().background(Styles.black8); - table.table(tt -> { - tt.center(); + table.table(title -> { + title.center(); Image image = RectWidget.build(); image.update(()->{ TextureRegion region = clear; @@ -70,8 +63,8 @@ class UnitWindow extends Window { if(target == getTarget()) locked = !locked; target = getTarget(); }); - tt.add(image).size(iconMed).padRight(12f); - tt.label(() -> { + title.add(image).size(iconMed).padRight(12f); + title.label(() -> { if (target instanceof Unit u && u.type != null) return u.type.localizedName; if (target instanceof Building b && b.block != null) { if (target instanceof ConstructBlock.ConstructBuild cb) return cb.current.localizedName; @@ -81,22 +74,106 @@ class UnitWindow extends Window { }).color(Pal.accent); }).tooltip(tool -> { tool.background(Styles.black6); - tool.table().update(to -> { - to.clear(); - if(target instanceof Unit u) { - to.add(u.isPlayer() ? u.getPlayer().name : "AI").row(); - to.add(target.tileX() + ", " + target.tileY()).row(); - to.add("[accent]"+ Strings.fixed(u.armor, 0) + "[] Armor"); - } + tool.table(to -> { + to.label(() -> target instanceof Unit u ? u.isPlayer() ? u.getPlayer().name : "AI" : "").row(); + to.label(() -> target.tileX() + ", " + target.tileY()).row(); + to.label(() -> target instanceof Unit u ? "[accent]"+ Strings.fixed(u.armor, 0) + "[] Armor" : ""); }).margin(12f); }).margin(12f).row(); - table.image().height(4f).color((target==null?player.unit():target).team().color).growX().row(); + + if(target instanceof Payloadc || target instanceof Statusc) { + table.image().color((target == null ? player.unit() : target).team().color).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(); + } + } + }; + + 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; + 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(); + t.clear(); + rebuildStatus.get(t); + } + }).grow(); + }).pad(12f).growX().row(); + } + + table.image().color((target==null?player.unit():target).team().color).height(4f).growX().row(); + barPane = new ScrollPane(buildBarList(), Styles.noBarPane); barPane.update(() -> { + //rebuild whole bar table if(latestTarget != target) { - latestTarget = target; - barPane.setWidget(buildBarList()); - Log.info("updated"); + for (int i = 0; i < barSize; i++) { + Color color = i >= BarInfo.data.size ? Color.clear : BarInfo.data.get(i).color; + if (i >= lastColors.size) lastColors.add(color); + else lastColors.set(i, color); + } + + if(((Table) barPane.getWidget()).getChildren().size-1 != barSize) { + latestTarget = target; + barPane.setWidget(buildBarList()); + } } if(barPane.hasScroll()){ Element result = Core.scene.hit(Core.input.mouseX(), Core.input.mouseY(), true); @@ -108,7 +185,7 @@ class UnitWindow extends Window { }); barPane.setScrollingDisabledX(true); barPane.setScrollYForce(barScrollPos); - table.add(barPane).growX().padTop(12f); + table.add(barPane).grow().padTop(12f); } Table buildBarList() { @@ -127,23 +204,18 @@ class UnitWindow extends Window { Table addBar(int index) { return new Table(bar -> { - if(index >= BarInfo.data.size) { - bar.add(new SBar("[lightgray][]", Color.clear, 0)).height(4 * 8f).growX(); - return; - } - - bar.update(()->{ - BarInfo.BarData data = BarInfo.data.get(index); - if (index >= lastColors.size) lastColors.add(data.color); - else lastColors.set(index, data.color); - }); - - bar.add(new SBar(() -> BarInfo.data.get(index).name, () -> BarInfo.data.get(index).color, () -> BarInfo.data.get(index).number)).height(4 * 8f).growX(); + bar.add(new SBar( + () -> index >= BarInfo.data.size ? "[lightgray][]" : BarInfo.data.get(index).name, + () -> index >= BarInfo.data.size ? Color.clear : BarInfo.data.get(index).color, + () -> lastColors.get(index), + () -> index >= BarInfo.data.size ? 0 : BarInfo.data.get(index).number) + ).height(4 * 8f).growX(); + if(index >= BarInfo.data.size) return; Image icon = new Image(){ @Override public void draw() { validate(); - + if(index >= BarInfo.data.size) return; float x = this.x + imageX; float y = this.y + imageY; float width = imageWidth * this.scaleX; @@ -233,55 +305,4 @@ class UnitWindow extends Window { }); } } - static class UnitInfoDisplay extends Table { - UnitInfoDisplay() { - top(); - float[] count = new float[]{-1}; - table().update(t -> { - if(getTarget() instanceof Payloadc payload){ - if(count[0] != payload.payloadUsed()){ - t.clear(); - t.top().left(); - - float pad = 0; - float items = payload.payloads().size; - if(8 * 2 * items + pad * items > 275f){ - pad = (275f - (8 * 2) * items) / items; - } - int i = 0; - for(Payload p : payload.payloads()){ - t.image(p.icon()).size(8 * 2).padRight(pad); - if(++i % 12 == 0) t.row(); - } - - count[0] = payload.payloadUsed(); - } - }else{ - count[0] = -1; - t.clear(); - } - }).growX().visible(() -> getTarget() instanceof Payloadc p && p.payloadUsed() > 0).colspan(2).row(); - - Bits statuses = new Bits(); - table().update(t -> { - t.left(); - if(getTarget() instanceof Statusc st){ - Bits applied = st.statusBits(); - if(!statuses.equals(applied)){ - t.clear(); - - if(applied != null){ - for(StatusEffect effect : Vars.content.statusEffects()){ - 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))); - } - } - statuses.set(applied); - } - } - } - }).left(); - } - } } diff --git a/src/informatis/ui/window/WaveWindow.java b/src/informatis/ui/window/WaveWindow.java index 5ced85f..e4bfada 100644 --- a/src/informatis/ui/window/WaveWindow.java +++ b/src/informatis/ui/window/WaveWindow.java @@ -1,33 +1,29 @@ package informatis.ui.window; -import mindustry.Vars; -import mindustry.type.UnitType; -import informatis.ui.OverScrollPane; -import arc.Events; -import arc.graphics.Color; -import arc.math.Mathf; -import arc.math.geom.Vec2; -import arc.scene.event.Touchable; +import mindustry.*; +import mindustry.type.*; +import informatis.ui.*; +import arc.*; +import arc.graphics.*; +import arc.math.*; +import arc.math.geom.*; +import arc.scene.event.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; -import mindustry.content.StatusEffects; -import mindustry.game.EventType; -import mindustry.game.SpawnGroup; +import mindustry.content.*; +import mindustry.game.*; import mindustry.gen.*; -import mindustry.graphics.Pal; +import mindustry.graphics.*; import mindustry.ui.*; -import informatis.ui.Updatable; import static arc.Core.*; import static arc.Core.settings; import static mindustry.Vars.*; - public class WaveWindow extends Window implements Updatable { static Vec2 scrollPos = new Vec2(0, 0); - Table window; float heat; public WaveWindow() { diff --git a/src/informatis/ui/window/Window.java b/src/informatis/ui/window/Window.java index 179ecbc..b2d3d95 100644 --- a/src/informatis/ui/window/Window.java +++ b/src/informatis/ui/window/Window.java @@ -10,13 +10,14 @@ import arc.scene.ui.layout.*; import arc.util.*; import mindustry.gen.*; import mindustry.ui.*; -import informatis.ui.WindowManager; +import informatis.ui.*; -public class Window extends Table{ +public class Window extends Table { public TextureRegionDrawable icon; public int id; public Cons
content; public boolean shown = false; + public Table window; public float minWindowWidth = 160, minWindowHeight = 60; public float maxWindowWidth = Float.MAX_VALUE, maxWindowHeight = Float.MAX_VALUE; @@ -29,13 +30,14 @@ public class Window extends Table{ this.content = content; this.name = name; this.icon = icon; + window = this; titleBar(); pane(t -> { t.setBackground(Styles.black5); t.top().left(); build(t); - }).grow().top().left().get().setScrollingDisabled(true, true); + }).grow().get().setScrollingDisabled(true, true); bottomBar(); setPosition(Core.graphics.getWidth() / 2f - getWidth() / 2f, Core.graphics.getHeight() / 2f - getHeight() / 2f); @@ -88,7 +90,7 @@ public class Window extends Table{ lastY = v.y; } }); - }).height(6f*8).top().grow().row(); + }).height(48f).growX().row(); } protected void bottomBar(){ @@ -131,4 +133,4 @@ public class Window extends Table{ public void toggle(){ shown = !shown; } -} +} \ No newline at end of file