Cache IResolveOrder traits on Actor
Avoids looking up all of them each time an actor is given an order.
This commit is contained in:
@@ -102,6 +102,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
readonly IFacing facing;
|
readonly IFacing facing;
|
||||||
readonly IHealth health;
|
readonly IHealth health;
|
||||||
|
readonly IResolveOrder[] resolveOrders;
|
||||||
readonly IRenderModifier[] renderModifiers;
|
readonly IRenderModifier[] renderModifiers;
|
||||||
readonly IRender[] renders;
|
readonly IRender[] renders;
|
||||||
readonly IMouseBounds[] mouseBounds;
|
readonly IMouseBounds[] mouseBounds;
|
||||||
@@ -156,6 +157,7 @@ namespace OpenRA
|
|||||||
EffectiveOwner = TraitOrDefault<IEffectiveOwner>();
|
EffectiveOwner = TraitOrDefault<IEffectiveOwner>();
|
||||||
facing = TraitOrDefault<IFacing>();
|
facing = TraitOrDefault<IFacing>();
|
||||||
health = TraitOrDefault<IHealth>();
|
health = TraitOrDefault<IHealth>();
|
||||||
|
resolveOrders = TraitsImplementing<IResolveOrder>().ToArray();
|
||||||
renderModifiers = TraitsImplementing<IRenderModifier>().ToArray();
|
renderModifiers = TraitsImplementing<IRenderModifier>().ToArray();
|
||||||
renders = TraitsImplementing<IRender>().ToArray();
|
renders = TraitsImplementing<IRender>().ToArray();
|
||||||
mouseBounds = TraitsImplementing<IMouseBounds>().ToArray();
|
mouseBounds = TraitsImplementing<IMouseBounds>().ToArray();
|
||||||
@@ -404,6 +406,12 @@ namespace OpenRA
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ResolveOrder(Order order)
|
||||||
|
{
|
||||||
|
foreach (var r in resolveOrders)
|
||||||
|
r.ResolveOrder(this, order);
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: move elsewhere.
|
// TODO: move elsewhere.
|
||||||
public void ChangeOwner(Player newOwner)
|
public void ChangeOwner(Player newOwner)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -352,8 +352,7 @@ namespace OpenRA.Network
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (world.OrderValidators.All(vo => vo.OrderValidation(orderManager, world, clientId, order)))
|
if (world.OrderValidators.All(vo => vo.OrderValidation(orderManager, world, clientId, order)))
|
||||||
foreach (var t in order.Subject.TraitsImplementing<IResolveOrder>())
|
order.Subject.ResolveOrder(order);
|
||||||
t.ResolveOrder(order.Subject, order);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetOrderLag(OrderManager o)
|
static void SetOrderLag(OrderManager o)
|
||||||
|
|||||||
Reference in New Issue
Block a user