Merge pull request #6510 from pchote/fix-inaccuracy-crash

Move inaccuracy modifier queries outside the projectile ctors.
This commit is contained in:
obrakmann
2014-09-20 12:24:57 +02:00
5 changed files with 9 additions and 6 deletions

View File

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

View File

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

View File

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

View File

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

View File

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