Made Turreted PausableConditional
This commit is contained in:
committed by
reaperrr
parent
1af9efe246
commit
e01953afa3
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user