diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 40b12ec5a7..2527adadc5 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -1,4 +1,4 @@ - + Debug @@ -83,6 +83,7 @@ + diff --git a/OpenRA.Game/Traits/Render/RenderFlare.cs b/OpenRA.Game/Traits/Render/RenderFlare.cs new file mode 100644 index 0000000000..3d1f599f65 --- /dev/null +++ b/OpenRA.Game/Traits/Render/RenderFlare.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace OpenRA.Traits.Render +{ + class RenderFlareInfo : RenderSimpleInfo + { + public override object Create(Actor self) { return new RenderFlare(self); } + } + + class RenderFlare : RenderSimple + { + public RenderFlare(Actor self) + : base(self, () => 0) + { + anim.PlayThen("open", () => anim.PlayRepeating("idle")); + } + } +} diff --git a/OpenRA.Mods.RA-NG/CrateDrop.cs b/OpenRA.Mods.RA-NG/CrateDrop.cs index 292f1d3875..2334025425 100644 --- a/OpenRA.Mods.RA-NG/CrateDrop.cs +++ b/OpenRA.Mods.RA-NG/CrateDrop.cs @@ -82,7 +82,7 @@ namespace OpenRA.Mods.RA_NG plane.traits.Get().Facing = Util.GetFacing(p - startPos, 0); plane.CancelActivity(); plane.QueueActivity(new FlyCircle(p)); - plane.traits.Get().SetLZ(p); + plane.traits.Get().SetLZ(p, null); plane.traits.Get().Load(plane, crate); }); return; diff --git a/OpenRA.Mods.RA/ParaDrop.cs b/OpenRA.Mods.RA/ParaDrop.cs index b3455336d8..4184c05831 100644 --- a/OpenRA.Mods.RA/ParaDrop.cs +++ b/OpenRA.Mods.RA/ParaDrop.cs @@ -35,10 +35,12 @@ namespace OpenRA.Mods.RA { readonly List droppedAt = new List(); int2 lz; + Actor flare; - public void SetLZ( int2 lz ) + public void SetLZ( int2 lz, Actor flare ) { this.lz = lz; + this.flare = flare; droppedAt.Clear(); } @@ -76,6 +78,13 @@ namespace OpenRA.Mods.RA self.CancelActivity(); self.QueueActivity(new FlyOffMap { Interruptible = false }); self.QueueActivity(new RemoveSelf()); + + if (flare != null) + { + flare.CancelActivity(); + flare.QueueActivity(new Wait(300)); + flare.QueueActivity(new RemoveSelf()); + } } } } diff --git a/OpenRA.Mods.RA/ParatroopersPower.cs b/OpenRA.Mods.RA/ParatroopersPower.cs index ad52ebeb8c..a9c6edb5d1 100644 --- a/OpenRA.Mods.RA/ParatroopersPower.cs +++ b/OpenRA.Mods.RA/ParatroopersPower.cs @@ -59,13 +59,15 @@ namespace OpenRA.Mods.RA var startPos = owner.World.ChooseRandomEdgeCell(); owner.World.AddFrameEndTask(w => { + var flare = w.CreateActor("FLARE", p, owner); + var a = w.CreateActor("BADR", startPos, owner); a.traits.Get().Facing = Util.GetFacing(p - startPos, 0); a.traits.Get().Altitude = a.Info.Traits.Get().CruiseAltitude; a.CancelActivity(); a.QueueActivity(new FlyCircle(p)); - a.traits.Get().SetLZ(p); + a.traits.Get().SetLZ(p, flare); var cargo = a.traits.Get(); foreach (var i in items) diff --git a/mods/ra/system.yaml b/mods/ra/system.yaml index 64d8f60a58..5d0e491848 100644 --- a/mods/ra/system.yaml +++ b/mods/ra/system.yaml @@ -345,3 +345,10 @@ CAMERA: Unit: HP:1000 Sight: 10 + +FLARE: + Unit: + HP:1000 + Sight: 3 + RenderFlare: + Image: smokland