mirror of
https://github.com/yawaflua/Informatis.git
synced 2026-02-04 10:24:21 +02:00
improvement range draw
This commit is contained in:
@@ -4,14 +4,12 @@ import arc.graphics.Color;
|
|||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import arc.graphics.gl.FrameBuffer;
|
import arc.graphics.gl.FrameBuffer;
|
||||||
import arc.scene.style.TextureRegionDrawable;
|
import arc.scene.style.TextureRegionDrawable;
|
||||||
import arc.struct.ObjectMap;
|
import mindustry.Vars;
|
||||||
import arc.struct.Seq;
|
|
||||||
import mindustry.game.Team;
|
import mindustry.game.Team;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.Drawf;
|
import mindustry.graphics.Drawf;
|
||||||
import mindustry.world.blocks.defense.turrets.BaseTurret;
|
import mindustry.type.Weapon;
|
||||||
import mindustry.world.blocks.defense.turrets.TractorBeamTurret;
|
import mindustry.world.blocks.defense.turrets.*;
|
||||||
import mindustry.world.blocks.defense.turrets.Turret;
|
|
||||||
|
|
||||||
import static informatis.SVars.turretRange;
|
import static informatis.SVars.turretRange;
|
||||||
import static informatis.SUtils.*;
|
import static informatis.SUtils.*;
|
||||||
@@ -20,10 +18,10 @@ import static mindustry.Vars.player;
|
|||||||
|
|
||||||
public class RangeDraw extends OverDraw {
|
public class RangeDraw extends OverDraw {
|
||||||
FrameBuffer effectBuffer = new FrameBuffer();
|
FrameBuffer effectBuffer = new FrameBuffer();
|
||||||
ObjectMap<Team, Seq<BaseTurret.BaseTurretBuild>> turrets = new ObjectMap<>();
|
|
||||||
|
|
||||||
RangeDraw(String name, TextureRegionDrawable icon) {
|
RangeDraw(String name, TextureRegionDrawable icon) {
|
||||||
super(name, icon);
|
super(name, icon);
|
||||||
|
registerOption("blockRange");
|
||||||
registerOption("unitRange");
|
registerOption("unitRange");
|
||||||
registerOption("aliceRange");
|
registerOption("aliceRange");
|
||||||
registerOption("airRange");
|
registerOption("airRange");
|
||||||
@@ -34,44 +32,78 @@ public class RangeDraw extends OverDraw {
|
|||||||
public void draw() {
|
public void draw() {
|
||||||
if(!enabled) return;
|
if(!enabled) return;
|
||||||
|
|
||||||
effectBuffer.resize(graphics.getWidth(), graphics.getHeight());
|
Unit target = player.unit();
|
||||||
|
|
||||||
Unit unit = player.unit();
|
effectBuffer.resize(graphics.getWidth(), graphics.getHeight());
|
||||||
turrets.clear();
|
|
||||||
for(Team team : Team.baseTeams) {
|
for(Team team : Team.baseTeams) {
|
||||||
Draw.drawRange(166 + (Team.baseTeams.length-team.id) * 3, 1, () -> effectBuffer.begin(Color.clear), () -> {
|
Draw.drawRange(166 + (Team.baseTeams.length-team.id) * 3, 1, () -> effectBuffer.begin(Color.clear), () -> {
|
||||||
effectBuffer.end();
|
effectBuffer.end();
|
||||||
effectBuffer.blit(turretRange);
|
effectBuffer.blit(turretRange);
|
||||||
});
|
});
|
||||||
turrets.put(team, new Seq<>());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Groups.build.each(b-> settings.getBool("aliceRange") || player.team() != b.team, b -> {
|
boolean includeBlock = settings.getBool("blockRange"),
|
||||||
if(b instanceof BaseTurret.BaseTurretBuild turret) {
|
includeUnit = settings.getBool("unitRange"),
|
||||||
float range = turret.range();
|
includeAir = settings.getBool("airRange"),
|
||||||
if (!isInCamera(b.x, b.y, range)) return;
|
includeGround = settings.getBool("groundRange"),
|
||||||
|
includeAlice = settings.getBool("aliceRange"),
|
||||||
|
shader = settings.getBool("RangeShader");
|
||||||
|
|
||||||
|
Teamc selected = getTarget();
|
||||||
|
if(selected instanceof BaseTurret.BaseTurretBuild turretBuild) {
|
||||||
|
Drawf.dashCircle(turretBuild.x, turretBuild.y, turretBuild.range(), turretBuild.team.color);
|
||||||
|
} else if(selected instanceof Unit unit) {
|
||||||
|
Drawf.dashCircle(unit.x, unit.y, unit.range(), unit.team.color);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(includeBlock) {
|
||||||
|
for(Building building : Groups.build) {
|
||||||
|
if(!((includeAlice || player.team() != building.team)
|
||||||
|
&& building instanceof BaseTurret.BaseTurretBuild turret && isInCamera(building.x, building.y, turret.range()))) continue;
|
||||||
|
|
||||||
boolean air = settings.getBool("airRange") && enabled;
|
|
||||||
boolean ground = settings.getBool("groundRange") && enabled;
|
|
||||||
boolean valid = false;
|
boolean valid = false;
|
||||||
if (unit == null) valid = true;
|
if (target == null) valid = true;
|
||||||
else if (b instanceof Turret.TurretBuild build) {
|
else if (building instanceof Turret.TurretBuild turretBuild) {
|
||||||
Turret t = (Turret) build.block;
|
Turret block = (Turret) turretBuild.block;
|
||||||
if(t.targetAir&&!air||t.targetGround&&!ground) return;
|
if(block.targetAir && !includeAir || block.targetGround && !includeGround) continue;
|
||||||
if((unit.isFlying() ? t.targetAir : t.targetGround) && build.hasAmmo() && build.canConsume()) valid = true;
|
if((target.isFlying() ? block.targetAir : block.targetGround) && turretBuild.hasAmmo() && turretBuild.canConsume()) valid = true;
|
||||||
} else if (b instanceof TractorBeamTurret.TractorBeamBuild build) {
|
} else if (building instanceof TractorBeamTurret.TractorBeamBuild tractorBeamBuild) {
|
||||||
TractorBeamTurret t = (TractorBeamTurret) build.block;
|
TractorBeamTurret block = (TractorBeamTurret) tractorBeamBuild.block;
|
||||||
if(t.targetAir&&!air||t.targetGround&&!ground) return;
|
if(block.targetAir && !includeAir || block.targetGround && !includeGround) continue;
|
||||||
if((unit.isFlying() ? t.targetAir : t.targetGround) && build.canConsume()) valid = true;
|
if((target.isFlying() ? block.targetAir : block.targetGround) && tractorBeamBuild.canConsume()) valid = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int index = valid ? b.team.id : 0;
|
//non-base teams are considered as crux
|
||||||
|
int index = valid ? building.team.id > 5 ? 2 : building.team.id : 0;
|
||||||
|
float range = turret.range();
|
||||||
Draw.color(Team.baseTeams[index].color);
|
Draw.color(Team.baseTeams[index].color);
|
||||||
if (settings.getBool("RangeShader")) {
|
if (shader) {
|
||||||
Draw.z(166+(Team.baseTeams.length-index)*3);
|
Draw.z(166+(Team.baseTeams.length-index)*3);
|
||||||
Fill.poly(b.x, b.y, Lines.circleVertices(range), range);
|
Fill.poly(building.x, building.y, Lines.circleVertices(range), range);
|
||||||
} else Drawf.dashCircle(b.x, b.y, range, b.team.color);
|
} else Drawf.dashCircle(building.x, building.y, range, Team.baseTeams[index].color);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
if(includeUnit) {
|
||||||
|
for(Unit unit : Groups.unit) {
|
||||||
|
if(!((includeAlice || player.team() != unit.team) && isInCamera(unit.x, unit.y, unit.range()))) continue;
|
||||||
|
|
||||||
|
boolean valid = false;
|
||||||
|
if (target == null) valid = true;
|
||||||
|
else if (!(unit.type.targetAir && !includeAir || unit.type.targetGround && !includeGround)
|
||||||
|
&& (target.isFlying() ?unit.type.targetAir : unit.type.targetGround)
|
||||||
|
&& unit.canShoot()
|
||||||
|
) valid = true;
|
||||||
|
|
||||||
|
//non-base teams are considered as crux
|
||||||
|
int index = valid ? unit.team.id > 5 ? 2 : unit.team.id : 0;
|
||||||
|
float range = unit.range();
|
||||||
|
Draw.color(Team.baseTeams[index].color);
|
||||||
|
if (shader) {
|
||||||
|
Draw.z(166 + (Team.baseTeams.length - index) * 3);
|
||||||
|
Fill.poly(unit.x, unit.y, Lines.circleVertices(range), range);
|
||||||
|
} else Drawf.dashCircle(unit.x, unit.y, range, Team.baseTeams[index].color);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user