diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index c53b7a2d66..cb0ffdfbb6 100644 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -102,6 +102,7 @@ namespace OpenRA readonly IFacing facing; readonly IHealth health; + readonly IResolveOrder[] resolveOrders; readonly IRenderModifier[] renderModifiers; readonly IRender[] renders; readonly IMouseBounds[] mouseBounds; @@ -156,6 +157,7 @@ namespace OpenRA EffectiveOwner = TraitOrDefault(); facing = TraitOrDefault(); health = TraitOrDefault(); + resolveOrders = TraitsImplementing().ToArray(); renderModifiers = TraitsImplementing().ToArray(); renders = TraitsImplementing().ToArray(); mouseBounds = TraitsImplementing().ToArray(); @@ -404,6 +406,12 @@ namespace OpenRA }); } + public void ResolveOrder(Order order) + { + foreach (var r in resolveOrders) + r.ResolveOrder(this, order); + } + // TODO: move elsewhere. public void ChangeOwner(Player newOwner) { diff --git a/OpenRA.Game/Network/UnitOrders.cs b/OpenRA.Game/Network/UnitOrders.cs index 1500f45f4d..3a8ddca1b8 100644 --- a/OpenRA.Game/Network/UnitOrders.cs +++ b/OpenRA.Game/Network/UnitOrders.cs @@ -352,8 +352,7 @@ namespace OpenRA.Network return; if (world.OrderValidators.All(vo => vo.OrderValidation(orderManager, world, clientId, order))) - foreach (var t in order.Subject.TraitsImplementing()) - t.ResolveOrder(order.Subject, order); + order.Subject.ResolveOrder(order); } static void SetOrderLag(OrderManager o)