Adds PlayVoice, PlayVoiceLocal and HasVoice to ActorExts.
Makes Cargo unload voice customisable.
This commit is contained in:
@@ -80,6 +80,39 @@ namespace OpenRA.Mods.Common
|
|||||||
return Target.Invalid;
|
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)
|
public static void NotifyBlocker(this Actor self, IEnumerable<Actor> blockers)
|
||||||
{
|
{
|
||||||
foreach (var blocker in blockers)
|
foreach (var blocker in blockers)
|
||||||
|
|||||||
@@ -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.")]
|
[Desc("Terrain types that this actor is allowed to eject actors onto. Leave empty for all terrain types.")]
|
||||||
public readonly string[] UnloadTerrainTypes = { };
|
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.")]
|
[Desc("Which direction the passenger will face (relative to the transport) when unloading.")]
|
||||||
public readonly int PassengerFacing = 128;
|
public readonly int PassengerFacing = 128;
|
||||||
|
|
||||||
@@ -204,10 +207,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public string VoicePhraseForOrder(Actor self, Order order)
|
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 null;
|
||||||
|
|
||||||
return self.TraitsImplementing<IVoiced>().Any(x => x.HasVoice(self, "Unload")) ? "Unload" : "Move";
|
return Info.UnloadVoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool MoveDisabled(Actor self) { return reserves.Any(); }
|
public bool MoveDisabled(Actor self) { return reserves.Any(); }
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
public void BuildingComplete(Actor self)
|
public void BuildingComplete(Actor self)
|
||||||
{
|
{
|
||||||
foreach (var voiced in self.TraitsImplementing<IVoiced>())
|
self.PlayVoice(self, "Build", self.Owner.Country.Race);
|
||||||
voiced.PlayVoice(self, "Build", self.Owner.Country.Race);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,8 +39,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (e.DamageState == DamageState.Dead && damaged != e.Attacker)
|
if (e.DamageState == DamageState.Dead && damaged != e.Attacker)
|
||||||
{
|
{
|
||||||
if (self.World.WorldTick - lastAnnounce > info.Interval * 25)
|
if (self.World.WorldTick - lastAnnounce > info.Interval * 25)
|
||||||
foreach (var voiced in self.TraitsImplementing<IVoiced>())
|
self.PlayVoice(self, "Kill", self.Owner.Country.Race);
|
||||||
voiced.PlayVoice(self, "Kill", self.Owner.Country.Race);
|
|
||||||
|
|
||||||
lastAnnounce = self.World.WorldTick;
|
lastAnnounce = self.World.WorldTick;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,8 +42,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
if (info.DeathTypes.Contains(e.Warhead.DeathType) || (!info.DeathTypes.Any() &&
|
if (info.DeathTypes.Contains(e.Warhead.DeathType) || (!info.DeathTypes.Any() &&
|
||||||
!self.Info.Traits.WithInterface<DeathSoundsInfo>().Any(dsi => dsi.DeathTypes.Contains(e.Warhead.DeathType))))
|
!self.Info.Traits.WithInterface<DeathSoundsInfo>().Any(dsi => dsi.DeathTypes.Contains(e.Warhead.DeathType))))
|
||||||
foreach (var voiced in self.TraitsImplementing<IVoiced>())
|
self.PlayVoiceLocal(self, info.DeathSound, self.Owner.Country.Race, info.VolumeMultiplier);
|
||||||
voiced.PlayVoiceLocal(self, info.DeathSound, self.Owner.Country.Race, info.VolumeMultiplier);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user