(1/2) #1210 Untangling QueueResupplyActivities

This commit is contained in:
Chris Forbes
2011-12-03 10:11:05 +13:00
parent b8c4ff8668
commit 7b06e39390
2 changed files with 28 additions and 2 deletions

View File

@@ -176,5 +176,10 @@ namespace OpenRA
{ {
return string.Join(j, ts.Select(t => t.ToString()).ToArray()); return string.Join(j, ts.Select(t => t.ToString()).ToArray());
} }
public static IEnumerable<T> Append<T>( this IEnumerable<T> ts, params T[] moreTs)
{
return ts.Concat(moreTs);
}
} }
} }

View File

@@ -205,12 +205,18 @@ namespace OpenRA.Mods.RA.Air
} }
public void QueueResupplyActivities(Actor a) public void QueueResupplyActivities(Actor a)
{
foreach( var act in GetResupplyActivities(a) )
self.QueueActivity(act);
}
public IEnumerable<Activity> GetResupplyActivities(Actor a)
{ {
var name = a.Info.Name; var name = a.Info.Name;
if (Info.RearmBuildings.Contains(name)) if (Info.RearmBuildings.Contains(name))
self.QueueActivity(new Rearm(self)); yield return new Rearm(self);
if (Info.RepairBuildings.Contains(name)) if (Info.RepairBuildings.Contains(name))
self.QueueActivity(new Repair(a)); yield return new Repair(a);
} }
public IEnumerable<IOrderTargeter> Orders public IEnumerable<IOrderTargeter> Orders
@@ -248,6 +254,21 @@ namespace OpenRA.Mods.RA.Air
} }
} }
public class ResupplyAircraft : Activity
{
public override Activity Tick(Actor self)
{
var aircraft = self.Trait<Aircraft>();
var host = aircraft.GetActorBelow();
if (host == null)
return NextActivity;
return Util.SequenceActivities(
aircraft.GetResupplyActivities(host).Append(NextActivity).ToArray());
}
}
class AircraftMoveOrderTargeter : IOrderTargeter class AircraftMoveOrderTargeter : IOrderTargeter
{ {
public string OrderID { get { return "Move"; } } public string OrderID { get { return "Move"; } }