Replace turret IsDisabled check with AT.IsTraitDisabled check

This commit is contained in:
reaperrr
2017-10-17 16:37:35 +02:00
committed by Pavel Penev
parent cea2658f31
commit 68487d1197
2 changed files with 23 additions and 18 deletions

View File

@@ -17,6 +17,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Actor has a visual turret used to attack.")] [Desc("Actor has a visual turret used to attack.")]
public class AttackTurretedInfo : AttackFollowInfo, Requires<TurretedInfo> public class AttackTurretedInfo : AttackFollowInfo, Requires<TurretedInfo>
{ {
[Desc("Turret names")]
public readonly string[] Turrets = { "primary" };
public override object Create(ActorInitializer init) { return new AttackTurreted(init.Self, this); } public override object Create(ActorInitializer init) { return new AttackTurreted(init.Self, this); }
} }
@@ -27,7 +30,7 @@ namespace OpenRA.Mods.Common.Traits
public AttackTurreted(Actor self, AttackTurretedInfo info) public AttackTurreted(Actor self, AttackTurretedInfo info)
: base(self, info) : base(self, info)
{ {
turrets = self.TraitsImplementing<Turreted>().ToArray(); turrets = self.TraitsImplementing<Turreted>().Where(t => info.Turrets.Contains(t.Info.Turret)).ToArray();
} }
protected override bool CanAttack(Actor self, Target target) protected override bool CanAttack(Actor self, Target target)

View File

@@ -11,6 +11,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using OpenRA.Primitives; using OpenRA.Primitives;
using OpenRA.Traits; using OpenRA.Traits;
@@ -42,7 +43,7 @@ namespace OpenRA.Mods.Common.Traits
public class Turreted : ITick, ISync, INotifyCreated, IDeathActorInitModifier, IActorPreviewInitModifier public class Turreted : ITick, ISync, INotifyCreated, IDeathActorInitModifier, IActorPreviewInitModifier
{ {
readonly TurretedInfo info; public readonly TurretedInfo Info;
AttackTurreted attack; AttackTurreted attack;
IFacing facing; IFacing facing;
BodyOrientation body; BodyOrientation body;
@@ -55,8 +56,8 @@ namespace OpenRA.Mods.Common.Traits
// For subclasses that want to move the turret relative to the body // For subclasses that want to move the turret relative to the body
protected WVec localOffset = WVec.Zero; protected WVec localOffset = WVec.Zero;
public WVec Offset { get { return info.Offset + localOffset; } } public WVec Offset { get { return Info.Offset + localOffset; } }
public string Name { get { return info.Turret; } } public string Name { get { return Info.Turret; } }
public static Func<int> TurretFacingFromInit(IActorInitializer init, int def, string turret = null) public static Func<int> TurretFacingFromInit(IActorInitializer init, int def, string turret = null)
{ {
@@ -94,13 +95,13 @@ namespace OpenRA.Mods.Common.Traits
public Turreted(ActorInitializer init, TurretedInfo info) public Turreted(ActorInitializer init, TurretedInfo info)
{ {
this.info = info; Info = info;
TurretFacing = TurretFacingFromInit(init, info.InitialFacing, info.Turret)(); TurretFacing = TurretFacingFromInit(init, Info.InitialFacing, Info.Turret)();
} }
void INotifyCreated.Created(Actor self) void INotifyCreated.Created(Actor self)
{ {
attack = self.TraitOrDefault<AttackTurreted>(); attack = self.TraitsImplementing<AttackTurreted>().SingleOrDefault(at => ((AttackTurretedInfo)at.Info).Turrets.Contains(Info.Turret));
facing = self.TraitOrDefault<IFacing>(); facing = self.TraitOrDefault<IFacing>();
body = self.Trait<BodyOrientation>(); body = self.Trait<BodyOrientation>();
} }
@@ -115,16 +116,17 @@ namespace OpenRA.Mods.Common.Traits
// NOTE: FaceTarget is called in AttackTurreted.CanAttack if the turret has a target. // NOTE: FaceTarget is called in AttackTurreted.CanAttack if the turret has a target.
if (attack != null) if (attack != null)
{ {
if (!attack.IsAttacking) // Only realign while not attacking anything
{ if (attack.IsAttacking)
if (realignTick < info.RealignDelay) return;
if (realignTick < Info.RealignDelay)
realignTick++; realignTick++;
else if (info.RealignDelay > -1) else if (Info.RealignDelay > -1)
DesiredFacing = null; DesiredFacing = null;
MoveTurret(); MoveTurret();
} }
}
else else
{ {
realignTick = 0; realignTick = 0;
@@ -135,16 +137,16 @@ namespace OpenRA.Mods.Common.Traits
void MoveTurret() void MoveTurret()
{ {
var df = DesiredFacing ?? (facing != null ? facing.Facing : TurretFacing); var df = DesiredFacing ?? (facing != null ? facing.Facing : TurretFacing);
TurretFacing = Util.TickFacing(TurretFacing, df, info.TurnSpeed); TurretFacing = Util.TickFacing(TurretFacing, df, Info.TurnSpeed);
} }
public bool FaceTarget(Actor self, Target target) public bool FaceTarget(Actor self, Target target)
{ {
if (self.IsDisabled()) if (attack == null || attack.IsTraitDisabled)
return false; return false;
var pos = self.CenterPosition; var pos = self.CenterPosition;
var targetPos = attack != null ? attack.GetTargetPosition(pos, target) : target.CenterPosition; var targetPos = attack.GetTargetPosition(pos, target);
var delta = targetPos - pos; var delta = targetPos - pos;
DesiredFacing = delta.HorizontalLengthSquared != 0 ? delta.Yaw.Facing : TurretFacing; DesiredFacing = delta.HorizontalLengthSquared != 0 ? delta.Yaw.Facing : TurretFacing;
MoveTurret(); MoveTurret();