diff --git a/OpenRA.Mods.Common/Traits/Render/WithTurretAimAnimation.cs b/OpenRA.Mods.Common/Traits/Render/WithTurretAimAnimation.cs index 5abe658248..9fa8ddbaf8 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithTurretAimAnimation.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithTurretAimAnimation.cs @@ -14,7 +14,7 @@ using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits.Render { - public class WithTurretAimAnimationInfo : ITraitInfo, Requires, Requires, Requires + public class WithTurretAimAnimationInfo : ConditionalTraitInfo, Requires, Requires, Requires { [Desc("Armament name")] public readonly string Armament = "primary"; @@ -28,19 +28,27 @@ namespace OpenRA.Mods.Common.Traits.Render [Desc("Shown while reloading.")] [SequenceReference(null, true)] public readonly string ReloadPrefix = null; - public object Create(ActorInitializer init) { return new WithTurretAimAnimation(init, this); } + public override object Create(ActorInitializer init) { return new WithTurretAimAnimation(init, this); } + + public override void RulesetLoaded(Ruleset rules, ActorInfo ai) + { + var turretAttackAnim = ai.TraitInfos().Any(t => t.Turret == Turret); + if (turretAttackAnim) + throw new YamlException("WithTurretAimAnimation is currently not compatible with WithTurretAttackAnimation."); + + base.RulesetLoaded(rules, ai); + } } - public class WithTurretAimAnimation : ITick + public class WithTurretAimAnimation : ConditionalTrait, ITick { - readonly WithTurretAimAnimationInfo info; readonly AttackBase attack; readonly Armament armament; readonly WithSpriteTurret wst; public WithTurretAimAnimation(ActorInitializer init, WithTurretAimAnimationInfo info) + : base(info) { - this.info = info; attack = init.Self.Trait(); armament = init.Self.TraitsImplementing() .Single(a => a.Info.Name == info.Armament); @@ -50,14 +58,14 @@ namespace OpenRA.Mods.Common.Traits.Render void ITick.Tick(Actor self) { - if (string.IsNullOrEmpty(info.Sequence) && string.IsNullOrEmpty(info.ReloadPrefix)) + if (IsTraitDisabled) return; var sequence = wst.Info.Sequence; - if (!string.IsNullOrEmpty(info.Sequence) && attack.IsAiming) - sequence = info.Sequence; + if (!string.IsNullOrEmpty(Info.Sequence) && attack.IsAiming) + sequence = Info.Sequence; - var prefix = (armament.IsReloading && !string.IsNullOrEmpty(info.ReloadPrefix)) ? info.ReloadPrefix : ""; + var prefix = (armament.IsReloading && !string.IsNullOrEmpty(Info.ReloadPrefix)) ? Info.ReloadPrefix : ""; if (!string.IsNullOrEmpty(prefix) && sequence != (prefix + sequence)) sequence = prefix + sequence;