Cache Orders in Passenger to avoid several repeated allocations when orders must be determined.

This commit is contained in:
RoosterDragon
2015-07-09 20:28:32 +01:00
parent 218712f5d3
commit 7dc654a5ad

View File

@@ -111,22 +111,22 @@ namespace OpenRA.Mods.Common.Traits
public class Passenger : IIssueOrder, IResolveOrder, IOrderVoice, INotifyRemovedFromWorld public class Passenger : IIssueOrder, IResolveOrder, IOrderVoice, INotifyRemovedFromWorld
{ {
public readonly PassengerInfo Info; public readonly PassengerInfo Info;
public Passenger(PassengerInfo info) { Info = info; } public Passenger(PassengerInfo info)
{
Info = info;
Func<Actor, bool> canTarget = IsCorrectCargoType;
Func<Actor, bool> useEnterCursor = CanEnter;
Orders = new EnterAlliedActorTargeter<Cargo>[]
{
new EnterTransportTargeter("EnterTransport", 5, canTarget, useEnterCursor, Info.AlternateTransportsMode),
new EnterTransportsTargeter("EnterTransports", 5, canTarget, useEnterCursor, Info.AlternateTransportsMode)
};
}
public Actor Transport; public Actor Transport;
public Cargo ReservedCargo { get; private set; } public Cargo ReservedCargo { get; private set; }
public IEnumerable<IOrderTargeter> Orders public IEnumerable<IOrderTargeter> Orders { get; private set; }
{
get
{
yield return new EnterTransportTargeter("EnterTransport", 5,
target => IsCorrectCargoType(target), target => CanEnter(target),
Info.AlternateTransportsMode);
yield return new EnterTransportsTargeter("EnterTransports", 5,
target => IsCorrectCargoType(target), target => CanEnter(target),
Info.AlternateTransportsMode);
}
}
public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued) public Order IssueOrder(Actor self, IOrderTargeter order, Target target, bool queued)
{ {