Move common DoImpact(Target) method into DamageWarhead.
This commit is contained in:
@@ -24,16 +24,7 @@ namespace OpenRA.GameRules
|
|||||||
[Desc("What factor to multiply the Damage by for this spread range.", "Each factor specified must have an associated Spread defined.")]
|
[Desc("What factor to multiply the Damage by for this spread range.", "Each factor specified must have an associated Spread defined.")]
|
||||||
public readonly float[] SpreadFactor = { 1f };
|
public readonly float[] SpreadFactor = { 1f };
|
||||||
|
|
||||||
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
||||||
{
|
|
||||||
// Used by traits that damage a single actor, rather than a position
|
|
||||||
if (target.Type == TargetType.Actor)
|
|
||||||
DoImpact(target.Actor, firedBy, firepowerModifier);
|
|
||||||
else
|
|
||||||
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
|
||||||
{
|
{
|
||||||
var world = firedBy.World;
|
var world = firedBy.World;
|
||||||
|
|
||||||
@@ -60,7 +51,7 @@ namespace OpenRA.GameRules
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
||||||
{
|
{
|
||||||
if (IsValidAgainst(victim, firedBy))
|
if (IsValidAgainst(victim, firedBy))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -55,5 +55,17 @@ namespace OpenRA.GameRules
|
|||||||
float versus;
|
float versus;
|
||||||
return Versus.TryGetValue(armor.Type, out versus) ? versus : 1f;
|
return Versus.TryGetValue(armor.Type, out versus) ? versus : 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier)
|
||||||
|
{
|
||||||
|
// Used by traits that damage a single actor, rather than a position
|
||||||
|
if (target.Type == TargetType.Actor)
|
||||||
|
DoImpact(target.Actor, firedBy, firepowerModifier);
|
||||||
|
else
|
||||||
|
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void DoImpact(Actor target, Actor firedBy, float firepowerModifier);
|
||||||
|
public abstract void DoImpact(WPos pos, Actor firedBy, float firepowerModifier);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,16 +21,7 @@ namespace OpenRA.GameRules
|
|||||||
[Desc("Size of the area. Damage will be applied to this area.", "If two spreads are defined, the area of effect is a ring, where the second value is the inner radius.")]
|
[Desc("Size of the area. Damage will be applied to this area.", "If two spreads are defined, the area of effect is a ring, where the second value is the inner radius.")]
|
||||||
public readonly WRange[] Spread = { new WRange(43), WRange.Zero };
|
public readonly WRange[] Spread = { new WRange(43), WRange.Zero };
|
||||||
|
|
||||||
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
||||||
{
|
|
||||||
// Used by traits that damage a single actor, rather than a position
|
|
||||||
if (target.Type == TargetType.Actor)
|
|
||||||
DoImpact(target.Actor, firedBy, firepowerModifier);
|
|
||||||
else
|
|
||||||
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
|
||||||
{
|
{
|
||||||
var world = firedBy.World;
|
var world = firedBy.World;
|
||||||
var range = Spread[0];
|
var range = Spread[0];
|
||||||
@@ -42,7 +33,7 @@ namespace OpenRA.GameRules
|
|||||||
DoImpact(victim, firedBy, firepowerModifier);
|
DoImpact(victim, firedBy, firepowerModifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
||||||
{
|
{
|
||||||
if (IsValidAgainst(victim, firedBy))
|
if (IsValidAgainst(victim, firedBy))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,16 +21,7 @@ namespace OpenRA.GameRules
|
|||||||
[Desc("Size of the area. Damage will be applied to this area.")]
|
[Desc("Size of the area. Damage will be applied to this area.")]
|
||||||
public readonly int[] Size = { 0, 0 };
|
public readonly int[] Size = { 0, 0 };
|
||||||
|
|
||||||
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
||||||
{
|
|
||||||
// Used by traits that damage a single actor, rather than a position
|
|
||||||
if (target.Type == TargetType.Actor)
|
|
||||||
DoImpact(target.Actor, firedBy, firepowerModifier);
|
|
||||||
else
|
|
||||||
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
|
||||||
{
|
{
|
||||||
var world = firedBy.World;
|
var world = firedBy.World;
|
||||||
var targetTile = world.Map.CellContaining(pos);
|
var targetTile = world.Map.CellContaining(pos);
|
||||||
@@ -42,7 +33,7 @@ namespace OpenRA.GameRules
|
|||||||
DoImpact(victim, firedBy, firepowerModifier);
|
DoImpact(victim, firedBy, firepowerModifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
||||||
{
|
{
|
||||||
if (IsValidAgainst(victim, firedBy))
|
if (IsValidAgainst(victim, firedBy))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,16 +21,7 @@ namespace OpenRA.GameRules
|
|||||||
[Desc("For Normal DamageModel: Distance from the explosion center at which damage is 1/2.")]
|
[Desc("For Normal DamageModel: Distance from the explosion center at which damage is 1/2.")]
|
||||||
public readonly WRange Spread = new WRange(43);
|
public readonly WRange Spread = new WRange(43);
|
||||||
|
|
||||||
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
||||||
{
|
|
||||||
// Used by traits that damage a single actor, rather than a position
|
|
||||||
if (target.Type == TargetType.Actor)
|
|
||||||
DoImpact(target.Actor, firedBy, firepowerModifier);
|
|
||||||
else
|
|
||||||
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
|
|
||||||
{
|
{
|
||||||
var world = firedBy.World;
|
var world = firedBy.World;
|
||||||
var maxSpread = new WRange((int)(Spread.Range * (float)Math.Log(Math.Abs(Damage), 2)));
|
var maxSpread = new WRange((int)(Spread.Range * (float)Math.Log(Math.Abs(Damage), 2)));
|
||||||
@@ -44,7 +35,7 @@ namespace OpenRA.GameRules
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier)
|
||||||
{
|
{
|
||||||
if (IsValidAgainst(victim, firedBy))
|
if (IsValidAgainst(victim, firedBy))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user