diff --git a/OpenRa.Game/Traits/Activities/DeliverOre.cs b/OpenRa.Game/Traits/Activities/DeliverOre.cs index bf214b8432..35ad0d283e 100644 --- a/OpenRa.Game/Traits/Activities/DeliverOre.cs +++ b/OpenRa.Game/Traits/Activities/DeliverOre.cs @@ -10,10 +10,34 @@ namespace OpenRa.Game.Traits.Activities public Activity NextActivity { get; set; } bool isDone; + Actor refinery; + + public DeliverOre( Actor refinery ) + { + this.refinery = refinery; + } + + static readonly int2 refineryDeliverOffset = new int2( 1, 2 ); public void Tick(Actor self, Mobile mobile) { - if (isDone) + if( self.Location != refinery.Location + refineryDeliverOffset ) + { + var move = new Move( refinery.Location + refineryDeliverOffset, 0 ); + mobile.InternalSetActivity( move ); + mobile.QueueActivity( this ); + move.Tick( self, mobile ); + return; + } + else if( mobile.facing != 64 ) + { + var turn = new Turn( 64 ); + mobile.InternalSetActivity( turn ); + mobile.QueueActivity( this ); + turn.Tick( self, mobile ); + return; + } + else if (isDone) { var harv = self.traits.Get(); diff --git a/OpenRa.Game/Traits/Activities/Harvest.cs b/OpenRa.Game/Traits/Activities/Harvest.cs index a279c0a27b..19656e9293 100644 --- a/OpenRa.Game/Traits/Activities/Harvest.cs +++ b/OpenRa.Game/Traits/Activities/Harvest.cs @@ -53,11 +53,8 @@ namespace OpenRa.Game.Traits.Activities /* find a proc */ var proc = ChooseReturnLocation(self); if( proc != null ) - { - mobile.QueueActivity( new Move( proc.Location + new int2( 1, 2 ), 0 ) ); - mobile.QueueActivity( new Turn( 64 ) ); - mobile.QueueActivity( new DeliverOre() ); - } + mobile.QueueActivity( new DeliverOre( proc ) ); + mobile.InternalSetActivity(NextActivity); } diff --git a/OpenRa.Game/UnitOrders.cs b/OpenRa.Game/UnitOrders.cs index 86b1434df0..fd244856a9 100755 --- a/OpenRa.Game/UnitOrders.cs +++ b/OpenRa.Game/UnitOrders.cs @@ -57,9 +57,7 @@ namespace OpenRa.Game { var mobile = order.Subject.traits.Get(); mobile.Cancel(order.Subject); - mobile.QueueActivity(new Traits.Activities.Move(order.TargetActor.Location + new int2(1, 2), 0)); - mobile.QueueActivity(new Traits.Activities.Turn(64)); - mobile.QueueActivity(new Traits.Activities.DeliverOre()); + mobile.QueueActivity(new Traits.Activities.DeliverOre(order.TargetActor)); break; } case "Harvest":