Add missing self and optional pretick parameters to Queue, QueueChild and PrintActivity methods.

This means sequenceActivities needs to accept self as well.
This commit is contained in:
tovl
2019-02-27 23:24:45 +01:00
committed by Paul Chote
parent 69004f2b94
commit 8191a6566b
32 changed files with 82 additions and 101 deletions

View File

@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Activities
// If all valid weapons have depleted their ammo and Rearmable trait exists, return to RearmActor to reload and then resume the activity
if (rearmable != null && !useLastVisibleTarget && attackAircraft.Armaments.All(x => x.IsTraitPaused || !x.Weapon.IsValidAgainst(target, self.World, self)))
return ActivityUtils.SequenceActivities(new ReturnToBase(self, aircraft.Info.AbortOnResupply), this);
return ActivityUtils.SequenceActivities(self, new ReturnToBase(self, aircraft.Info.AbortOnResupply), this);
var pos = self.CenterPosition;
var checkTarget = useLastVisibleTarget ? lastVisibleTarget : target;
@@ -90,7 +90,7 @@ namespace OpenRA.Mods.Common.Activities
return NextActivity;
// Fly towards the last known position
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
new Fly(self, target, WDist.Zero, lastVisibleMaximumRange, checkTarget.CenterPosition, Color.Red),
this);
}
@@ -103,18 +103,18 @@ namespace OpenRA.Mods.Common.Activities
{
// TODO: This should fire each weapon at its maximum range
if (attackAircraft != null && target.IsInRange(self.CenterPosition, attackAircraft.GetMinimumRange()))
ChildActivity = ActivityUtils.SequenceActivities(
ChildActivity = ActivityUtils.SequenceActivities(self,
new FlyTimed(ticksUntilTurn, self),
new Fly(self, target, checkTarget.CenterPosition, Color.Red),
new FlyTimed(ticksUntilTurn, self));
else
ChildActivity = ActivityUtils.SequenceActivities(
ChildActivity = ActivityUtils.SequenceActivities(self,
new Fly(self, target, checkTarget.CenterPosition, Color.Red),
new FlyTimed(ticksUntilTurn, self));
// HACK: This needs to be done in this round-about way because TakeOff doesn't behave as expected when it doesn't have a NextActivity.
if (self.World.Map.DistanceAboveTerrain(self.CenterPosition).Length < aircraft.Info.MinAirborneAltitude)
ChildActivity = ActivityUtils.SequenceActivities(new TakeOff(self), ChildActivity);
ChildActivity = ActivityUtils.SequenceActivities(self, new TakeOff(self), ChildActivity);
}
ActivityUtils.RunActivity(self, ChildActivity);

View File

@@ -89,7 +89,7 @@ namespace OpenRA.Mods.Common.Activities
}
wasMovingWithinRange = true;
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
aircraft.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, targetLineColor),
this);
}

View File

@@ -75,7 +75,7 @@ namespace OpenRA.Mods.Common.Activities
// If all valid weapons have depleted their ammo and Rearmable trait exists, return to RearmActor to reload and then resume the activity
if (rearmable != null && !useLastVisibleTarget && attackAircraft.Armaments.All(x => x.IsTraitPaused || !x.Weapon.IsValidAgainst(target, self.World, self)))
return ActivityUtils.SequenceActivities(new HeliReturnToBase(self, aircraft.Info.AbortOnResupply), this);
return ActivityUtils.SequenceActivities(self, new HeliReturnToBase(self, aircraft.Info.AbortOnResupply), this);
var pos = self.CenterPosition;
var checkTarget = useLastVisibleTarget ? lastVisibleTarget : target;

View File

@@ -61,7 +61,7 @@ namespace OpenRA.Mods.Common.Activities
if (nearestResupplier == null && aircraft.Info.LandWhenIdle)
{
if (aircraft.Info.TurnToLand)
return ActivityUtils.SequenceActivities(new Turn(self, initialFacing), new HeliLand(self, true));
return ActivityUtils.SequenceActivities(self, new Turn(self, initialFacing), new HeliLand(self, true));
return new HeliLand(self, true);
}
@@ -79,7 +79,7 @@ namespace OpenRA.Mods.Common.Activities
var target = Target.FromPos(nearestResupplier.CenterPosition + randomPosition);
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
new HeliFly(self, target, WDist.Zero, aircraft.Info.WaitDistanceFromResupplyBase, targetLineColor: Color.Green),
this);
}
@@ -109,7 +109,7 @@ namespace OpenRA.Mods.Common.Activities
else
landingProcedures.Add(NextActivity);
return ActivityUtils.SequenceActivities(landingProcedures.ToArray());
return ActivityUtils.SequenceActivities(self, landingProcedures.ToArray());
}
bool ShouldLandAtBuilding(Actor self, Actor dest)

View File

@@ -30,19 +30,15 @@ namespace OpenRA.Mods.Common.Activities
if (!aircraft.Info.TakeOffOnResupply)
{
ChildActivity = ActivityUtils.SequenceActivities(
aircraft.GetResupplyActivities(host)
.Append(new AllowYieldingReservation(self))
.Append(new WaitFor(() => NextInQueue != null || aircraft.ReservedActor == null))
.ToArray());
ChildActivity = ActivityUtils.SequenceActivities(self, aircraft.GetResupplyActivities(host).ToArray());
QueueChild(self, new AllowYieldingReservation(self));
QueueChild(self, new WaitFor(() => NextInQueue != null || aircraft.ReservedActor == null));
}
else
{
ChildActivity = ActivityUtils.SequenceActivities(
aircraft.GetResupplyActivities(host)
.Append(new AllowYieldingReservation(self))
.Append(new TakeOff(self, (a, b, c) => NextInQueue == null && b.NextInQueue == null))
.ToArray());
ChildActivity = ActivityUtils.SequenceActivities(self, aircraft.GetResupplyActivities(host).ToArray());
QueueChild(self, new AllowYieldingReservation(self));
QueueChild(self, new TakeOff(self, (a, b, c) => NextInQueue == null && b.NextInQueue == null));
}
}

View File

@@ -135,7 +135,7 @@ namespace OpenRA.Mods.Common.Activities
var nearestResupplier = ChooseResupplier(self, false);
if (nearestResupplier != null)
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
new Fly(self, Target.FromActor(nearestResupplier), WDist.Zero, aircraft.Info.WaitDistanceFromResupplyBase, targetLineColor: Color.Green),
new FlyCircle(self, aircraft.Info.NumberOfTicksToVerifyAvailableAirport),
this);
@@ -168,7 +168,7 @@ namespace OpenRA.Mods.Common.Activities
if (!abortOnResupply)
landingProcedures.Add(NextActivity);
return ActivityUtils.SequenceActivities(landingProcedures.ToArray());
return ActivityUtils.SequenceActivities(self, landingProcedures.ToArray());
}
}
}

View File

@@ -114,7 +114,7 @@ namespace OpenRA.Mods.Common.Activities
// Move towards the last known position
wasMovingWithinRange = true;
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
move.MoveWithinRange(target, WDist.Zero, lastVisibleMaximumRange, checkTarget.CenterPosition, Color.Red),
this);
}
@@ -168,7 +168,7 @@ namespace OpenRA.Mods.Common.Activities
var sightRange = rs != null ? rs.Range : WDist.FromCells(2);
attackStatus |= AttackStatus.NeedsToMove;
moveActivity = ActivityUtils.SequenceActivities(
moveActivity = ActivityUtils.SequenceActivities(self,
move.MoveWithinRange(target, sightRange, target.CenterPosition, Color.Red),
this);
@@ -195,9 +195,8 @@ namespace OpenRA.Mods.Common.Activities
return AttackStatus.UnableToAttack;
attackStatus |= AttackStatus.NeedsToMove;
var checkTarget = useLastVisibleTarget ? lastVisibleTarget : target;
moveActivity = ActivityUtils.SequenceActivities(
moveActivity = ActivityUtils.SequenceActivities(self,
move.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, Color.Red),
this);
@@ -209,7 +208,7 @@ namespace OpenRA.Mods.Common.Activities
if (!Util.FacingWithinTolerance(facing.Facing, desiredFacing, ((AttackFrontalInfo)attack.Info).FacingTolerance))
{
attackStatus |= AttackStatus.NeedsToTurn;
turnActivity = ActivityUtils.SequenceActivities(new Turn(self, desiredFacing), this);
turnActivity = ActivityUtils.SequenceActivities(self, new Turn(self, desiredFacing), this);
return AttackStatus.NeedsToTurn;
}

View File

@@ -57,7 +57,7 @@ namespace OpenRA.Mods.Common.Activities
// No refineries exist; check again after delay defined in Harvester.
if (harv.LinkedProc == null)
return ActivityUtils.SequenceActivities(new Wait(harv.Info.SearchForDeliveryBuildingDelay), this);
return ActivityUtils.SequenceActivities(self, new Wait(harv.Info.SearchForDeliveryBuildingDelay), this);
var proc = harv.LinkedProc;
var iao = proc.Trait<IAcceptResources>();
@@ -68,7 +68,7 @@ namespace OpenRA.Mods.Common.Activities
foreach (var n in self.TraitsImplementing<INotifyHarvesterAction>())
n.MovingToRefinery(self, proc, null);
return ActivityUtils.SequenceActivities(movement.MoveTo(proc.Location + iao.DeliveryOffset, 0), this);
return ActivityUtils.SequenceActivities(self, movement.MoveTo(proc.Location + iao.DeliveryOffset, 0), this);
}
if (!isDocking)
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Activities
iao.OnDock(self, this);
}
return ActivityUtils.SequenceActivities(new Wait(10), this);
return ActivityUtils.SequenceActivities(self, new Wait(10), this);
}
}
}

View File

@@ -98,7 +98,7 @@ namespace OpenRA.Mods.Common.Activities
// Can't land, so wait at the target until something changes
if (!targetLocation.HasValue)
{
innerActivity = ActivityUtils.SequenceActivities(
innerActivity = ActivityUtils.SequenceActivities(self,
new HeliFly(self, Target.FromCell(self.World, destination)),
new Wait(25));
@@ -117,7 +117,7 @@ namespace OpenRA.Mods.Common.Activities
{
var facing = (targetPosition - self.CenterPosition).Yaw.Facing;
localOffset = carryall.CarryableOffset.Rotate(body.QuantizeOrientation(self, WRot.FromFacing(facing)));
innerActivity = ActivityUtils.SequenceActivities(
innerActivity = ActivityUtils.SequenceActivities(self,
new HeliFly(self, Target.FromPos(targetPosition - body.LocalToWorld(localOffset))),
new Turn(self, facing));
@@ -170,7 +170,7 @@ namespace OpenRA.Mods.Common.Activities
return this;
case DeliveryState.TakeOff:
return ActivityUtils.SequenceActivities(new HeliFly(self, Target.FromPos(self.CenterPosition)), NextActivity);
return ActivityUtils.SequenceActivities(self, new HeliFly(self, Target.FromPos(self.CenterPosition)), NextActivity);
case DeliveryState.Aborted:
carryall.UnreserveCarryable(self);

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Mods.Common.Activities
{
// Turn to the required facing.
if (deploy.Info.Facing != -1 && canTurn)
QueueChild(new Turn(self, deploy.Info.Facing));
QueueChild(self, new Turn(self, deploy.Info.Facing));
}
public override Activity Tick(Actor self)

View File

@@ -55,7 +55,7 @@ namespace OpenRA.Mods.Common.Activities
if (harv.IsFull)
{
// HACK: DeliverResources is ignored if there are queued activities, so discard NextActivity
return ActivityUtils.SequenceActivities(new DeliverResources(self));
return ActivityUtils.SequenceActivities(self, new DeliverResources(self));
}
var closestHarvestablePosition = ClosestHarvestablePos(self);
@@ -82,13 +82,13 @@ namespace OpenRA.Mods.Common.Activities
// Avoid creating an activity cycle
var next = NextInQueue;
NextInQueue = null;
return ActivityUtils.SequenceActivities(next, new Wait(randFrames), this);
return ActivityUtils.SequenceActivities(self, next, new Wait(randFrames), this);
}
else
{
// Attempt to claim the target cell
if (!claimLayer.TryClaimCell(self, closestHarvestablePosition.Value))
return ActivityUtils.SequenceActivities(new Wait(25), this);
return ActivityUtils.SequenceActivities(self, new Wait(25), this);
harv.LastSearchFailed = false;
@@ -100,7 +100,7 @@ namespace OpenRA.Mods.Common.Activities
n.MovingToResources(self, closestHarvestablePosition.Value, this);
self.SetTargetLine(Target.FromCell(self.World, closestHarvestablePosition.Value), Color.Red, false);
return ActivityUtils.SequenceActivities(mobile.MoveTo(closestHarvestablePosition.Value, 1), new HarvestResource(self), this);
return ActivityUtils.SequenceActivities(self, mobile.MoveTo(closestHarvestablePosition.Value, 1), new HarvestResource(self), this);
}
}

View File

@@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Activities
var current = facing.Facing;
var desired = body.QuantizeFacing(current, harvInfo.HarvestFacings);
if (desired != current)
return ActivityUtils.SequenceActivities(new Turn(self, desired), this);
return ActivityUtils.SequenceActivities(self, new Turn(self, desired), this);
}
var resource = resLayer.Harvest(self.Location);
@@ -71,7 +71,7 @@ namespace OpenRA.Mods.Common.Activities
foreach (var t in self.TraitsImplementing<INotifyHarvesterAction>())
t.Harvested(self, resource);
return ActivityUtils.SequenceActivities(new Wait(harvInfo.BaleLoadDelay), this);
return ActivityUtils.SequenceActivities(self, new Wait(harvInfo.BaleLoadDelay), this);
}
}
}

View File

@@ -54,8 +54,8 @@ namespace OpenRA.Mods.Common.Activities
case DockingState.Turn:
dockingState = DockingState.Dock;
if (IsDragRequired)
return ActivityUtils.SequenceActivities(new Turn(self, DockAngle), new Drag(self, StartDrag, EndDrag, DragLength), this);
return ActivityUtils.SequenceActivities(new Turn(self, DockAngle), this);
return ActivityUtils.SequenceActivities(self, new Turn(self, DockAngle), new Drag(self, StartDrag, EndDrag, DragLength), this);
return ActivityUtils.SequenceActivities(self, new Turn(self, DockAngle), this);
case DockingState.Dock:
if (Refinery.IsInWorld && !Refinery.IsDead)
foreach (var nd in Refinery.TraitsImplementing<INotifyDocking>())
@@ -74,7 +74,7 @@ namespace OpenRA.Mods.Common.Activities
Harv.LastLinkedProc = Harv.LinkedProc;
Harv.LinkProc(self, null);
if (IsDragRequired)
return ActivityUtils.SequenceActivities(new Drag(self, EndDrag, StartDrag, DragLength), NextActivity);
return ActivityUtils.SequenceActivities(self, new Drag(self, EndDrag, StartDrag, DragLength), NextActivity);
return NextActivity;
}

View File

@@ -40,7 +40,7 @@ namespace OpenRA.Mods.Common.Activities
if (target == null)
return this;
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
new AttackMoveActivity(self, move.MoveTo(target.Location, 2)),
new Wait(25),
this);

View File

@@ -83,7 +83,7 @@ namespace OpenRA.Mods.Common.Activities
// Move into range
wasMovingWithinRange = true;
return ActivityUtils.SequenceActivities(
return ActivityUtils.SequenceActivities(self,
move.MoveWithinRange(target, minRange, maxRange, checkTarget.CenterPosition, targetLineColor),
this);
}

View File

@@ -227,8 +227,7 @@ namespace OpenRA.Mods.Common.Activities
// To avoid issues, we also make these mini-turns uninterruptible (like MovePart activities) to ensure the actor
// finishes that mini-turn before starting something else.
var facingWithinTolerance = Util.FacingWithinTolerance(mobile.Facing, firstFacing, mobile.TurnSpeed);
QueueChild(new Turn(self, firstFacing, facingWithinTolerance, !facingWithinTolerance));
ChildActivity = ActivityUtils.RunActivity(self, ChildActivity);
QueueChild(self, new Turn(self, firstFacing, facingWithinTolerance, !facingWithinTolerance), true);
return this;
}
@@ -242,18 +241,7 @@ namespace OpenRA.Mods.Common.Activities
var to = Util.BetweenCells(self.World, mobile.FromCell, mobile.ToCell) +
(map.Grid.OffsetOfSubCell(mobile.FromSubCell) + map.Grid.OffsetOfSubCell(mobile.ToSubCell)) / 2;
QueueChild(new MoveFirstHalf(
this,
from,
to,
mobile.Facing,
mobile.Facing,
0));
// While carrying out one Move order, MoveSecondHalf finishes its work from time to time and returns null.
// That causes the ChildActivity to be null and makes us return to this part of code.
// If we only queue the activity and not run it, units will lose one tick and pause briefly!
ChildActivity = ActivityUtils.RunActivity(self, ChildActivity);
QueueChild(self, new MoveFirstHalf(this, from, to, mobile.Facing, mobile.Facing, 0), true);
return this;
}
@@ -387,7 +375,7 @@ namespace OpenRA.Mods.Common.Activities
if (ret == this)
return ret;
Queue(ret);
Queue(self, ret);
return NextActivity;
}

View File

@@ -65,7 +65,7 @@ namespace OpenRA.Mods.Common.Activities
{
var turn = ActivityUtils.RunActivity(self, new Turn(self, facing));
if (turn != null)
QueueChild(turn);
QueueChild(self, turn);
return this;
}

View File

@@ -81,7 +81,7 @@ namespace OpenRA.Mods.Common.Activities
}
// Only the last queued activity (given order) is kept
public override void Queue(Activity activity)
public override void Queue(Actor self, Activity activity, bool pretick = false)
{
NextActivity = activity;
}

View File

@@ -36,10 +36,10 @@ namespace OpenRA.Mods.Common.Activities
protected override void OnFirstRun(Actor self)
{
if (self.Info.HasTraitInfo<IFacingInfo>())
QueueChild(new Turn(self, Facing));
QueueChild(self, new Turn(self, Facing));
if (self.Info.HasTraitInfo<AircraftInfo>())
QueueChild(new HeliLand(self, true));
QueueChild(self, new HeliLand(self, true));
}
public override Activity Tick(Actor self)
@@ -71,7 +71,7 @@ namespace OpenRA.Mods.Common.Activities
IsInterruptible = false;
// Wait forever
QueueChild(new WaitFor(() => false));
QueueChild(self, new WaitFor(() => false));
makeAnimation.Reverse(self, () => DoTransform(self));
return this;
}

View File

@@ -70,7 +70,7 @@ namespace OpenRA.Mods.Common.Activities
{
self.NotifyBlocker(BlockedExitCells(actor));
return ActivityUtils.SequenceActivities(new Wait(10), this);
return ActivityUtils.SequenceActivities(self, new Wait(10), this);
}
cargo.Unload(self);