added spawnpoint arrow

This commit is contained in:
sharlotte
2021-09-05 12:51:56 +09:00
parent dc2580cf87
commit a214edb822
4 changed files with 26 additions and 16 deletions

View File

@@ -72,6 +72,8 @@ setting.deadTarget.name = save locked target even if it's dead
setting.deadTarget.description = continue to display the coordinates and target information when a fixed target dies. setting.deadTarget.description = continue to display the coordinates and target information when a fixed target dies.
setting.distanceLine.name = Display distance line from info target setting.distanceLine.name = Display distance line from info target
setting.distanceLine.description = display dotted lines and numbers how far away the target is. setting.distanceLine.description = display dotted lines and numbers how far away the target is.
setting.spawnerarrow.name = Display arrow pointing to wave spawn-points.
setting.spawnerarrow.description =
setting.autoShooting.name = Enable Auto Shooting setting.autoShooting.name = Enable Auto Shooting
setting.autoShooting.description = no don't do hack setting.autoShooting.description = no don't do hack

View File

@@ -71,6 +71,8 @@ setting.deadTarget.name = 고정 목표물이 죽더라도 계속 고정하기
setting.deadTarget.description = 고정 목표물이 죽어도 그 좌표와 대상 정보를 계속 표시합니다. setting.deadTarget.description = 고정 목표물이 죽어도 그 좌표와 대상 정보를 계속 표시합니다.
setting.distanceLine.name = 목표물과의 거리선 표시 setting.distanceLine.name = 목표물과의 거리선 표시
setting.distanceLine.description = 목표물과 어느정도나 멀어졌는지 점선과 숫자로 표시합니다. setting.distanceLine.description = 목표물과 어느정도나 멀어졌는지 점선과 숫자로 표시합니다.
setting.spawnerarrow.name = 적 단계 생성지점을 가르키는 화살표를 표시합니다.
setting.spawnerarrow.description =
setting.autoShooting.name = 자동 사격 활성화 setting.autoShooting.name = 자동 사격 활성화
setting.autoShooting.description = setting.autoShooting.description =

View File

@@ -60,6 +60,9 @@ public class OverDrawer {
public static void setEvent(){ public static void setEvent(){
Events.run(EventType.Trigger.draw, () -> { Events.run(EventType.Trigger.draw, () -> {
float sin = Mathf.absin(Time.time, 6f, 1f);
Draw.z(Layer.overlayUI + 1);
int[] units = {0}; int[] units = {0};
if(pathLine || unitLine || logicLine) Groups.unit.each(u -> { if(pathLine || unitLine || logicLine) Groups.unit.each(u -> {
UnitController c = u.controller(); UnitController c = u.controller();
@@ -93,7 +96,6 @@ public class OverDrawer {
if(i + 1 >= pathTiles.size) continue; //prevent IndexOutException if(i + 1 >= pathTiles.size) continue; //prevent IndexOutException
Tile tile1 = pathTiles.get(i); Tile tile1 = pathTiles.get(i);
Tile tile2 = pathTiles.get(i + 1); Tile tile2 = pathTiles.get(i + 1);
Draw.z(Layer.overlayUI);
Lines.stroke(1, u.team.color); Lines.stroke(1, u.team.color);
Lines.line(tile1.worldx(), tile1.worldy(), tile2.worldx(), tile2.worldy()); Lines.line(tile1.worldx(), tile1.worldy(), tile2.worldx(), tile2.worldy());
} }
@@ -111,7 +113,6 @@ public class OverDrawer {
if(i + 1 >= pathTiles.size) continue; //prevent IndexOutException if(i + 1 >= pathTiles.size) continue; //prevent IndexOutException
Tile tile1 = pathTiles.get(i); Tile tile1 = pathTiles.get(i);
Tile tile2 = pathTiles.get(i + 1); Tile tile2 = pathTiles.get(i + 1);
Draw.z(Layer.overlayUI);
Lines.stroke(1, enemyTeam.color); Lines.stroke(1, enemyTeam.color);
Lines.line(tile1.worldx(), tile1.worldy(), tile2.worldx(), tile2.worldy()); Lines.line(tile1.worldx(), tile1.worldy(), tile2.worldx(), tile2.worldy());
} }
@@ -119,6 +120,11 @@ public class OverDrawer {
} }
}); });
if(settings.getBool("spawnerarrow")) spawner.getSpawns().each(t -> {
Drawf.circles(camera.position.x, camera.position.y, (player.unit() != null && player.unit().hitSize > 4 * 8f ? player.unit().hitSize * 1.5f : 4 * 8f) + sin - 4f);
Drawf.arrow(camera.position.x, camera.position.y, t.x * 8f, t.y * 8f, (player.unit() != null && player.unit().hitSize > 4 * 8f ? player.unit().hitSize * 1.5f : 4 * 8f) + sin, (Math.min(200 * 8f, Mathf.dst(camera.position.x, camera.position.y, t.x * 8f, t.y * 8f)) / (200 * 8f)) * (5f + sin));
});
if(settings.getBool("blockstatus")) Groups.build.each(build -> { if(settings.getBool("blockstatus")) Groups.build.each(build -> {
if(Vars.player != null && Vars.player.team() == build.team) return; if(Vars.player != null && Vars.player.team() == build.team) return;
@@ -128,7 +134,6 @@ public class OverDrawer {
float brcx = build.x + (block.size * tilesize / 2f) - (tilesize * multiplier / 2f); float brcx = build.x + (block.size * tilesize / 2f) - (tilesize * multiplier / 2f);
float brcy = build.y - (block.size * tilesize / 2f) + (tilesize * multiplier / 2f); float brcy = build.y - (block.size * tilesize / 2f) + (tilesize * multiplier / 2f);
Draw.z(Layer.power + 1);
Draw.color(Pal.gray); Draw.color(Pal.gray);
Fill.square(brcx, brcy, 2.5f * multiplier, 45); Fill.square(brcx, brcy, 2.5f * multiplier, 45);
Draw.color(build.status().color); Draw.color(build.status().color);
@@ -234,29 +239,29 @@ public class OverDrawer {
for(int i = 0; i < 4; i++){ for(int i = 0; i < 4; i++){
float rot = i * 90f + 45f + (-Time.time) % 360f; float rot = i * 90f + 45f + (-Time.time) % 360f;
float length = (entity instanceof Unit ? ((Unit)entity).hitSize : entity instanceof Building ? ((Building)entity).block.size * tilesize : 0) * 1.5f + 2.5f; float length = (entity instanceof Unit ? ((Unit)entity).hitSize : entity instanceof Building ? ((Building)entity).block.size * tilesize : 0) * 1.5f + 2.5f;
Draw.color(Tmp.c1.set(hud.locked ? Color.orange : Color.darkGray).lerp(hud.locked ? Color.scarlet : Color.gray, Mathf.absin(Time.time, 2f, 1f)).a(settings.getInt("selectopacity") / 100f)); Draw.color(Tmp.c1.set(hud.locked ? Color.orange : Color.darkGray).lerp(hud.locked ? Color.scarlet : Color.gray, Mathf.absin(Time.time, 3f, 1f)).a(settings.getInt("selectopacity") / 100f));
Draw.rect("select-arrow", entity.x() + Angles.trnsx(rot, length), entity.y() + Angles.trnsy(rot, length), length / 1.9f, length / 1.9f, rot - 135f); Draw.rect("select-arrow", entity.x() + Angles.trnsx(rot, length), entity.y() + Angles.trnsy(rot, length), length / 1.9f, length / 1.9f, rot - 135f);
} }
if(settings.getBool("distanceLine") && player.unit() != null && !player.unit().dead && getTarget() != player.unit()) { //need selected other unit with living player if(settings.getBool("distanceLine") && player.unit() != null && !player.unit().dead && getTarget() != player.unit()) { //need selected other unit with living player
Teamc from = player.unit(); Teamc from = player.unit();
Teamc to = getTarget(); Teamc to = getTarget();
float sin = Mathf.absin(Time.time, 6f, 1f);
if(player.unit() instanceof BlockUnitUnit bu) Tmp.v1.set(bu.x() + bu.tile().block.offset, bu.y() + bu.tile().block.offset).sub(to.x(), to.y()).limit(bu.tile().block.size * tilesize + sin + 0.5f); if(player.unit() instanceof BlockUnitUnit bu) Tmp.v1.set(bu.x() + bu.tile().block.offset, bu.y() + bu.tile().block.offset).sub(to.x(), to.y()).limit(bu.tile().block.size * tilesize + sin + 0.5f);
else Tmp.v1.set(from.x(), from.y()).sub(to.x(), to.y()).limit(player.unit().hitSize + sin + 0.5f); else Tmp.v1.set(from.x(), from.y()).sub(to.x(), to.y()).limit(player.unit().hitSize + sin + 0.5f);
float x2 = from.x() - Tmp.v1.x, y2 = from.y() - Tmp.v1.y, float x2 = from.x() - Tmp.v1.x, y2 = from.y() - Tmp.v1.y,
x1 = to.x() + Tmp.v1.x, y1 = to.y() + Tmp.v1.y; x1 = to.x() + Tmp.v1.x, y1 = to.y() + Tmp.v1.y;
int segs = (int) (to.dst(from.x(), from.y()) / tilesize); int segs = (int) (to.dst(from.x(), from.y()) / tilesize);
if(segs > 0){
Lines.stroke(2.5f, Pal.gray);
Lines.dashLine(x1, y1, x2, y2, segs);
Lines.stroke(1f, Pal.placing);
Lines.dashLine(x1, y1, x2, y2, segs);
Lines.stroke(2.5f, Pal.gray); Fonts.outline.draw(Strings.fixed(to.dst(from.x(), from.y()), 2) + " (" + segs + "tiles)",
Lines.dashLine(x1, y1, x2, y2, segs); from.x() + Angles.trnsx(Angles.angle(from.x(), from.y(), to.x(), to.y()), player.unit().hitSize() + 40),
Lines.stroke(1f, Pal.placing); from.y() + Angles.trnsy(Angles.angle(from.x(), from.y(), to.x(), to.y()), player.unit().hitSize() + 40) - 3,
Lines.dashLine(x1, y1, x2, y2, segs); Pal.accent, 0.25f, false, Align.center);
}
Fonts.outline.draw(Strings.fixed(to.dst(from.x(), from.y()), 2) + " (" + segs + "tiles)",
from.x() + Angles.trnsx(Angles.angle(from.x(), from.y(), to.x(), to.y()), player.unit().hitSize() + 40),
from.y() + Angles.trnsy(Angles.angle(from.x(), from.y(), to.x(), to.y()), player.unit().hitSize() + 40) - 3,
Pal.accent, 0.25f, false, Align.center);
} }
} }
@@ -328,6 +333,7 @@ public class OverDrawer {
} }
public static void drawMassPayloadLink(PayloadMassDriver.PayloadDriverBuild from){ public static void drawMassPayloadLink(PayloadMassDriver.PayloadDriverBuild from){
float sin = Mathf.absin(Time.time, 6f, 1f);
Groups.build.each(b -> b instanceof PayloadMassDriver.PayloadDriverBuild fromMass && Groups.build.each(b -> b instanceof PayloadMassDriver.PayloadDriverBuild fromMass &&
world.build(fromMass.link) == from && world.build(fromMass.link) == from &&
from.within(fromMass.x, fromMass.y, ((PayloadMassDriver)fromMass.block).range) && from.within(fromMass.x, fromMass.y, ((PayloadMassDriver)fromMass.block).range) &&
@@ -338,7 +344,6 @@ public class OverDrawer {
if(world.build(from.link) instanceof PayloadMassDriver.PayloadDriverBuild to && from != to && if(world.build(from.link) instanceof PayloadMassDriver.PayloadDriverBuild to && from != to &&
to.within(from.x, from.y, ((PayloadMassDriver)from.block).range)){ to.within(from.x, from.y, ((PayloadMassDriver)from.block).range)){
float sin = Mathf.absin(Time.time, 6f, 1f);
Tmp.v1.set(from.x + from.block.offset, from.y + from.block.offset).sub(to.x, to.y).limit(from.block.size * tilesize + sin + 0.5f); Tmp.v1.set(from.x + from.block.offset, from.y + from.block.offset).sub(to.x, to.y).limit(from.block.size * tilesize + sin + 0.5f);
float x2 = from.x - Tmp.v1.x, y2 = from.y - Tmp.v1.y, float x2 = from.x - Tmp.v1.x, y2 = from.y - Tmp.v1.y,
x1 = to.x + Tmp.v1.x, y1 = to.y + Tmp.v1.y; x1 = to.x + Tmp.v1.x, y1 = to.y + Tmp.v1.y;
@@ -369,6 +374,7 @@ public class OverDrawer {
} }
public static void drawMassLink(MassDriver.MassDriverBuild from){ public static void drawMassLink(MassDriver.MassDriverBuild from){
float sin = Mathf.absin(Time.time, 6f, 1f);
Groups.build.each(b -> b instanceof MassDriver.MassDriverBuild fromMass && Groups.build.each(b -> b instanceof MassDriver.MassDriverBuild fromMass &&
world.build(fromMass.link) == from && world.build(fromMass.link) == from &&
from.within(fromMass.x, fromMass.y, ((MassDriver)fromMass.block).range) && from.within(fromMass.x, fromMass.y, ((MassDriver)fromMass.block).range) &&
@@ -378,7 +384,6 @@ public class OverDrawer {
}); });
if(world.build(from.link) instanceof MassDriver.MassDriverBuild to && from != to && to.within(from.x, from.y, ((MassDriver)from.block).range)){ if(world.build(from.link) instanceof MassDriver.MassDriverBuild to && from != to && to.within(from.x, from.y, ((MassDriver)from.block).range)){
float sin = Mathf.absin(Time.time, 6f, 1f);
Tmp.v1.set(from.x + from.block.offset, from.y + from.block.offset).sub(to.x, to.y).limit(from.block.size * tilesize + sin + 0.5f); Tmp.v1.set(from.x + from.block.offset, from.y + from.block.offset).sub(to.x, to.y).limit(from.block.size * tilesize + sin + 0.5f);
float x2 = from.x - Tmp.v1.x, y2 = from.y - Tmp.v1.y, float x2 = from.x - Tmp.v1.x, y2 = from.y - Tmp.v1.y,
x1 = to.x + Tmp.v1.x, y1 = to.y + Tmp.v1.y; x1 = to.x + Tmp.v1.x, y1 = to.y + Tmp.v1.y;

View File

@@ -137,6 +137,7 @@ public class SettingS {
addGraphicCheckSetting("select", true, drawSeq); addGraphicCheckSetting("select", true, drawSeq);
addGraphicCheckSetting("deadTarget", false, drawSeq); addGraphicCheckSetting("deadTarget", false, drawSeq);
addGraphicCheckSetting("distanceLine", true, drawSeq); addGraphicCheckSetting("distanceLine", true, drawSeq);
addGraphicCheckSetting("spawnerarrow", true, drawSeq);
Seq<SharSetting> etcSeq = new Seq<>(); Seq<SharSetting> etcSeq = new Seq<>();
addGraphicCheckSetting("autoShooting", false, etcSeq); addGraphicCheckSetting("autoShooting", false, etcSeq);