Rename Explodes to FireWarheadsOnDeath
This commit is contained in:
@@ -21,7 +21,7 @@ using OpenRA.Traits;
|
|||||||
|
|
||||||
namespace OpenRA.Mods.Cnc.Traits
|
namespace OpenRA.Mods.Cnc.Traits
|
||||||
{
|
{
|
||||||
sealed class MadTankInfo : TraitInfo, IRulesetLoaded, Requires<ExplodesInfo>, Requires<WithFacingSpriteBodyInfo>
|
sealed class MadTankInfo : TraitInfo, IRulesetLoaded, Requires<FireWarheadsOnDeathInfo>, Requires<WithFacingSpriteBodyInfo>
|
||||||
{
|
{
|
||||||
[SequenceReference]
|
[SequenceReference]
|
||||||
public readonly string ThumpSequence = "piston";
|
public readonly string ThumpSequence = "piston";
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public enum DamageSource { Self, Killer }
|
public enum DamageSource { Self, Killer }
|
||||||
|
|
||||||
[Desc("This actor explodes when killed.")]
|
[Desc("This actor fires warheads when killed.")]
|
||||||
public class ExplodesInfo : ConditionalTraitInfo, Requires<IHealthInfo>
|
public class FireWarheadsOnDeathInfo : ConditionalTraitInfo, Requires<IHealthInfo>
|
||||||
{
|
{
|
||||||
[WeaponReference]
|
[WeaponReference]
|
||||||
[FieldLoader.Require]
|
[FieldLoader.Require]
|
||||||
@@ -58,7 +58,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
public WeaponInfo WeaponInfo { get; private set; }
|
public WeaponInfo WeaponInfo { get; private set; }
|
||||||
public WeaponInfo EmptyWeaponInfo { get; private set; }
|
public WeaponInfo EmptyWeaponInfo { get; private set; }
|
||||||
|
|
||||||
public override object Create(ActorInitializer init) { return new Explodes(this, init.Self); }
|
public override object Create(ActorInitializer init) { return new FireWarheadsOnDeath(this, init.Self); }
|
||||||
public override void RulesetLoaded(Ruleset rules, ActorInfo ai)
|
public override void RulesetLoaded(Ruleset rules, ActorInfo ai)
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(Weapon))
|
if (!string.IsNullOrEmpty(Weapon))
|
||||||
@@ -81,13 +81,13 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Explodes : ConditionalTrait<ExplodesInfo>, INotifyKilled, INotifyDamage
|
public class FireWarheadsOnDeath : ConditionalTrait<FireWarheadsOnDeathInfo>, INotifyKilled, INotifyDamage
|
||||||
{
|
{
|
||||||
readonly IHealth health;
|
readonly IHealth health;
|
||||||
BuildingInfo buildingInfo;
|
BuildingInfo buildingInfo;
|
||||||
Armament[] armaments;
|
Armament[] armaments;
|
||||||
|
|
||||||
public Explodes(ExplodesInfo info, Actor self)
|
public FireWarheadsOnDeath(FireWarheadsOnDeathInfo info, Actor self)
|
||||||
: base(info)
|
: base(info)
|
||||||
{
|
{
|
||||||
health = self.Trait<IHealth>();
|
health = self.Trait<IHealth>();
|
||||||
@@ -122,16 +122,15 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
if (Info.Type == ExplosionType.Footprint && buildingInfo != null)
|
if (Info.Type == ExplosionType.Footprint && buildingInfo != null)
|
||||||
{
|
{
|
||||||
var cells = buildingInfo.OccupiedTiles(self.Location);
|
foreach (var c in buildingInfo.OccupiedTiles(self.Location))
|
||||||
foreach (var c in cells)
|
|
||||||
weapon.Impact(Target.FromPos(self.World.Map.CenterOfCell(c) + Info.Offset), source);
|
weapon.Impact(Target.FromPos(self.World.Map.CenterOfCell(c) + Info.Offset), source);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// Use .FromPos since this actor is killed. Cannot use Target.FromActor
|
{
|
||||||
|
// Use .FromPos since this actor is killed. Cannot use Target.FromActor.
|
||||||
weapon.Impact(Target.FromPos(self.CenterPosition + Info.Offset), source);
|
weapon.Impact(Target.FromPos(self.CenterPosition + Info.Offset), source);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WeaponInfo ChooseWeaponForExplosion(Actor self)
|
WeaponInfo ChooseWeaponForExplosion(Actor self)
|
||||||
{
|
{
|
||||||
@@ -140,7 +139,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
else if (self.World.SharedRandom.Next(100) > Info.LoadedChance)
|
else if (self.World.SharedRandom.Next(100) > Info.LoadedChance)
|
||||||
return Info.EmptyWeaponInfo;
|
return Info.EmptyWeaponInfo;
|
||||||
|
|
||||||
// PERF: Avoid LINQ
|
// PERF: Avoid LINQ.
|
||||||
foreach (var a in armaments)
|
foreach (var a in armaments)
|
||||||
if (!a.IsReloading)
|
if (!a.IsReloading)
|
||||||
return Info.WeaponInfo;
|
return Info.WeaponInfo;
|
||||||
@@ -156,7 +155,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (!Info.DeathTypes.IsEmpty && !e.Damage.DamageTypes.Overlaps(Info.DeathTypes))
|
if (!Info.DeathTypes.IsEmpty && !e.Damage.DamageTypes.Overlaps(Info.DeathTypes))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Cast to long to avoid overflow when multiplying by the health
|
// Cast to long to avoid overflow when multiplying by the health.
|
||||||
var source = Info.DamageSource == DamageSource.Self ? self : e.Attacker;
|
var source = Info.DamageSource == DamageSource.Self ? self : e.Attacker;
|
||||||
if (health.HP * 100L < Info.DamageThreshold * (long)health.MaxHP)
|
if (health.HP * 100L < Info.DamageThreshold * (long)health.MaxHP)
|
||||||
self.World.AddFrameEndTask(w => self.Kill(source, e.Damage.DamageTypes));
|
self.World.AddFrameEndTask(w => self.Kill(source, e.Damage.DamageTypes));
|
||||||
Reference in New Issue
Block a user