Files
Informatis/src/informatis/draws/BlockRangeDraw.java
2022-11-21 07:36:33 +09:00

58 lines
2.6 KiB
Java

package informatis.draws;
import arc.graphics.g2d.*;
import mindustry.game.*;
import mindustry.gen.*;
import mindustry.graphics.*;
import mindustry.world.blocks.defense.turrets.*;
import static arc.Core.settings;
import static informatis.SUtils.isInCamera;
import static mindustry.Vars.player;
public class BlockRangeDraw extends OverDraw {
public BlockRangeDraw() {
super("blockRange", OverDrawCategory.Range);
}
@Override
public void onBuilding(Building build) {
Unit playerUnit = player.unit();
boolean includeInvalid = settings.getBool("invalidRange", true),
includeAir = settings.getBool("airRange", true), isAir = playerUnit == null || playerUnit.isFlying(),
includeGround = settings.getBool("groundRange", true), isGround = playerUnit == null || !playerUnit.isFlying(),
includeAlice = settings.getBool("aliceRange", true),
shader = settings.getBool("RangeShader", true);
if(!((includeAlice || player.team() != build.team)
&& build instanceof BaseTurret.BaseTurretBuild turret && isInCamera(build.x, build.y, turret.range() * 2))) return;
boolean valid = false;
if (build instanceof Turret.TurretBuild turretBuild) {
Turret block = (Turret) turretBuild.block;
if ((build.team == player.team()
|| (block.targetAir && isAir && includeAir)
|| (block.targetGround && isGround && includeGround))
&& turretBuild.hasAmmo() && turretBuild.canConsume()) valid = true;
} else if (build instanceof TractorBeamTurret.TractorBeamBuild tractorBeamBuild) {
TractorBeamTurret block = (TractorBeamTurret) tractorBeamBuild.block;
if ((build.team == player.team()
|| (block.targetAir && isAir && includeAir)
|| (block.targetGround && isGround && includeGround))
&& tractorBeamBuild.canConsume()) valid = true;
}
if(!includeInvalid && !valid) return;
//non-base teams are considered as crux
int index = valid ? build.team.id > 5 ? 2 : build.team.id : 0;
float range = turret.range();
Draw.color(Team.baseTeams[index].color);
if (shader) {
Draw.z(166+(Team.baseTeams.length-index)*3);
Fill.poly(build.x, build.y, Lines.circleVertices(range), range);
} else Drawf.dashCircle(build.x, build.y, range, Team.baseTeams[index].color);
}
}