diff --git a/OpenRA.Mods.RA/Effects/Smoke.cs b/OpenRA.Mods.RA/Effects/Smoke.cs index b9e19cf006..182a81de12 100644 --- a/OpenRA.Mods.RA/Effects/Smoke.cs +++ b/OpenRA.Mods.RA/Effects/Smoke.cs @@ -17,25 +17,29 @@ namespace OpenRA.Mods.RA.Effects { public class Smoke : IEffect { - readonly WPos Pos; - readonly Animation Anim; + readonly World world; + readonly WPos pos; + readonly CPos cell; + readonly Animation anim; public Smoke(World world, WPos pos, string trail) { - Pos = pos; - Anim = new Animation(trail); - Anim.PlayThen("idle", + this.world = world; + this.pos = pos; + this.cell = pos.ToCPos(); + anim = new Animation(trail); + anim.PlayThen("idle", () => world.AddFrameEndTask(w => w.Remove(this))); } - public void Tick(World world) - { - Anim.Tick(); - } + public void Tick(World world) { anim.Tick(); } public IEnumerable Render(WorldRenderer wr) { - return Anim.Render(Pos, wr.Palette("effect")); + if (world.FogObscures(cell)) + return SpriteRenderable.None; + + return anim.Render(pos, wr.Palette("effect")); } } }