Made Turreted PausableConditional

This commit is contained in:
TheChosenEvilOne
2018-11-09 19:27:40 +02:00
committed by reaperrr
parent 1af9efe246
commit e01953afa3

View File

@@ -17,7 +17,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
public class TurretedInfo : ITraitInfo, UsesInit<TurretFacingInit>, Requires<BodyOrientationInfo>, IActorPreviewInitInfo
public class TurretedInfo : PausableConditionalTraitInfo, UsesInit<TurretFacingInit>, Requires<BodyOrientationInfo>, IActorPreviewInitInfo
{
public readonly string Turret = "primary";
[Desc("Speed at which the turret turns.")]
@@ -41,12 +41,11 @@ namespace OpenRA.Mods.Common.Traits
yield return new TurretFacingInit(PreviewFacing);
}
public virtual object Create(ActorInitializer init) { return new Turreted(init, this); }
public override object Create(ActorInitializer init) { return new Turreted(init, this); }
}
public class Turreted : ITick, ISync, INotifyCreated, IDeathActorInitModifier, IActorPreviewInitModifier
public class Turreted : PausableConditionalTrait<TurretedInfo>, ITick, IDeathActorInitModifier, IActorPreviewInitModifier
{
public readonly TurretedInfo Info;
AttackTurreted attack;
IFacing facing;
BodyOrientation body;
@@ -97,13 +96,14 @@ namespace OpenRA.Mods.Common.Traits
}
public Turreted(ActorInitializer init, TurretedInfo info)
: base(info)
{
Info = info;
TurretFacing = TurretFacingFromInit(init, Info.InitialFacing, Info.Turret)();
}
void INotifyCreated.Created(Actor self)
protected override void Created(Actor self)
{
base.Created(self);
attack = self.TraitsImplementing<AttackTurreted>().SingleOrDefault(at => ((AttackTurretedInfo)at.Info).Turrets.Contains(Info.Turret));
facing = self.TraitOrDefault<IFacing>();
body = self.Trait<BodyOrientation>();
@@ -116,6 +116,9 @@ namespace OpenRA.Mods.Common.Traits
protected virtual void Tick(Actor self)
{
if (IsTraitDisabled)
return;
// NOTE: FaceTarget is called in AttackTurreted.CanAttack if the turret has a target.
if (attack != null)
{
@@ -145,7 +148,7 @@ namespace OpenRA.Mods.Common.Traits
public bool FaceTarget(Actor self, Target target)
{
if (attack == null || attack.IsTraitDisabled || attack.IsTraitPaused)
if (IsTraitDisabled || IsTraitPaused || attack == null || attack.IsTraitDisabled || attack.IsTraitPaused)
return false;
var pos = self.CenterPosition;
@@ -158,6 +161,9 @@ namespace OpenRA.Mods.Common.Traits
public void StopAiming(Actor self)
{
if (IsTraitDisabled)
return;
if (attack != null && attack.IsAiming)
attack.OnStopOrder(self);
}
@@ -223,6 +229,18 @@ namespace OpenRA.Mods.Common.Traits
var facingOffset = TurretFacing - bodyFacing();
facings.Value(self.World).Add(Name, () => bodyFacing() + facingOffset);
}
protected override void TraitDisabled(Actor self)
{
if (attack != null && attack.IsAiming)
attack.OnStopOrder(self);
}
protected override void TraitResumed(Actor self)
{
if (attack != null)
FaceTarget(self, attack.Target);
}
}
public class TurretFacingInit : IActorInit<int>