Adds PlayVoice, PlayVoiceLocal and HasVoice to ActorExts.

Makes Cargo unload voice customisable.
This commit is contained in:
reaperrr
2015-05-21 05:35:08 +02:00
parent 5f68516070
commit 5e2c781c8a
5 changed files with 41 additions and 8 deletions

View File

@@ -80,6 +80,39 @@ namespace OpenRA.Mods.Common
return Target.Invalid;
}
public static void PlayVoice(this Actor self, Actor actor, string phrase, string variant)
{
foreach (var voiced in self.TraitsImplementing<IVoiced>())
{
if (phrase == null)
return;
if (string.IsNullOrEmpty(voiced.VoiceSet))
return;
voiced.PlayVoice(self, phrase, variant);
}
}
public static void PlayVoiceLocal(this Actor self, Actor actor, string phrase, string variant, float volume)
{
foreach (var voiced in self.TraitsImplementing<IVoiced>())
{
if (phrase == null)
return;
if (string.IsNullOrEmpty(voiced.VoiceSet))
return;
voiced.PlayVoiceLocal(self, phrase, variant, volume);
}
}
public static bool HasVoice(this Actor self, string voice)
{
return self.TraitsImplementing<IVoiced>().Any(x => x.HasVoice(self, voice));
}
public static void NotifyBlocker(this Actor self, IEnumerable<Actor> blockers)
{
foreach (var blocker in blockers)

View File

@@ -39,6 +39,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Terrain types that this actor is allowed to eject actors onto. Leave empty for all terrain types.")]
public readonly string[] UnloadTerrainTypes = { };
[Desc("Voice to play when ordered to unload the passengers.")]
public readonly string UnloadVoice = "Unload";
[Desc("Which direction the passenger will face (relative to the transport) when unloading.")]
public readonly int PassengerFacing = 128;
@@ -204,10 +207,10 @@ namespace OpenRA.Mods.Common.Traits
public string VoicePhraseForOrder(Actor self, Order order)
{
if (order.OrderString != "Unload" || IsEmpty(self))
if (order.OrderString != "Unload" || IsEmpty(self) || !self.HasVoice(Info.UnloadVoice))
return null;
return self.TraitsImplementing<IVoiced>().Any(x => x.HasVoice(self, "Unload")) ? "Unload" : "Move";
return Info.UnloadVoice;
}
public bool MoveDisabled(Actor self) { return reserves.Any(); }

View File

@@ -19,8 +19,7 @@ namespace OpenRA.Mods.Common.Traits
{
public void BuildingComplete(Actor self)
{
foreach (var voiced in self.TraitsImplementing<IVoiced>())
voiced.PlayVoice(self, "Build", self.Owner.Country.Race);
self.PlayVoice(self, "Build", self.Owner.Country.Race);
}
}
}

View File

@@ -39,8 +39,7 @@ namespace OpenRA.Mods.Common.Traits
if (e.DamageState == DamageState.Dead && damaged != e.Attacker)
{
if (self.World.WorldTick - lastAnnounce > info.Interval * 25)
foreach (var voiced in self.TraitsImplementing<IVoiced>())
voiced.PlayVoice(self, "Kill", self.Owner.Country.Race);
self.PlayVoice(self, "Kill", self.Owner.Country.Race);
lastAnnounce = self.World.WorldTick;
}

View File

@@ -42,8 +42,7 @@ namespace OpenRA.Mods.Common.Traits
if (info.DeathTypes.Contains(e.Warhead.DeathType) || (!info.DeathTypes.Any() &&
!self.Info.Traits.WithInterface<DeathSoundsInfo>().Any(dsi => dsi.DeathTypes.Contains(e.Warhead.DeathType))))
foreach (var voiced in self.TraitsImplementing<IVoiced>())
voiced.PlayVoiceLocal(self, info.DeathSound, self.Owner.Country.Race, info.VolumeMultiplier);
self.PlayVoiceLocal(self, info.DeathSound, self.Owner.Country.Race, info.VolumeMultiplier);
}
}
}