From c9346d1da81345339c01e8094e2ba8e42f36af96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 28 Sep 2014 16:05:08 +0200 Subject: [PATCH] setup the minelayer rearm sound --- OpenRA.Mods.RA/Activities/LayMines.cs | 10 ++++++---- OpenRA.Mods.RA/Activities/Rearm.cs | 9 +++++++-- OpenRA.Mods.RA/Minelayer.cs | 4 +++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/LayMines.cs b/OpenRA.Mods.RA/Activities/LayMines.cs index d1f60de62d..3aa7cdb581 100644 --- a/OpenRA.Mods.RA/Activities/LayMines.cs +++ b/OpenRA.Mods.RA/Activities/LayMines.cs @@ -26,8 +26,9 @@ namespace OpenRA.Mods.RA.Activities var limitedAmmo = self.TraitOrDefault(); if (!limitedAmmo.HasAmmo()) { + var info = self.Info.Traits.Get(); // rearm & repair at fix, then back out here to refill the minefield some more - var buildings = self.Info.Traits.Get().RearmBuildings; + var buildings = info.RearmBuildings; var rearmTarget = self.World.Actors.Where(a => self.Owner.Stances[a.Owner] == Stance.Ally && buildings.Contains(a.Info.Name)) .ClosestTo(self); @@ -38,26 +39,27 @@ namespace OpenRA.Mods.RA.Activities return Util.SequenceActivities( new MoveAdjacentTo(self, Target.FromActor(rearmTarget)), movement.MoveTo(self.World.Map.CellContaining(rearmTarget.CenterPosition), rearmTarget), - new Rearm(self), + new Rearm(self, info.RearmSound), new Repair(rearmTarget), this); } var ml = self.Trait(); - if (ml.Minefield.Contains(self.Location) && - ShouldLayMine(self, self.Location)) + if (ml.Minefield.Contains(self.Location) && ShouldLayMine(self, self.Location)) { LayMine(self); return Util.SequenceActivities(new Wait(20), this); // a little wait after placing each mine, for show } if (ml.Minefield.Length > 0) + { for (var n = 0; n < 20; n++) // dont get stuck forever here { var p = ml.Minefield.Random(self.World.SharedRandom); if (ShouldLayMine(self, p)) return Util.SequenceActivities( movement.MoveTo(p, 0), this ); } + } // TODO: return somewhere likely to be safe (near fix) so we're not sitting out in the minefield. diff --git a/OpenRA.Mods.RA/Activities/Rearm.cs b/OpenRA.Mods.RA/Activities/Rearm.cs index ce9a37b327..c3bb48aca7 100644 --- a/OpenRA.Mods.RA/Activities/Rearm.cs +++ b/OpenRA.Mods.RA/Activities/Rearm.cs @@ -19,18 +19,21 @@ namespace OpenRA.Mods.RA.Activities readonly LimitedAmmo limitedAmmo; int ticksPerPip = 25 * 2; int remainingTicks = 25 * 2; + string sound = null; - public Rearm(Actor self) + public Rearm(Actor self, string sound = null) { limitedAmmo = self.TraitOrDefault(); if (limitedAmmo != null) ticksPerPip = limitedAmmo.ReloadTimePerAmmo(); remainingTicks = ticksPerPip; + this.sound = sound; } public override Activity Tick(Actor self) { - if (IsCanceled || limitedAmmo == null) return NextActivity; + if (IsCanceled || limitedAmmo == null) + return NextActivity; if (--remainingTicks == 0) { @@ -44,6 +47,8 @@ namespace OpenRA.Mods.RA.Activities return NextActivity; hostBuilding.Trait().PlayCustomAnim(hostBuilding, "active"); + if (sound != null) + Sound.Play(sound, self.CenterPosition); remainingTicks = limitedAmmo.ReloadTimePerAmmo(); } diff --git a/OpenRA.Mods.RA/Minelayer.cs b/OpenRA.Mods.RA/Minelayer.cs index c4f9a17789..13b8128a6b 100644 --- a/OpenRA.Mods.RA/Minelayer.cs +++ b/OpenRA.Mods.RA/Minelayer.cs @@ -23,6 +23,8 @@ namespace OpenRA.Mods.RA [ActorReference] public readonly string Mine = "minv"; [ActorReference] public readonly string[] RearmBuildings = { "fix" }; + public readonly string RearmSound = "minelay1.aud"; + public readonly float MinefieldDepth = 1.5f; public object Create(ActorInitializer init) { return new Minelayer(init.self); } @@ -30,7 +32,7 @@ namespace OpenRA.Mods.RA class Minelayer : IIssueOrder, IResolveOrder, IPostRenderSelection, ISync { - /* [Sync] when sync can cope with arrays! */ + /* TODO: [Sync] when sync can cope with arrays! */ public CPos[] Minefield = null; [Sync] CPos minefieldStart; Actor self;