code cleanup with refactoring

This commit is contained in:
sharlottes
2022-04-24 15:19:23 +09:00
parent 98e2af269f
commit 973f5e78d1
23 changed files with 97 additions and 231 deletions

View File

@@ -4,27 +4,19 @@ import arc.graphics.g2d.*;
import arc.math.Mathf;
import arc.scene.style.*;
import arc.struct.Seq;
import arc.util.Nullable;
import arc.util.Strings;
import arc.util.*;
import mindustry.Vars;
import mindustry.core.UI;
import mindustry.entities.bullet.BulletType;
import mindustry.entities.bullet.LightningBulletType;
import mindustry.gen.BlockUnitUnit;
import mindustry.gen.Groups;
import mindustry.gen.Teamc;
import mindustry.gen.Unit;
import mindustry.entities.bullet.*;
import mindustry.gen.*;
import mindustry.type.UnitType;
import mindustry.type.weapons.PointDefenseWeapon;
import mindustry.type.weapons.RepairBeamWeapon;
import mindustry.type.weapons.*;
import mindustry.world.Tile;
import java.lang.reflect.*;
import static unitinfo.SVars.locked;
import static unitinfo.SVars.target;
import static arc.Core.input;
import static arc.Core.settings;
import static unitinfo.SVars.*;
import static arc.Core.*;
import static mindustry.Vars.player;
public class SUtils {
@@ -84,7 +76,7 @@ public class SUtils {
return b.speed * a * Mathf.pow(1 - b.drag, b.lifetime / 2) * b.lifetime +
Math.max(b.lightning > 0 || b instanceof LightningBulletType ? (b.lightningLength + b.lightningLengthRand) * 6 : 0,
b.fragBullet != null ? bulletRange(b.fragBullet) * b.fragLifeMax * b.fragVelocityMax : b.splashDamageRadius);
};
}
public static float unitRange(UnitType u) {
final float[] mrng = {0};
@@ -100,4 +92,14 @@ public class SUtils {
field.setAccessible(true);
return field.get(ut);
}
public static boolean isOutCamera(float x, float y) {
return !isInCamera(x, y, 0);
}
public static boolean isInCamera(float x, float y, float size) {
Tmp.r2.setCentered(x, y, size);
return Tmp.r1.overlaps(Tmp.r2);
}
}

View File

@@ -1,8 +1,6 @@
package unitinfo;
import unitinfo.core.*;
import unitinfo.shaders.LineShader;
import unitinfo.shaders.RangeShader;
import unitinfo.shaders.*;
import arc.graphics.g2d.TextureRegion;
import mindustry.gen.Teamc;
@@ -11,10 +9,8 @@ import static arc.Core.atlas;
public class SVars {
public static TextureRegion clear = atlas.find("clear");
public static TextureRegion error = atlas.find("error");
public static RangeShader turretRange;
public static LineShader lineShader;
public static RangeShader turretRange = new RangeShader();
public static Teamc target;
public static boolean locked;
public static boolean jsonGen = false;
public static float uiResumeRate = 3 * 60f; //default 3s
}

View File

@@ -1,109 +0,0 @@
package unitinfo.core;
import arc.Core;
import arc.struct.Seq;
import arc.util.*;
import mindustry.*;
import mindustry.ctype.*;
import mindustry.entities.abilities.*;
import mindustry.entities.bullet.*;
import mindustry.type.*;
import mindustry.world.*;
import org.hjson.*;
import java.lang.reflect.*;
import static mindustry.Vars.modDirectory;
public class ContentJSON {
static JsonValue parse(Object object) {
if(object instanceof Integer val) return JsonObject.valueOf(val);
else if(object instanceof Double val) return JsonObject.valueOf(val);
else if(object instanceof Float val) return JsonObject.valueOf(val);
else if(object instanceof Long val) return JsonObject.valueOf(val);
else if(object instanceof String val) return JsonObject.valueOf(val);
else if(object instanceof Boolean val) return JsonObject.valueOf(val);
else if(object instanceof Content) {
if(object instanceof Block c) return getContent(c, Block.class, new JsonObject());
if(object instanceof BulletType c) return getContent(c, BulletType.class, new JsonObject());
if(object instanceof Item c) return getContent(c, Item.class, new JsonObject());
if(object instanceof Liquid c) return getContent(c, Liquid.class, new JsonObject());
if(object instanceof UnitType c) return getContent(c, UnitType.class, new JsonObject());
if(object instanceof Weather c) return getContent(c, Weather.class, new JsonObject());
}
else if(object instanceof Weapon val) return getContent(val, new JsonObject());
else if(object instanceof Ability val) return getContent(val, new JsonObject());
else if(object instanceof Seq seq && seq.any()) {
JsonArray array = new JsonArray();
for(int i = 0; i < seq.size; i++) {
if(seq.get(i) != null) array.add(parse(seq.get(i)));
}
return array;
}
else {
if(object.getClass().isArray()) {
JsonArray array = new JsonArray();
for(int i = 0; i < Array.getLength(object); i++) {
if(Array.get(object, i) != null) array.add(parse(Array.get(object, i)));
}
return array;
}
}
return JsonObject.valueOf(object.toString());
}
static <T extends Object> JsonObject getContent(T cont, JsonObject obj) {
return getContent(cont, cont.getClass(), obj);
}
static JsonObject getContent(Object cont, Class objClass, JsonObject obj) {
obj.add("type", objClass.getName());
for(Field field : objClass.getFields()){
if(Modifier.isStatic(field.getModifiers())) continue;
try {
String name = field.getName();
Object object = field.get(cont);
Object preval = obj.get(name);
if(preval != null) obj.set(name, preval + " or " + object);
else {
if(object == null) obj.add(name, "null");
else if(!cont.getClass().isAssignableFrom(field.get(cont).getClass()) && !field.get(cont).getClass().isAssignableFrom(cont.getClass())){
obj.add(name, parse(object));
}
}
} catch(Throwable e) {
try {
Log.info(e + " ### " + cont + " ### " + objClass + " ### " + cont.getClass() + " ### " + field.get(cont));
} catch (IllegalAccessException ex) {
ex.printStackTrace();
}
obj.add(field.getName(), "### ERROR ###");
}
}
return obj;
}
static void save() {
for(Seq<Content> content : Vars.content.getContentMap()) {
if(content.isEmpty()) continue;
JsonObject data = new JsonObject();
content.each(cont -> {
JsonObject obj = new JsonObject();
getContent(cont, obj);
String name = cont.toString();
if(cont instanceof MappableContent mapCont) name = mapCont.name;
data.add(name, obj);
});
try {
modDirectory.child("unitinfo").child(content.peek().getContentType().toString() + ".json").writeString(data.toString(Stringify.FORMATTED));
} catch (Throwable e){
Log.warn(e.getMessage());
}
}
Log.info("JSON file is completely updated!");
Core.app.exit();
}
}

View File

@@ -1,4 +1,4 @@
package unitinfo.ui;
package unitinfo.core;
import arc.func.Boolf;
import arc.func.Cons;
@@ -12,10 +12,9 @@ import mindustry.content.Blocks;
import mindustry.game.Team;
import mindustry.world.Block;
import mindustry.world.Tile;
import unitinfo.ui.windows.MapEditorDisplay;
import unitinfo.ui.windows.*;
import static unitinfo.ui.windows.MapEditorDisplay.drawTeam;
import static unitinfo.ui.windows.MapEditorDisplay.drawBlock;
import static unitinfo.ui.windows.MapEditorWindow.*;
import static unitinfo.ui.windows.Windows.editorTable;
import static mindustry.Vars.world;
@@ -114,7 +113,7 @@ public enum EditorTool{
Boolf<Tile> tester;
Cons<Tile> setter;
Block drawBlock = MapEditorDisplay.drawBlock;
Block drawBlock = MapEditorWindow.drawBlock;
if(drawBlock.isOverlay()){
Block dest = tile.overlay();

View File

@@ -1,29 +1,22 @@
package unitinfo.core;
import arc.input.KeyCode;
import arc.scene.ui.layout.Table;
import unitinfo.shaders.*;
import unitinfo.ui.*;
import unitinfo.ui.draws.OverDraws;
import unitinfo.ui.windows.*;
import arc.*;
import arc.struct.*;
import mindustry.*;
import mindustry.game.EventType.*;
import mindustry.mod.*;
import static unitinfo.SVars.*;
import static arc.Core.*;
import static mindustry.Vars.*;
import static unitinfo.SUtils.*;
import static unitinfo.ui.windows.WindowManager.windows;
import static unitinfo.ui.WindowManager.windows;
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[]";
@@ -31,49 +24,34 @@ public class Main extends Mod {
meta.description = bundle.get("shar-description");
});
Events.run(Trigger.class, () -> {
Events.run(Trigger.update, () -> {
try {
BarInfo.getInfo(getTarget());
} catch (IllegalAccessException | NoSuchFieldException err) {
err.printStackTrace();
}
});
Events.run(Trigger.update, () -> {
target = getTarget();
for (Window window : windows) {
if(window instanceof Updatable u) u.update();
}
if((input.keyDown(KeyCode.shiftRight) || input.keyDown(KeyCode.shiftLeft))) {
if(input.keyTap(KeyCode.r)) lockTarget();
if(input.keyTap(KeyCode.r)) {
if(target==getTarget()) locked = !locked;
target = getTarget();
};
}
});
Events.on(ClientLoadEvent.class, e -> {
Windows.load();
SettingS.init();
WindowManager.init();
DisplayManager.init();
OverDraws.init();
OverDrawer.setEvent();
Seq.with(scene.root,
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
).each(dialog-> dialog.addChild(new ElementDisplay(dialog)));
Table table = ((Table) scene.find("minimap/position")).row();
table.add(new SchemDisplay());
new WaveInfoDisplay().addWaveInfoTable();
if(jsonGen) ContentJSON.save();
OverDrawer.init();
});
}
public static void lockTarget() {
if(target==getTarget()) locked = !locked;
target = getTarget();
}
}

View File

@@ -18,7 +18,7 @@ import static mindustry.Vars.*;
public class OverDrawer {
public static void setEvent(){
public static void init(){
Events.run(EventType.Trigger.draw, () -> {
float sin = Mathf.absin(Time.time, 6f, 1f);
@@ -67,13 +67,4 @@ public class OverDrawer {
for(OverDraw drawer : OverDraws.all) drawer.draw();
});
}
public static boolean isOutCamera(float x, float y) {
return !isInCamera(x, y, 0);
}
public static boolean isInCamera(float x, float y, float size) {
Tmp.r2.setCentered(x, y, size);
return Tmp.r1.overlaps(Tmp.r2);
}
}

View File

@@ -1,24 +0,0 @@
package unitinfo.shaders;
import arc.Core;
import arc.graphics.gl.Shader;
import arc.scene.ui.layout.Scl;
import arc.util.Time;
import mindustry.Vars;
public class LineShader extends Shader {
public LineShader() {
super(Core.files.internal("shaders/screenspace.vert"), Vars.tree.get("shaders/line.frag"));
}
@Override
public void apply(){
setUniformf("u_dp", Scl.scl(1f));
setUniformf("u_time", Time.time / Scl.scl(1f));
setUniformf("u_offset",
Core.camera.position.x - Core.camera.width / 2,
Core.camera.position.y - Core.camera.height / 2);
setUniformf("u_texsize", Core.camera.width, Core.camera.height);
setUniformf("u_invsize", 1f/Core.camera.width, 1f/Core.camera.height);
}
}

View File

@@ -0,0 +1,28 @@
package unitinfo.ui;
import arc.scene.ui.layout.Table;
import arc.struct.Seq;
import unitinfo.ui.display.ElementDisplay;
import unitinfo.ui.display.SchemDisplay;
import unitinfo.ui.display.WaveInfoDisplay;
import static arc.Core.scene;
import static mindustry.Vars.ui;
public class DisplayManager {
public static void init() {
//layout debug
Seq.with(scene.root,
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
).each(dialog-> dialog.addChild(new ElementDisplay(dialog)));
//schem quick-slot
Table table = ((Table) scene.find("minimap/position")).row();
table.add(new SchemDisplay());
new WaveInfoDisplay().addWaveInfoTable();
}
}

View File

@@ -1,10 +1,11 @@
package unitinfo.ui.windows;
package unitinfo.ui;
import arc.*;
import arc.struct.*;
import arc.util.*;
import mindustry.*;
import mindustry.ui.*;
import unitinfo.ui.windows.Window;
public class WindowManager {
public static Seq<Window> windows = new Seq<>();

View File

@@ -1,4 +1,4 @@
package unitinfo.ui;
package unitinfo.ui.display;
import arc.graphics.g2d.Draw;
import arc.graphics.g2d.Lines;

View File

@@ -1,4 +1,4 @@
package unitinfo.ui;
package unitinfo.ui.display;
import unitinfo.SUtils;
import arc.Core;
@@ -20,6 +20,7 @@ import mindustry.gen.*;
import mindustry.graphics.Pal;
import mindustry.ui.Styles;
import mindustry.ui.dialogs.*;
import unitinfo.ui.Updatable;
import static arc.Core.*;
import static mindustry.Vars.*;

View File

@@ -1,4 +1,4 @@
package unitinfo.ui;
package unitinfo.ui.display;
import arc.scene.ui.layout.*;
import arc.util.*;

View File

@@ -3,7 +3,7 @@ package unitinfo.ui.draws;
import arc.scene.style.TextureRegionDrawable;
import mindustry.gen.Groups;
import static unitinfo.core.OverDrawer.isInCamera;
import static unitinfo.SUtils.*;
import static arc.Core.settings;
public class BlockDraw extends OverDraw {

View File

@@ -14,7 +14,7 @@ import mindustry.world.blocks.defense.turrets.TractorBeamTurret;
import mindustry.world.blocks.defense.turrets.Turret;
import static unitinfo.SVars.turretRange;
import static unitinfo.core.OverDrawer.isInCamera;
import static unitinfo.SUtils.*;
import static arc.Core.*;
import static mindustry.Vars.player;

View File

@@ -25,8 +25,7 @@ import mindustry.world.blocks.units.CommandCenter;
import java.util.Objects;
import static unitinfo.core.OverDrawer.isInCamera;
import static unitinfo.core.OverDrawer.isOutCamera;
import static unitinfo.SUtils.*;
import static arc.Core.settings;
import static mindustry.Vars.*;

View File

@@ -26,13 +26,13 @@ import mindustry.world.blocks.storage.CoreBlock;
import static mindustry.Vars.*;
public class CoreDisplay extends Window implements Updatable {
public class CoreWindow extends Window implements Updatable {
Vec2 scrollPos = new Vec2(0, 0);
Table window;
float heat;
ObjectMap<Team, ItemData> itemData = new ObjectMap<>();
public CoreDisplay() {
public CoreWindow() {
super(Icon.list, "core");
resetUsed();
}

View File

@@ -6,6 +6,7 @@ import arc.math.geom.Geometry;
import mindustry.editor.MapEditor;
import mindustry.game.EventType;
import mindustry.graphics.Layer;
import unitinfo.core.EditorTool;
import unitinfo.ui.*;
import arc.Core;
import arc.func.*;
@@ -30,7 +31,7 @@ import mindustry.world.*;
import static mindustry.Vars.*;
public class MapEditorDisplay extends Window implements Updatable {
public class MapEditorWindow extends Window implements Updatable {
Vec2 scrollPos = new Vec2(0, 0);
Table window;
TextField search;
@@ -45,7 +46,7 @@ public class MapEditorDisplay extends Window implements Updatable {
public static Team drawTeam = Team.sharded;
public static Block drawBlock = Blocks.router;
public MapEditorDisplay() {
public MapEditorWindow() {
super(Icon.map, "editor");
for(int i = 0; i < MapEditor.brushSizes.length; i++){

View File

@@ -20,14 +20,14 @@ import mindustry.ui.*;
import static mindustry.Vars.*;
public class PlayerDisplay extends Window implements Updatable {
public class PlayerWindow extends Window implements Updatable {
Vec2 scrollPos = new Vec2(0, 0);
TextField search;
ImageButton.ImageButtonStyle ustyle;
@Nullable Player target;
float heat;
public PlayerDisplay() {
public PlayerWindow() {
super(Icon.players, "player");
}

View File

@@ -13,12 +13,12 @@ import mindustry.gen.Tex;
import mindustry.graphics.Pal;
import mindustry.ui.Styles;
public class ToolDisplay extends Window implements Updatable {
public class ToolWindow extends Window implements Updatable {
Vec2 scrollPos = new Vec2(0, 0);
OverDraw selected;
float heat;
public ToolDisplay() {
public ToolWindow() {
super(Icon.edit, "tool");
}

View File

@@ -30,12 +30,12 @@ import static unitinfo.SVars.*;
import static unitinfo.SUtils.*;
import static mindustry.Vars.*;
class UnitDisplay extends Window {
class UnitWindow extends Window {
final Seq<Color> lastColors = Seq.with(Color.clear,Color.clear,Color.clear,Color.clear,Color.clear,Color.clear);
final Rect scissor = new Rect();
Vec2 scrollPos;
public UnitDisplay() {
public UnitWindow() {
super(Icon.units, "unit");
}
@@ -69,7 +69,10 @@ class UnitDisplay extends Window {
}
image.setDrawable(region);
});
image.clicked(Main::lockTarget);
image.clicked(()->{
if(target==getTarget()) locked = !locked;
target = getTarget();
});
tt.add(image).size(iconMed).padRight(12f);
tt.label(() -> {

View File

@@ -26,12 +26,12 @@ import static arc.Core.settings;
import static mindustry.Vars.*;
public class WaveDisplay extends Window implements Updatable {
public class WaveWindow extends Window implements Updatable {
static Vec2 scrollPos = new Vec2(0, 0);
Table window;
float heat;
public WaveDisplay() {
public WaveWindow() {
super(Icon.waves, "wave");
}
@@ -44,8 +44,8 @@ public class WaveDisplay extends Window implements Updatable {
table.add(pane).grow().name("wave-pane").row();
table.table(total -> {
total.left();
total.field("~"+state.wave+" + "+settings.getInt("wavemax"), f->{
total.label(()->"~"+state.wave+"+");
total.field(""+settings.getInt("wavemax"), f->{
String str = f.replaceAll("\\D", "");
if(str.isEmpty()) settings.put("wavemax", 0);
else settings.put("wavemax", Integer.parseInt(str));

View File

@@ -10,6 +10,7 @@ import arc.scene.ui.layout.*;
import arc.util.*;
import mindustry.gen.*;
import mindustry.ui.*;
import unitinfo.ui.WindowManager;
public class Window extends Table{
public TextureRegionDrawable icon;

View File

@@ -2,18 +2,17 @@ package unitinfo.ui.windows;
import arc.util.*;
import mindustry.gen.*;
import unitinfo.ui.windows.*;
public class Windows {
public static MapEditorDisplay editorTable;
public static MapEditorWindow editorTable;
public static void load(){
new UnitDisplay();
new WaveDisplay();
new CoreDisplay();
new PlayerDisplay();
new ToolDisplay();
editorTable = new MapEditorDisplay();
new UnitWindow();
new WaveWindow();
new CoreWindow();
new PlayerWindow();
new ToolWindow();
editorTable = new MapEditorWindow();
new Window(Icon.box, "test-window", t -> {
t.labelWrap(() -> t.parent.x + ", " + t.parent.y).top().right().growX();
t.row();