Move inaccuracy modifier queries outside the projectile ctors. Fixes #6449.

This commit is contained in:
Paul Chote
2014-09-20 12:00:32 +12:00
parent 6c399e50a8
commit caecf2d82a
5 changed files with 9 additions and 6 deletions

View File

@@ -20,6 +20,7 @@ namespace OpenRA.GameRules
{ {
public WeaponInfo Weapon; public WeaponInfo Weapon;
public IEnumerable<int> DamageModifiers; public IEnumerable<int> DamageModifiers;
public IEnumerable<int> InaccuracyModifiers;
public int Facing; public int Facing;
public WPos Source; public WPos Source;
public Actor SourceActor; public Actor SourceActor;

View File

@@ -52,6 +52,9 @@ namespace OpenRA.Mods.D2k
DamageModifiers = self.TraitsImplementing<IFirepowerModifier>() DamageModifiers = self.TraitsImplementing<IFirepowerModifier>()
.Select(a => a.GetFirepowerModifier()), .Select(a => a.GetFirepowerModifier()),
InaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>()
.Select(a => a.GetInaccuracyModifier()),
Source = self.CenterPosition, Source = self.CenterPosition,
SourceActor = self, SourceActor = self,
PassiveTarget = self.CenterPosition + new WVec(range, 0, 0).Rotate(rotation) PassiveTarget = self.CenterPosition + new WVec(range, 0, 0).Rotate(rotation)

View File

@@ -157,6 +157,9 @@ namespace OpenRA.Mods.RA
DamageModifiers = self.TraitsImplementing<IFirepowerModifier>() DamageModifiers = self.TraitsImplementing<IFirepowerModifier>()
.Select(a => a.GetFirepowerModifier()), .Select(a => a.GetFirepowerModifier()),
InaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>()
.Select(a => a.GetInaccuracyModifier()),
Source = muzzlePosition, Source = muzzlePosition,
SourceActor = self, SourceActor = self,
PassiveTarget = target.CenterPosition, PassiveTarget = target.CenterPosition,

View File

@@ -82,9 +82,7 @@ namespace OpenRA.Mods.RA.Effects
target = args.PassiveTarget; target = args.PassiveTarget;
if (info.Inaccuracy.Range > 0) if (info.Inaccuracy.Range > 0)
{ {
var modifiers = args.SourceActor.TraitsImplementing<IInaccuracyModifier>() var inaccuracy = Traits.Util.ApplyPercentageModifiers(info.Inaccuracy.Range, args.InaccuracyModifiers);
.Select(m => m.GetInaccuracyModifier());
var inaccuracy = Traits.Util.ApplyPercentageModifiers(info.Inaccuracy.Range, modifiers);
var maxOffset = inaccuracy * (target - pos).Length / args.Weapon.Range.Range; var maxOffset = inaccuracy * (target - pos).Length / args.Weapon.Range.Range;
target += WVec.FromPDF(world.SharedRandom, 2) * maxOffset / 1024; target += WVec.FromPDF(world.SharedRandom, 2) * maxOffset / 1024;
} }

View File

@@ -96,9 +96,7 @@ namespace OpenRA.Mods.RA.Effects
if (info.Inaccuracy.Range > 0) if (info.Inaccuracy.Range > 0)
{ {
var modifiers = args.SourceActor.TraitsImplementing<IInaccuracyModifier>() var inaccuracy = Traits.Util.ApplyPercentageModifiers(info.Inaccuracy.Range, args.InaccuracyModifiers);
.Select(m => m.GetInaccuracyModifier());
var inaccuracy = Traits.Util.ApplyPercentageModifiers(info.Inaccuracy.Range, modifiers);
offset = WVec.FromPDF(world.SharedRandom, 2) * inaccuracy / 1024; offset = WVec.FromPDF(world.SharedRandom, 2) * inaccuracy / 1024;
} }