Introduce WarheadArgs

- Passes additional arguments to warheads on impact
- Uses that to reduce parameter count of DoImpact by 1
This commit is contained in:
reaperrr
2019-05-12 23:29:35 +02:00
committed by teinarss
parent fdc0a6e2b9
commit 6220d7e62e
31 changed files with 127 additions and 44 deletions

View File

@@ -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);
}
}

View File

@@ -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)

View File

@@ -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)

View File

@@ -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));
}

View File

@@ -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;
}

View File

@@ -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)

View File

@@ -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>())

View File

@@ -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));
}
}