diff --git a/OpenRA.Mods.Common/Traits/Render/WithShadow.cs b/OpenRA.Mods.Common/Traits/Render/WithShadow.cs index ce750760b4..adc123b775 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithShadow.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithShadow.cs @@ -16,25 +16,32 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits.Render { - [Desc("Clones the aircraft sprite with another palette below it.")] - class WithShadowInfo : ITraitInfo + [Desc("Clones the actor sprite with another palette below it.")] + public class WithShadowInfo : UpgradableTraitInfo { [PaletteReference] public readonly string Palette = "shadow"; - public object Create(ActorInitializer init) { return new WithShadow(this); } + public override object Create(ActorInitializer init) { return new WithShadow(this); } } - class WithShadow : IRenderModifier + public class WithShadow : UpgradableTrait, IRenderModifier { - WithShadowInfo info; + readonly WithShadowInfo info; public WithShadow(WithShadowInfo info) + : base(info) { this.info = info; } public IEnumerable ModifyRender(Actor self, WorldRenderer wr, IEnumerable r) { + if (IsTraitDisabled) + return Enumerable.Empty(); + + if (self.IsDead || !self.IsInWorld) + return Enumerable.Empty(); + // Contrails shouldn't cast shadows var height = self.World.Map.DistanceAboveTerrain(self.CenterPosition).Length; var shadowSprites = r.Where(s => !s.IsDecoration)