Skip to content

Commit

Permalink
Add Type support for Firepower and Reload Multipliers.
Browse files Browse the repository at this point in the history
  • Loading branch information
MustaphaTR committed Sep 26, 2017
1 parent 7a2aad4 commit c32b759
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 10 deletions.
4 changes: 2 additions & 2 deletions OpenRA.Mods.Common/Traits/Armament.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ protected override void Created(Actor self)
notifyAttacks = self.TraitsImplementing<INotifyAttack>().ToArray();

rangeModifiers = self.TraitsImplementing<IRangeModifier>().ToArray().Select(m => m.GetRangeModifier());
reloadModifiers = self.TraitsImplementing<IReloadModifier>().ToArray().Select(m => m.GetReloadModifier());
damageModifiers = self.TraitsImplementing<IFirepowerModifier>().ToArray().Select(m => m.GetFirepowerModifier());
reloadModifiers = self.TraitsImplementing<IReloadModifier>().ToArray().Select(m => m.GetReloadModifier(Info.Name));
damageModifiers = self.TraitsImplementing<IFirepowerModifier>().ToArray().Select(m => m.GetFirepowerModifier(Info.Name));
inaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>().ToArray().Select(m => m.GetInaccuracyModifier());

base.Created(self);
Expand Down
7 changes: 6 additions & 1 deletion OpenRA.Mods.Common/Traits/Multipliers/FirepowerMultiplier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public class FirepowerMultiplierInfo : ConditionalTraitInfo
[Desc("Percentage modifier to apply.")]
public readonly int Modifier = 100;

public readonly string Type = "primary";

public override object Create(ActorInitializer init) { return new FirepowerMultiplier(this); }
}

Expand All @@ -26,6 +28,9 @@ public class FirepowerMultiplier : ConditionalTrait<FirepowerMultiplierInfo>, IF
public FirepowerMultiplier(FirepowerMultiplierInfo info)
: base(info) { }

int IFirepowerModifier.GetFirepowerModifier() { return IsTraitDisabled ? 100 : Info.Modifier; }
int IFirepowerModifier.GetFirepowerModifier(string ArmamentName)
{
return IsTraitDisabled || ArmamentName != Info.Type ? 100 : Info.Modifier;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ public class ReloadDelayMultiplierInfo : ConditionalTraitInfo
[Desc("Percentage modifier to apply.")]
public readonly int Modifier = 100;

public readonly string Type = "primary";

public override object Create(ActorInitializer init) { return new ReloadDelayMultiplier(this); }
}

Expand All @@ -26,6 +28,9 @@ public class ReloadDelayMultiplier : ConditionalTrait<ReloadDelayMultiplierInfo>
public ReloadDelayMultiplier(ReloadDelayMultiplierInfo info)
: base(info) { }

int IReloadModifier.GetReloadModifier() { return IsTraitDisabled ? 100 : Info.Modifier; }
int IReloadModifier.GetReloadModifier(string ArmamentName)
{
return IsTraitDisabled || ArmamentName != Info.Type ? 100 : Info.Modifier;
}
}
}
4 changes: 3 additions & 1 deletion OpenRA.Mods.Common/Traits/ThrowsShrapnel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ public class ThrowsShrapnelInfo : ITraitInfo, IRulesetLoaded
[Desc("The weapons used for shrapnel.")]
public readonly string[] Weapons = { };

public readonly string WeaponName = "primary";

[Desc("The amount of pieces of shrapnel to expel. Two values indicate a range.")]
public readonly int[] Pieces = { 3, 10 };

Expand Down Expand Up @@ -62,7 +64,7 @@ public void Killed(Actor self, AttackInfo attack)
Facing = self.World.SharedRandom.Next(-1, 255),

DamageModifiers = self.TraitsImplementing<IFirepowerModifier>()
.Select(a => a.GetFirepowerModifier()).ToArray(),
.Select(a => a.GetFirepowerModifier(info.WeaponName)).ToArray(),

InaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>()
.Select(a => a.GetInaccuracyModifier()).ToArray(),
Expand Down
4 changes: 2 additions & 2 deletions OpenRA.Mods.Common/TraitsInterfaces.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,10 +244,10 @@ public interface IDamageModifier { int GetDamageModifier(Actor attacker, Damage
public interface ISpeedModifier { int GetSpeedModifier(); }

[RequireExplicitImplementation]
public interface IFirepowerModifier { int GetFirepowerModifier(); }
public interface IFirepowerModifier { int GetFirepowerModifier(string ArmamentName); }

[RequireExplicitImplementation]
public interface IReloadModifier { int GetReloadModifier(); }
public interface IReloadModifier { int GetReloadModifier(string ArmamentName); }

[RequireExplicitImplementation]
public interface IInaccuracyModifier { int GetInaccuracyModifier(); }
Expand Down
4 changes: 3 additions & 1 deletion OpenRA.Mods.D2k/Traits/SpiceBloom.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ public class SpiceBloomInfo : ITraitInfo, IRenderActorPreviewSpritesInfo, Requir
[WeaponReference]
public readonly string Weapon = null;

public readonly string WeaponName = "primary";

[Desc("The amount of spice to expel.")]
public readonly int[] Pieces = { 2, 12 };

Expand Down Expand Up @@ -139,7 +141,7 @@ void SeedResources(Actor self)
Facing = 0,

DamageModifiers = self.TraitsImplementing<IFirepowerModifier>()
.Select(a => a.GetFirepowerModifier()).ToArray(),
.Select(a => a.GetFirepowerModifier(info.WeaponName)).ToArray(),

InaccuracyModifiers = self.TraitsImplementing<IInaccuracyModifier>()
.Select(a => a.GetInaccuracyModifier()).ToArray(),
Expand Down
6 changes: 4 additions & 2 deletions OpenRA.Mods.Gen/Traits/ExplodeWeapon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public class ExplodeWeaponInfo : ConditionalTraitInfo, IRulesetLoaded
[Desc("Has to be defined in weapons.yaml as well.")]
public readonly string Weapon = null;

public readonly string WeaponName = "primary";

public readonly bool ResetReloadWhenEnabled = true;

public WeaponInfo WeaponInfo { get; private set; }
Expand Down Expand Up @@ -78,7 +80,7 @@ void ITick.Tick(Actor self)
: info.LocalOffset;

weapon.Impact(Target.FromPos(self.CenterPosition + localoffset), self,
self.TraitsImplementing<IFirepowerModifier>().Select(a => a.GetFirepowerModifier()).ToArray());
self.TraitsImplementing<IFirepowerModifier>().Select(a => a.GetFirepowerModifier(info.WeaponName)).ToArray());

if (weapon.Report != null && weapon.Report.Any())
Game.Sound.Play(SoundType.World, weapon.Report.Random(self.World.SharedRandom), self.CenterPosition);
Expand All @@ -88,7 +90,7 @@ void ITick.Tick(Actor self)
else
{
var modifiers = self.TraitsImplementing<IReloadModifier>()
.Select(m => m.GetReloadModifier());
.Select(m => m.GetReloadModifier(info.WeaponName));
fireDelay = Util.ApplyPercentageModifiers(weapon.ReloadDelay, modifiers);
burst = weapon.Burst;
}
Expand Down

0 comments on commit c32b759

Please sign in to comment.