@@ -20,6 +20,7 @@ namespace OpenRA.Mods.RA
20
20
{
21
21
public class HarvesterInfo : ITraitInfo
22
22
{
23
+ public readonly string [ ] DeliveryBuildings = { } ;
23
24
public readonly int Capacity = 28 ;
24
25
public readonly int LoadTicksPerBale = 4 ;
25
26
public readonly int UnloadTicksPerBale = 4 ;
@@ -101,12 +102,18 @@ public void ContinueHarvesting(Actor self)
101
102
self . QueueActivity ( new FindResources ( ) ) ;
102
103
}
103
104
105
+ bool IsAcceptableProcType ( Actor proc )
106
+ {
107
+ return Info . DeliveryBuildings . Length == 0 ||
108
+ Info . DeliveryBuildings . Contains ( proc . Info . Name ) ;
109
+ }
110
+
104
111
Actor ClosestProc ( Actor self , Actor ignore )
105
112
{
106
113
// Find all refineries and their occupancy count:
107
114
var refs = (
108
115
from r in self . World . ActorsWithTrait < IAcceptOre > ( )
109
- where r . Actor != ignore && r . Actor . Owner == self . Owner
116
+ where r . Actor != ignore && r . Actor . Owner == self . Owner && IsAcceptableProcType ( r . Actor )
110
117
let linkedHarvs = self . World . ActorsWithTrait < Harvester > ( ) . Where ( a => a . Trait . LinkedProc == r . Actor ) . Count ( )
111
118
select new { Location = r . Actor . Location + r . Trait . DeliverOffset , Actor = r . Actor , Occupancy = linkedHarvs }
112
119
) . ToDictionary ( r => r . Location ) ;
@@ -239,7 +246,8 @@ public IEnumerable<IOrderTargeter> Orders
239
246
{
240
247
get
241
248
{
242
- yield return new EnterAlliedActorTargeter < IAcceptOre > ( "Deliver" , 5 , _ => true ,
249
+ yield return new EnterAlliedActorTargeter < IAcceptOre > ( "Deliver" , 5 ,
250
+ proc => IsAcceptableProcType ( proc ) ,
243
251
proc => ! IsEmpty && proc . Trait < IAcceptOre > ( ) . AllowDocking ) ;
244
252
yield return new HarvestOrderTargeter ( ) ;
245
253
}
@@ -316,7 +324,7 @@ public void ResolveOrder(Actor self, Order order)
316
324
{
317
325
// NOTE: An explicit deliver order forces the harvester to always deliver to this refinery.
318
326
var iao = order . TargetActor . TraitOrDefault < IAcceptOre > ( ) ;
319
- if ( iao == null || ! iao . AllowDocking )
327
+ if ( iao == null || ! iao . AllowDocking || ! IsAcceptableProcType ( order . TargetActor ) )
320
328
return ;
321
329
322
330
if ( order . TargetActor != OwnerLinkedProc )
0 commit comments