Note: This is a work-around until Selectable can be moved to Mods.Common, which is when the voice extensions should be moved back to ActorExts. Pulled phrase check before foreach in PlayVoice ActorExts. Removed superflous actor parameter from PlayVoice/PlayVoiceLocal. Simplified PlayVoice extensions. variant is no longer customisable, as all current usages use self.Owner.Country.Race anyway.
48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
#region Copyright & License Information
|
|
/*
|
|
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
|
|
* This file is part of OpenRA, which is free software. It is made
|
|
* available to you under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation. For more information,
|
|
* see COPYING.
|
|
*/
|
|
#endregion
|
|
|
|
using System.Linq;
|
|
using OpenRA.Traits;
|
|
|
|
namespace OpenRA.Mods.Common.Traits
|
|
{
|
|
[Desc("Sounds to play when killed.")]
|
|
public class DeathSoundsInfo : ITraitInfo
|
|
{
|
|
[Desc("Death notification voice.")]
|
|
public readonly string DeathSound = "Die";
|
|
|
|
[Desc("Multiply volume with this factor.")]
|
|
public readonly float VolumeMultiplier = 1f;
|
|
|
|
[Desc("DeathTypes that this should be used for. If empty, this will be used as the default sound.")]
|
|
public readonly string[] DeathTypes = { };
|
|
|
|
public object Create(ActorInitializer init) { return new DeathSounds(this); }
|
|
}
|
|
|
|
public class DeathSounds : INotifyKilled
|
|
{
|
|
readonly DeathSoundsInfo info;
|
|
|
|
public DeathSounds(DeathSoundsInfo info) { this.info = info; }
|
|
|
|
public void Killed(Actor self, AttackInfo e)
|
|
{
|
|
// Killed by some non-standard means
|
|
if (e.Warhead == null)
|
|
return;
|
|
|
|
if (info.DeathTypes.Contains(e.Warhead.DeathType) || (!info.DeathTypes.Any() &&
|
|
!self.Info.Traits.WithInterface<DeathSoundsInfo>().Any(dsi => dsi.DeathTypes.Contains(e.Warhead.DeathType))))
|
|
self.PlayVoiceLocal(info.DeathSound, info.VolumeMultiplier);
|
|
}
|
|
}
|
|
} |