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
|
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";
|
public readonly string Turret = "primary";
|
||||||
[Desc("Speed at which the turret turns.")]
|
[Desc("Speed at which the turret turns.")]
|
||||||
@@ -41,12 +41,11 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
yield return new TurretFacingInit(PreviewFacing);
|
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;
|
AttackTurreted attack;
|
||||||
IFacing facing;
|
IFacing facing;
|
||||||
BodyOrientation body;
|
BodyOrientation body;
|
||||||
@@ -97,13 +96,14 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Turreted(ActorInitializer init, TurretedInfo info)
|
public Turreted(ActorInitializer init, TurretedInfo info)
|
||||||
|
: base(info)
|
||||||
{
|
{
|
||||||
Info = info;
|
|
||||||
TurretFacing = TurretFacingFromInit(init, Info.InitialFacing, Info.Turret)();
|
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));
|
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>();
|
||||||
@@ -116,6 +116,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
protected virtual void Tick(Actor self)
|
protected virtual void Tick(Actor self)
|
||||||
{
|
{
|
||||||
|
if (IsTraitDisabled)
|
||||||
|
return;
|
||||||
|
|
||||||
// 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)
|
||||||
{
|
{
|
||||||
@@ -145,7 +148,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public bool FaceTarget(Actor self, Target target)
|
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;
|
return false;
|
||||||
|
|
||||||
var pos = self.CenterPosition;
|
var pos = self.CenterPosition;
|
||||||
@@ -158,6 +161,9 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public void StopAiming(Actor self)
|
public void StopAiming(Actor self)
|
||||||
{
|
{
|
||||||
|
if (IsTraitDisabled)
|
||||||
|
return;
|
||||||
|
|
||||||
if (attack != null && attack.IsAiming)
|
if (attack != null && attack.IsAiming)
|
||||||
attack.OnStopOrder(self);
|
attack.OnStopOrder(self);
|
||||||
}
|
}
|
||||||
@@ -223,6 +229,18 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
var facingOffset = TurretFacing - bodyFacing();
|
var facingOffset = TurretFacing - bodyFacing();
|
||||||
facings.Value(self.World).Add(Name, () => bodyFacing() + facingOffset);
|
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>
|
public class TurretFacingInit : IActorInit<int>
|
||||||
|
|||||||
Reference in New Issue
Block a user