overdraw refactoring

This commit is contained in:
sharlottes
2022-11-21 07:36:33 +09:00
parent 40cae93092
commit 4fd6d59753
32 changed files with 818 additions and 577 deletions

View File

@@ -1,17 +1,87 @@
package informatis.draws;
import mindustry.gen.Icon;
import arc.Core;
import arc.Events;
import arc.func.Cons;
import arc.graphics.Color;
import arc.graphics.g2d.Draw;
import arc.graphics.gl.FrameBuffer;
import arc.struct.*;
import arc.util.Tmp;
import mindustry.Vars;
import mindustry.game.EventType;
import mindustry.game.Team;
import mindustry.gen.Groups;
import mindustry.world.Tile;
import static arc.Core.graphics;
import static informatis.SVars.turretRange;
public class OverDraws {
public static OverDraw range, link, unit, block, util;
public static OverDraw[] all = {};
public static OverDraw
blockBar = new BlockBarDraw(),
blockStatus = new BlockStatusDraw(),
powerNode = new PowerNodeDraw(),
unitCargoLink = new UnitCargoLinkDraw(),
massLink = new MassLinkDraw(),
blockRange = new BlockRangeDraw(),
unitRange = new UnitRangeDraw(),
playerRange = new PlayerRangeDraw(),
pathLine = new PathLineDraw(),
logicLine = new LogicLineDraw(),
commandLine = new CommandLineDraw(),
unitPathLine = new UnitPathLineDraw(),
unitItem = new UnitItemDraw(),
unitBar = new UnitBarDraw(),
magicCursor = new MagicCursorDraw(),
autoShoot = new AutoShootDraw();
static ObjectMap<OverDrawCategory, Seq<OverDraw>> draws;
static FrameBuffer effectBuffer = new FrameBuffer();
public static void init() {
range = new RangeDraw("Range Draws", Icon.commandRally);
link = new LinkDraw("Link Draws", Icon.line);
unit = new UnitDraw("Unit Draws", Icon.units);
block = new BlockDraw("Block Draws", Icon.crafting);
util = new UtilDraw("Utils", Icon.github);
all = new OverDraw[]{range, link, unit, block, util};
Events.run(EventType.Trigger.draw, () -> {
Core.camera.bounds(Tmp.r1);
effectBuffer.resize(graphics.getWidth(), graphics.getHeight());
for(Team team : Team.baseTeams) {
Draw.drawRange(166 + (Team.baseTeams.length-team.id) * 3, 1, () -> effectBuffer.begin(Color.clear), () -> {
effectBuffer.end();
effectBuffer.blit(turretRange);
});
}
Groups.build.each(building ->
eachDraws(draw -> draw.onBuilding(building))
);
Groups.unit.each(unit ->
eachDraws(draw -> draw.onUnit(unit))
);
for(Tile tile : Vars.world.tiles) {
eachDraws(draw -> draw.onTile(tile));
}
eachDraws(OverDraw::draw);
});
Events.run(EventType.Trigger.update, () -> {
eachDraws(OverDraw::update);
});
}
public static ObjectMap<OverDrawCategory, Seq<OverDraw>> getDraws() {
if(draws == null) {
draws = new ObjectMap<>();
for(OverDrawCategory category : OverDrawCategory.values()) {
draws.put(category, new Seq<>());
}
}
return draws;
}
static void eachDraws(Cons<OverDraw> runner) {
OverDraws.draws.entries().forEach(draws -> {
if(draws.key.enabled) draws.value.each(draw -> {
if(Core.settings.getBool(draw.name, false)) runner.get(draw);
Draw.reset();
});
});
}
}