From b24427a9c1c74a6bec17f152cd5fa1267052e702 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 24 Jul 2013 21:00:28 +1200 Subject: [PATCH] Hide smoke under fog. --- OpenRA.Mods.RA/Effects/Smoke.cs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) 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")); } } }