diff --git a/assets/bundles/bundle.properties b/assets/bundles/bundle.properties index c0cfce3..938632f 100644 --- a/assets/bundles/bundle.properties +++ b/assets/bundles/bundle.properties @@ -84,6 +84,10 @@ setting.distanceLine.name = Display Distance Line From Selected Target setting.distanceLine.description = Displays dotted lines and numbers to indicate how far away the target is. setting.spawnerarrow.name = Indicate Wave Spawn-Point setting.spawnerarrow.description = Displays arrow pointing to wave spawn-points. +setting.elementdebug.name = Element Debug +setting.elementdebug.description = Show all Element outline +setting.hiddenElem.name = Display hidden element +setting.hiddenElem.description = display hidden element outline too. setting.autoShooting.name = Enable Auto Shooting setting.autoShooting.description = no don't do hack diff --git a/assets/bundles/bundle_ko.properties b/assets/bundles/bundle_ko.properties index 5b94b20..141c07a 100644 --- a/assets/bundles/bundle_ko.properties +++ b/assets/bundles/bundle_ko.properties @@ -79,8 +79,12 @@ setting.deadTarget.name = 고정 목표물이 죽더라도 계속 고정하기 setting.deadTarget.description = 고정 목표물이 죽어도 그 좌표와 대상 정보를 계속 표시합니다. setting.distanceLine.name = 목표물과의 거리선 표시 setting.distanceLine.description = 목표물과 어느정도나 멀어졌는지 점선과 숫자로 표시합니다. -setting.spawnerarrow.name = 적 단계 생성지점을 가르키는 화살표를 표시합니다. -setting.spawnerarrow.description = +setting.spawnerarrow.name = 스폰포인트 화살표 +setting.spawnerarrow.description = 적 단계 생성지점을 가르키는 화살표를 표시합니다. +setting.elementdebug.name = UI 디버깅 +setting.elementdebug.description = 모든 UI 요소의 외곽선을 표시합니다. +setting.hiddenElem.name = 숨겨진 요소 표시 +setting.hiddenElem.description = 숨겨진 요소의 외곽선도 표시합니다. setting.autoShooting.name = 자동 사격 활성화 setting.autoShooting.description = diff --git a/src/UnitInfo/core/Main.java b/src/UnitInfo/core/Main.java index 1a5b189..797b902 100644 --- a/src/UnitInfo/core/Main.java +++ b/src/UnitInfo/core/Main.java @@ -1,32 +1,53 @@ package UnitInfo.core; import UnitInfo.shaders.*; +import UnitInfo.ui.ElementDisplay; import UnitInfo.ui.HUDFragment; import UnitInfo.ui.MindowsTex; import UnitInfo.ui.windows.CoreDisplay; import UnitInfo.ui.windows.WindowTable; import UnitInfo.ui.windows.WindowTables; import arc.*; +import arc.graphics.g2d.Draw; +import arc.graphics.g2d.Lines; +import arc.scene.Element; +import arc.scene.Group; +import arc.scene.event.Touchable; +import arc.scene.ui.layout.WidgetGroup; +import arc.struct.Seq; +import arc.struct.SnapshotSeq; +import arc.util.Tmp; import mindustry.*; +import mindustry.editor.MapEditorDialog; import mindustry.game.EventType.*; +import mindustry.graphics.Layer; +import mindustry.logic.LogicDialog; import mindustry.mod.*; +import mindustry.ui.dialogs.*; +import mindustry.ui.fragments.*; import static UnitInfo.SVars.*; import static UnitInfo.ui.windows.UnitDisplay.getTarget; import static arc.Core.*; +import static mindustry.Vars.ui; public class Main extends Mod { - @Override public void init(){ turretRange = new RangeShader(); lineShader = new LineShader(); - Core.app.post(() -> { Mods.ModMeta meta = Vars.mods.locateMod("unitinfo").meta; meta.displayName = "[#B5FFD9]Unit Information[]"; meta.author = "[#B5FFD9]Sharlotte[lightgray]#0018[][]"; meta.description = bundle.get("shar-description"); + scene.add(new ElementDisplay()); + Seq.with( + ui.picker, ui.editor, ui.controls, ui.restart, ui.join, ui.discord, + ui.load, ui.custom, ui.language, ui.database, ui.settings, ui.host, + ui.paused, ui.about, ui.bans, ui.admins, ui.traces, ui.maps, ui.content, + ui.planet, ui.research, ui.mods, ui.schematics, ui.logic + ).forEach(dialog-> dialog.add(new ElementDisplay(dialog))); }); Events.run(Trigger.class, () -> { diff --git a/src/UnitInfo/core/OverDrawer.java b/src/UnitInfo/core/OverDrawer.java index 295db5f..1d35e19 100644 --- a/src/UnitInfo/core/OverDrawer.java +++ b/src/UnitInfo/core/OverDrawer.java @@ -8,6 +8,8 @@ import arc.graphics.g2d.*; import arc.graphics.gl.*; import arc.math.*; import arc.math.geom.*; +import arc.scene.Element; +import arc.scene.Group; import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; @@ -54,7 +56,6 @@ public class OverDrawer { public static void setEvent(){ Events.run(EventType.Trigger.draw, () -> { - effectBuffer.resize(graphics.getWidth(), graphics.getHeight()); Draw.drawRange(158, 1f, () -> effectBuffer.begin(Color.clear), () -> { effectBuffer.end(); diff --git a/src/UnitInfo/core/SettingS.java b/src/UnitInfo/core/SettingS.java index 689ceaf..b98ebd0 100644 --- a/src/UnitInfo/core/SettingS.java +++ b/src/UnitInfo/core/SettingS.java @@ -143,6 +143,8 @@ public class SettingS { addGraphicCheckSetting("deadTarget", false, drawSeq); addGraphicCheckSetting("distanceLine", false, drawSeq); addGraphicCheckSetting("spawnerarrow", false, drawSeq); + addGraphicCheckSetting("elementdebug", false, drawSeq); + addGraphicCheckSetting("hiddenElem", false, drawSeq); Seq etcSeq = new Seq<>(); addGraphicCheckSetting("autoShooting", false, etcSeq); diff --git a/src/UnitInfo/ui/ElementDisplay.java b/src/UnitInfo/ui/ElementDisplay.java new file mode 100644 index 0000000..8361e9b --- /dev/null +++ b/src/UnitInfo/ui/ElementDisplay.java @@ -0,0 +1,61 @@ +package UnitInfo.ui; + +import arc.graphics.g2d.Draw; +import arc.graphics.g2d.Lines; +import arc.scene.Element; +import arc.scene.Group; +import arc.scene.event.Touchable; +import arc.struct.SnapshotSeq; +import arc.util.Tmp; +import mindustry.graphics.Layer; +import mindustry.graphics.Pal; + +import static arc.Core.scene; +import static arc.Core.settings; + +public class ElementDisplay extends Element { + Group root; + + public ElementDisplay() { + this(scene.root); + } + public ElementDisplay(Group root) { + this.root = root; + fillParent = true; + touchable = Touchable.disabled; + } + + @Override + public void draw() { + super.draw(); + if(!settings.getBool("elementdebug")) return; + Draw.z(Layer.max); + Lines.stroke(1); + addRect(root.getChildren()); + } + + void addRect(SnapshotSeq elements) { + elements.forEach(elem-> { + elem.updateVisibility(); + if(elem.visible || settings.getBool("hiddenElem")) { + elem.localToStageCoordinates(Tmp.v1.set(0, 0)); + if(elem.hasMouse()) { + Draw.color(Pal.accent); + Lines.stroke(3); + } + if(elem.hasScroll()) { + Draw.color(Pal.lancerLaser); + Lines.stroke(3); + } + if(elem.hasKeyboard()) { + Draw.color(Pal.sap); + Lines.stroke(5); + } + Lines.rect(Tmp.v1.x, Tmp.v1.y, elem.getWidth(), elem.getHeight()); + Draw.color(); + Lines.stroke(1); + if(elem instanceof Group group) addRect(group.getChildren()); + } + }); + } +}