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

@@ -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);
}
}
}