Allow queueing up scatter and move Nudge to an activity

This commit is contained in:
Gustas
2022-12-02 00:31:07 +02:00
committed by Matthias Mailänder
parent 54dac39e83
commit 3ab421cbe3
8 changed files with 86 additions and 41 deletions

View File

@@ -283,7 +283,7 @@ namespace OpenRA.Mods.Common.Traits
public bool ForceLanding { get; private set; }
(CPos, SubCell)[] landingCells = Array.Empty<(CPos, SubCell)>();
bool requireForceMove;
public bool RequireForceMove;
readonly int creationActivityDelay;
@@ -354,7 +354,7 @@ namespace OpenRA.Mods.Common.Traits
void RequireForceMoveConditionChanged(Actor self, IReadOnlyDictionary<string, int> conditions)
{
requireForceMove = Info.RequireForceMoveCondition.Evaluate(conditions);
RequireForceMove = Info.RequireForceMoveCondition.Evaluate(conditions);
}
protected override void Created(Actor self)
@@ -586,7 +586,7 @@ namespace OpenRA.Mods.Common.Traits
bool AircraftCanEnter(Actor a, TargetModifiers modifiers)
{
if (requireForceMove && !modifiers.HasModifier(TargetModifiers.ForceMove))
if (RequireForceMove && !modifiers.HasModifier(TargetModifiers.ForceMove))
return false;
return AircraftCanEnter(a);
@@ -1144,29 +1144,14 @@ namespace OpenRA.Mods.Common.Traits
self.ShowTargetLines();
}
else if (orderString == "Scatter")
Nudge(self);
{
self.QueueActivity(order.Queued, new Nudge(self));
self.ShowTargetLines();
}
}
#endregion
void Nudge(Actor self)
{
if (IsTraitDisabled || IsTraitPaused || requireForceMove)
return;
// Disable nudging if the aircraft is outside the map
if (!self.World.Map.Contains(self.Location))
return;
var offset = new WVec(0, -self.World.SharedRandom.Next(512, 2048), 0)
.Rotate(WRot.FromFacing(self.World.SharedRandom.Next(256)));
var target = Target.FromPos(self.CenterPosition + offset);
self.QueueActivity(false, new Fly(self, target));
self.ShowTargetLines();
UnReserve();
}
#region Airborne conditions
void OnAirborneAltitudeReached()
@@ -1295,7 +1280,7 @@ namespace OpenRA.Mods.Common.Traits
public virtual bool CanTarget(Actor self, in Target target, ref TargetModifiers modifiers, ref string cursor)
{
if (target.Type != TargetType.Terrain || (aircraft.requireForceMove && !modifiers.HasModifier(TargetModifiers.ForceMove)))
if (target.Type != TargetType.Terrain || (aircraft.RequireForceMove && !modifiers.HasModifier(TargetModifiers.ForceMove)))
return false;
var location = self.World.Map.CellContaining(target.CenterPosition);