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