From cc17b7419a1cdef090615c488da2b69b8f902a27 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 25 Sep 2017 21:12:44 +0100 Subject: [PATCH] Add voice feedback when issuing a mine deploy order. --- OpenRA.Mods.Cnc/Traits/Minelayer.cs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Cnc/Traits/Minelayer.cs b/OpenRA.Mods.Cnc/Traits/Minelayer.cs index d3512300a7..2418318816 100644 --- a/OpenRA.Mods.Cnc/Traits/Minelayer.cs +++ b/OpenRA.Mods.Cnc/Traits/Minelayer.cs @@ -29,18 +29,25 @@ namespace OpenRA.Mods.Cnc.Traits public readonly WDist MinefieldDepth = new WDist(1536); - public object Create(ActorInitializer init) { return new Minelayer(init.Self); } + [Desc("Voice to use when ordered to lay a minefield.")] + [VoiceReference] public readonly string Voice = "Action"; + + public object Create(ActorInitializer init) { return new Minelayer(init.Self, this); } } - public class Minelayer : IIssueOrder, IResolveOrder, IRenderAboveShroudWhenSelected, ISync, IIssueDeployOrder + public class Minelayer : IIssueOrder, IResolveOrder, IRenderAboveShroudWhenSelected, ISync, IIssueDeployOrder, IOrderVoice { + readonly MinelayerInfo info; + /* TODO: [Sync] when sync can cope with arrays! */ public CPos[] Minefield = null; readonly Sprite tile; [Sync] CPos minefieldStart; - public Minelayer(Actor self) + public Minelayer(Actor self, MinelayerInfo info) { + this.info = info; + var tileset = self.World.Map.Tileset.ToLowerInvariant(); tile = self.World.Map.Rules.Sequences.GetSequence("overlay", "build-valid-{0}".F(tileset)).GetSprite(0); } @@ -104,6 +111,14 @@ namespace OpenRA.Mods.Cnc.Traits } } + string IOrderVoice.VoicePhraseForOrder(Actor self, Order order) + { + if (order.OrderString == "PlaceMine" || order.OrderString == "PlaceMinefield") + return info.Voice; + + return null; + } + static IEnumerable GetMinefieldCells(CPos start, CPos end, WDist depth) { var mins = new CPos(Math.Min(start.X, end.X), Math.Min(start.Y, end.Y));