From 384aaf14b58bbd1f94df138dab46ca0fc276df4b Mon Sep 17 00:00:00 2001 From: reaperrr Date: Thu, 6 Jul 2017 21:00:07 +0200 Subject: [PATCH] Added LaunchEffect effect --- OpenRA.Mods.Common/Effects/LaunchEffect.cs | 57 ++++++++++++++++++++ OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + 2 files changed, 58 insertions(+) create mode 100644 OpenRA.Mods.Common/Effects/LaunchEffect.cs diff --git a/OpenRA.Mods.Common/Effects/LaunchEffect.cs b/OpenRA.Mods.Common/Effects/LaunchEffect.cs new file mode 100644 index 0000000000..417da065fe --- /dev/null +++ b/OpenRA.Mods.Common/Effects/LaunchEffect.cs @@ -0,0 +1,57 @@ +#region Copyright & License Information +/* + * Copyright 2007-2018 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of + * the License, or (at your option) any later version. For more + * information, see COPYING. + */ +#endregion + +using System; +using System.Collections.Generic; +using OpenRA.Effects; +using OpenRA.Graphics; + +namespace OpenRA.Mods.Common.Effects +{ + public class LaunchEffect : IEffect, ISpatiallyPartitionable + { + readonly World world; + readonly Animation anim; + readonly string palette; + WPos pos; + Func posFunc; + + public LaunchEffect(World world, string image, string sequence, string palette) + : this(world, () => WPos.Zero, () => 0, image, sequence, palette) { } + + public LaunchEffect(World world, Func posFunc, Func facingFunc, string image, string sequence, string palette) + { + this.world = world; + this.posFunc = posFunc; + this.palette = palette; + + anim = new Animation(world, image, facingFunc); + anim.PlayThen(sequence, () => world.AddFrameEndTask(w => { w.Remove(this); w.ScreenMap.Remove(this); })); + pos = posFunc(); + world.ScreenMap.Add(this, pos, anim.Image); + } + + public void Tick(World world) + { + anim.Tick(); + pos = posFunc(); + world.ScreenMap.Update(this, pos, anim.Image); + } + + public IEnumerable Render(WorldRenderer wr) + { + if (world.FogObscures(pos)) + return SpriteRenderable.None; + + return anim.Render(pos, wr.Palette(palette)); + } + } +} diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 37b40087f1..9fb2edccf9 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -149,6 +149,7 @@ +