Introduce WarheadArgs
- Passes additional arguments to warheads on impact - Uses that to reduce parameter count of DoImpact by 1
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.GameRules;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Graphics;
|
||||
@@ -231,7 +232,13 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
foreach (var a in actors)
|
||||
{
|
||||
var adjustedModifiers = args.DamageModifiers.Append(GetFalloff((args.Source - a.CenterPosition).Length));
|
||||
args.Weapon.Impact(Target.FromActor(a), args.SourceActor, adjustedModifiers);
|
||||
|
||||
var warheadArgs = new WarheadArgs(args)
|
||||
{
|
||||
DamageModifiers = adjustedModifiers.ToArray(),
|
||||
};
|
||||
|
||||
args.Weapon.Impact(Target.FromActor(a), warheadArgs);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -280,7 +280,7 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
|
||||
world.AddFrameEndTask(w => w.Remove(this));
|
||||
|
||||
args.Weapon.Impact(Target.FromPos(pos), args.SourceActor, args.DamageModifiers);
|
||||
args.Weapon.Impact(Target.FromPos(pos), new WarheadArgs(args));
|
||||
}
|
||||
|
||||
bool AnyValidTargetsInRadius(World world, WPos pos, WDist radius, Actor firedBy, bool checkTargetType)
|
||||
|
||||
@@ -89,7 +89,8 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
{
|
||||
pos += new WVec(0, 0, args.PassiveTarget.Z - pos.Z);
|
||||
world.AddFrameEndTask(w => w.Remove(this));
|
||||
args.Weapon.Impact(Target.FromPos(pos), args.SourceActor, args.DamageModifiers);
|
||||
|
||||
args.Weapon.Impact(Target.FromPos(pos), new WarheadArgs(args));
|
||||
}
|
||||
|
||||
if (anim != null)
|
||||
|
||||
@@ -78,7 +78,7 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
target = Target.FromPos(blockedPos);
|
||||
}
|
||||
|
||||
args.Weapon.Impact(target, args.SourceActor, args.DamageModifiers);
|
||||
args.Weapon.Impact(target, new WarheadArgs(args));
|
||||
world.AddFrameEndTask(w => w.Remove(this));
|
||||
}
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
|
||||
if (ticks < info.DamageDuration && --interval <= 0)
|
||||
{
|
||||
args.Weapon.Impact(Target.FromPos(target), args.SourceActor, args.DamageModifiers);
|
||||
args.Weapon.Impact(Target.FromPos(target), new WarheadArgs(args));
|
||||
interval = info.DamageInterval;
|
||||
}
|
||||
|
||||
|
||||
@@ -891,7 +891,7 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
if (ticks <= info.Arm)
|
||||
return;
|
||||
|
||||
args.Weapon.Impact(Target.FromPos(pos), args.SourceActor, args.DamageModifiers);
|
||||
args.Weapon.Impact(Target.FromPos(pos), new WarheadArgs(args));
|
||||
}
|
||||
|
||||
public IEnumerable<IRenderable> Render(WorldRenderer wr)
|
||||
|
||||
@@ -140,7 +140,17 @@ namespace OpenRA.Mods.Common.Effects
|
||||
if (detonated)
|
||||
return;
|
||||
|
||||
weapon.Impact(Target.FromPos(pos), firedBy.PlayerActor, Enumerable.Empty<int>());
|
||||
var target = Target.FromPos(pos);
|
||||
var warheadArgs = new WarheadArgs
|
||||
{
|
||||
Weapon = weapon,
|
||||
Source = target.CenterPosition,
|
||||
SourceActor = firedBy.PlayerActor,
|
||||
WeaponTarget = target
|
||||
};
|
||||
|
||||
weapon.Impact(target, warheadArgs);
|
||||
|
||||
world.WorldActor.Trait<ScreenShaker>().AddEffect(20, pos, 5);
|
||||
|
||||
foreach (var flash in world.WorldActor.TraitsImplementing<FlashPaletteEffect>())
|
||||
|
||||
@@ -188,12 +188,12 @@ namespace OpenRA.Mods.Common.Projectiles
|
||||
animationComplete = true;
|
||||
|
||||
if (!info.DamageActorsInLine)
|
||||
args.Weapon.Impact(Target.FromPos(target), args.SourceActor, args.DamageModifiers);
|
||||
args.Weapon.Impact(Target.FromPos(target), new WarheadArgs(args));
|
||||
else
|
||||
{
|
||||
var actors = world.FindActorsOnLine(args.Source, target, info.BeamWidth);
|
||||
foreach (var a in actors)
|
||||
args.Weapon.Impact(Target.FromActor(a), args.SourceActor, args.DamageModifiers);
|
||||
args.Weapon.Impact(Target.FromActor(a), new WarheadArgs(args));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user