diff --git a/OpenRA.Mods.RA/Harvester.cs b/OpenRA.Mods.RA/Harvester.cs index a7d9c41ad0..3d97efea75 100644 --- a/OpenRA.Mods.RA/Harvester.cs +++ b/OpenRA.Mods.RA/Harvester.cs @@ -41,8 +41,7 @@ namespace OpenRA.Mods.RA [Sync] public Actor LinkedProc = null; - [Sync] - public int2 LastHarvestedCell = int2.Zero; + public int2? LastHarvestedCell = null; [Sync] public int ContentValue { get { return contents.Sum(c => c.Key.ValuePerUnit*c.Value); } } @@ -62,6 +61,17 @@ namespace OpenRA.Mods.RA LinkedProc = ClosestProc(self, ignore); } + public void ContinueHarvesting(Actor self) + { + if (LastHarvestedCell.HasValue) + { + var mobile = self.Trait(); + self.QueueActivity( mobile.MoveTo(LastHarvestedCell.Value, 5) ); + self.SetTargetLine(Target.FromCell(LastHarvestedCell.Value), Color.Red, false); + } + self.QueueActivity( new Harvest() ); + } + Actor ClosestProc(Actor self, Actor ignore) { var refs = self.World.ActorsWithTrait() diff --git a/OpenRA.Mods.RA/OreRefinery.cs b/OpenRA.Mods.RA/OreRefinery.cs index 601a05a777..f1730a95d6 100644 --- a/OpenRA.Mods.RA/OreRefinery.cs +++ b/OpenRA.Mods.RA/OreRefinery.cs @@ -120,27 +120,13 @@ namespace OpenRA.Mods.RA public void OnDock (Actor harv, DeliverResources dockOrder) { - var mobile = harv.Trait(); - var harvester = harv.Trait(); - if (!preventDock) { harv.QueueActivity( new CallFunc( () => dockedHarv = harv, false ) ); harv.QueueActivity( DockSequence(harv, self) ); harv.QueueActivity( new CallFunc( () => dockedHarv = null, false ) ); } - - // Tell the harvester to start harvesting - // TODO: This belongs on the harv idle activity - harv.QueueActivity( new CallFunc( () => - { - if (harvester.LastHarvestedCell != int2.Zero) - { - harv.QueueActivity( mobile.MoveTo(harvester.LastHarvestedCell, 5) ); - harv.SetTargetLine(Target.FromCell(harvester.LastHarvestedCell), Color.Red, false); - } - harv.QueueActivity( new Harvest() ); - })); + harv.QueueActivity( new CallFunc( () => harv.Trait().ContinueHarvesting(harv) ) ); }