Cache IOrderValidator traits on World
This commit is contained in:
@@ -336,14 +336,10 @@ namespace OpenRA.Network
|
||||
break;
|
||||
|
||||
if (order.GroupedActors == null)
|
||||
ResolveOrder(order, world.WorldActor.TraitsImplementing<IValidateOrder>(), orderManager, clientId);
|
||||
ResolveOrder(order, world.OrderValidators, orderManager, clientId);
|
||||
else
|
||||
{
|
||||
// PERF: Cache the result of TraitsImplementing as we are likely to use it for several order subjects
|
||||
var validateOrders = world.WorldActor.TraitsImplementing<IValidateOrder>().ToArray();
|
||||
foreach (var subject in order.GroupedActors)
|
||||
ResolveOrder(Order.FromGroupedOrder(order, subject), validateOrders, orderManager, clientId);
|
||||
}
|
||||
ResolveOrder(Order.FromGroupedOrder(order, subject), world.OrderValidators, orderManager, clientId);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -142,6 +142,8 @@ namespace OpenRA
|
||||
public readonly ScreenMap ScreenMap;
|
||||
public readonly WorldType Type;
|
||||
|
||||
public readonly IValidateOrder[] OrderValidators;
|
||||
|
||||
readonly GameInformation gameInfo;
|
||||
|
||||
// Hide the OrderManager from mod code
|
||||
@@ -203,6 +205,7 @@ namespace OpenRA
|
||||
ActorMap = WorldActor.Trait<IActorMap>();
|
||||
ScreenMap = WorldActor.Trait<ScreenMap>();
|
||||
Selection = WorldActor.Trait<ISelection>();
|
||||
OrderValidators = WorldActor.TraitsImplementing<IValidateOrder>().ToArray();
|
||||
|
||||
// Reset mask
|
||||
LongBitSet<PlayerBitMask>.Reset();
|
||||
|
||||
Reference in New Issue
Block a user