diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 8b622535cc..944bd87168 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -2445,6 +2445,26 @@ public class Fx{ Lines.poly(e.x, e.y, 6, e.rotation + e.fin()); }).followParent(true), + arcShieldBreak = new Effect(40, e -> { + Lines.stroke(3 * e.fout(), e.color); + if(e.data instanceof Unit u){ + ShieldArcAbility ab = (ShieldArcAbility) Structs.find(u.abilities, a -> a instanceof ShieldArcAbility); + if(ab != null){ + Vec2 pos = Tmp.v1.set(ab.x, ab.y).rotate(u.rotation - 90f).add(u); + Lines.arc(pos.x, pos.y, ab.radius + ab.width/2, ab.angle / 360f, u.rotation + ab.angleOffset - ab.angle / 2f); + Lines.arc(pos.x, pos.y, ab.radius - ab.width/2, ab.angle / 360f, u.rotation + ab.angleOffset - ab.angle / 2f); + for(int i : Mathf.signs){ + float + px = pos.x + Angles.trnsx(u.rotation + ab.angleOffset - ab.angle / 2f * i, ab.radius + ab.width / 2), + py = pos.y + Angles.trnsy(u.rotation + ab.angleOffset - ab.angle / 2f * i, ab.radius + ab.width / 2), + px1 = pos.x + Angles.trnsx(u.rotation + ab.angleOffset - ab.angle / 2f * i, ab.radius - ab.width / 2), + py1 = pos.y + Angles.trnsy(u.rotation + ab.angleOffset - ab.angle / 2f * i, ab.radius - ab.width / 2); + Lines.line(px, py, px1, py1); + } + } + } + }).followParent(true), + coreLandDust = new Effect(100f, e -> { color(e.color, e.fout(0.1f)); rand.setSeed(e.id); diff --git a/core/src/mindustry/entities/abilities/ShieldArcAbility.java b/core/src/mindustry/entities/abilities/ShieldArcAbility.java index 548a123899..632d0a58a7 100644 --- a/core/src/mindustry/entities/abilities/ShieldArcAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldArcAbility.java @@ -21,7 +21,7 @@ public class ShieldArcAbility extends Ability{ private static Vec2 paramPos = new Vec2(); private static final Cons shieldConsumer = b -> { if(b.team != paramUnit.team && b.type.absorbable && paramField.data > 0 && - !paramPos.within(b, paramField.radius + paramField.width/2f) && + !b.within(paramPos, paramField.radius - paramField.width/2f) && Tmp.v1.set(b).add(b.vel).within(paramPos, paramField.radius + paramField.width/2f) && Angles.within(paramPos.angleTo(b), paramUnit.rotation + paramField.angleOffset, paramField.angle / 2f)){ @@ -32,7 +32,7 @@ public class ShieldArcAbility extends Ability{ if(paramField.data <= b.damage()){ paramField.data -= paramField.cooldown * paramField.regen; - //TODO fx + Fx.arcShieldBreak.at(paramPos.x, paramPos.y, 0, paramUnit.team.color, paramUnit); } paramField.data -= b.damage(); @@ -79,6 +79,7 @@ public class ShieldArcAbility extends Ability{ @Override public void update(Unit unit){ + if(data < max){ data += Time.delta * regen; } @@ -105,7 +106,6 @@ public class ShieldArcAbility extends Ability{ @Override public void draw(Unit unit){ - if(widthScale > 0.001f){ Draw.z(Layer.shields);