From 0019b78f71a1ca7e2bd2ee3d16bbdb7587e54e46 Mon Sep 17 00:00:00 2001 From: Elixias <61173114+LixieWulf@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:27:22 -0600 Subject: [PATCH] Custom shield colouring (#9647) Five extra minutes I had the luxury of spending fixing Git because it exploded again Co-authored-by: Anuken --- .../entities/abilities/ForceFieldAbility.java | 4 ++-- .../mindustry/entities/abilities/ShieldArcAbility.java | 6 ++++-- .../entities/abilities/ShieldRegenFieldAbility.java | 4 ++-- core/src/mindustry/entities/comp/ShieldComp.java | 2 +- core/src/mindustry/type/UnitType.java | 10 +++++++++- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/entities/abilities/ForceFieldAbility.java b/core/src/mindustry/entities/abilities/ForceFieldAbility.java index 545bc9af68..504bf20681 100644 --- a/core/src/mindustry/entities/abilities/ForceFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ForceFieldAbility.java @@ -82,7 +82,7 @@ public class ForceFieldAbility extends Ability{ if(unit.shield <= 0f && !wasBroken){ unit.shield -= cooldown * regen; - Fx.shieldBreak.at(unit.x, unit.y, radius, unit.team.color, this); + Fx.shieldBreak.at(unit.x, unit.y, radius, unit.type.shieldColor(unit), this); } wasBroken = unit.shield <= 0f; @@ -110,7 +110,7 @@ public class ForceFieldAbility extends Ability{ checkRadius(unit); if(unit.shield > 0){ - Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha)); + Draw.color(unit.type.shieldColor(unit), Color.white, Mathf.clamp(alpha)); if(Vars.renderer.animateShields){ Draw.z(Layer.shields + 0.001f * alpha); diff --git a/core/src/mindustry/entities/abilities/ShieldArcAbility.java b/core/src/mindustry/entities/abilities/ShieldArcAbility.java index a7d41cdaf7..820255f602 100644 --- a/core/src/mindustry/entities/abilities/ShieldArcAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldArcAbility.java @@ -31,7 +31,7 @@ public class ShieldArcAbility extends Ability{ if(paramField.data <= b.damage()){ paramField.data -= paramField.cooldown * paramField.regen; - Fx.arcShieldBreak.at(paramPos.x, paramPos.y, 0, paramUnit.team.color, paramUnit); + Fx.arcShieldBreak.at(paramPos.x, paramPos.y, 0, paramField.color == null ? paramUnit.type.shieldColor(paramUnit) : paramField.color, paramUnit); } paramField.data -= b.damage(); @@ -60,6 +60,8 @@ public class ShieldArcAbility extends Ability{ public boolean drawArc = true; /** If not null, will be drawn on top. */ public @Nullable String region; + /** Color override of the shield. Uses unit shield colour by default. */ + public @Nullable Color color; /** If true, sprite position will be influenced by x/y. */ public boolean offsetRegion = false; @@ -109,7 +111,7 @@ public class ShieldArcAbility extends Ability{ if(widthScale > 0.001f){ Draw.z(Layer.shields); - Draw.color(unit.team.color, Color.white, Mathf.clamp(alpha)); + Draw.color(color == null ? unit.type.shieldColor(unit) : color, Color.white, Mathf.clamp(alpha)); var pos = paramPos.set(x, y).rotate(unit.rotation - 90f).add(unit); if(!Vars.renderer.animateShields){ diff --git a/core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java b/core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java index c34ce359ce..092222ec0d 100644 --- a/core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ShieldRegenFieldAbility.java @@ -48,13 +48,13 @@ public class ShieldRegenFieldAbility extends Ability{ if(other.shield < max){ other.shield = Math.min(other.shield + amount, max); other.shieldAlpha = 1f; //TODO may not be necessary - applyEffect.at(unit.x, unit.y, 0f, unit.team.color, parentizeEffects ? other : null); + applyEffect.at(other.x, other.y, 0f, other.type.shieldColor(other), parentizeEffects ? other : null); applied = true; } }); if(applied){ - activeEffect.at(unit.x, unit.y, unit.team.color); + activeEffect.at(unit.x, unit.y, unit.type.shieldColor(unit)); } timer = 0f; diff --git a/core/src/mindustry/entities/comp/ShieldComp.java b/core/src/mindustry/entities/comp/ShieldComp.java index 87519fd742..c290fa6251 100644 --- a/core/src/mindustry/entities/comp/ShieldComp.java +++ b/core/src/mindustry/entities/comp/ShieldComp.java @@ -61,7 +61,7 @@ abstract class ShieldComp implements Healthc, Posc{ } if(hadShields && shield <= 0.0001f){ - Fx.unitShieldBreak.at(x, y, 0, team.color, this); + Fx.unitShieldBreak.at(x, y, 0, type.shieldColor(self()), this); } } } diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 89c8b98f2d..36322840e3 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -259,6 +259,8 @@ public class UnitType extends UnlockableContent implements Senseable{ public Color healColor = Pal.heal; /** Color of light that this unit produces when lighting is enabled in the map. */ public Color lightColor = Pal.powerLight; + /** override for unit shield colour. */ + public @Nullable Color shieldColor; /** sound played when this unit explodes (*not* when it is shot down) */ public Sound deathSound = Sounds.bang; /** sound played on loop when this unit is around. */ @@ -1305,6 +1307,12 @@ public class UnitType extends UnlockableContent implements Senseable{ Draw.reset(); } + + //...where do I put this + public Color shieldColor(Unit unit){ + return shieldColor == null ? unit.team.color : shieldColor; + } + public void drawMining(Unit unit){ if(!unit.mining()) return; @@ -1345,7 +1353,7 @@ public class UnitType extends UnlockableContent implements Senseable{ float radius = unit.hitSize() * 1.3f; Fill.light(unit.x, unit.y, Lines.circleVertices(radius), radius, Color.clear, - Tmp.c2.set(unit.team.color).lerp(Color.white, Mathf.clamp(unit.hitTime() / 2f)).a(0.7f * alpha) + Tmp.c2.set(unit.type.shieldColor(unit)).lerp(Color.white, Mathf.clamp(unit.hitTime() / 2f)).a(0.7f * alpha) ); }