#2089 fixed - Explodes filtering on InfDeath

This commit is contained in:
Chris Forbes
2012-05-22 19:13:23 +12:00
parent 3b704e25fa
commit 2d39b1dfac

View File

@@ -13,7 +13,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.RA
{
class ExplodesInfo : TraitInfo<Explodes>
class ExplodesInfo : ITraitInfo
{
[WeaponReference]
public readonly string Weapon = "UnitExplode";
@@ -21,13 +21,23 @@ namespace OpenRA.Mods.RA
public readonly string EmptyWeapon = "UnitExplode";
public readonly int Chance = 100;
public readonly int[] InfDeath = null;
public object Create (ActorInitializer init) { return new Explodes(this); }
}
class Explodes : INotifyKilled
{
readonly ExplodesInfo Info;
public Explodes( ExplodesInfo info ) { Info = info; }
public void Killed(Actor self, AttackInfo e)
{
if (self.World.SharedRandom.Next(100) > self.Info.Traits.Get<ExplodesInfo>().Chance)
if (self.World.SharedRandom.Next(100) > Info.Chance)
return;
if (Info.InfDeath != null && e.Warhead != null && !Info.InfDeath.Contains(e.Warhead.InfDeath))
return;
var weapon = ChooseWeaponForExplosion(self);
@@ -42,9 +52,7 @@ namespace OpenRA.Mods.RA
string ChooseWeaponForExplosion(Actor self)
{
var shouldExplode = self.TraitsImplementing<IExplodeModifier>().All(a => a.ShouldExplode(self));
var info = self.Info.Traits.Get<ExplodesInfo>();
return shouldExplode ? info.Weapon : info.EmptyWeapon;
return shouldExplode ? Info.Weapon : Info.EmptyWeapon;
}
}
}