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