Make the AI only consider harvesters 'idle' if last resource search failed
Otherwise the AI would consider the harvester 'idle' in too many situations. This way, the AI now only uses its own resource search algorithm if the next resource patch is too far away for the FindResources activity to find it.
This commit is contained in:
@@ -826,7 +826,7 @@ namespace OpenRA.Mods.Common.AI
|
||||
if (!harvester.IsIdle)
|
||||
{
|
||||
var act = harvester.CurrentActivity;
|
||||
if (act.NextActivity == null || act.NextActivity.GetType() != typeof(FindResources))
|
||||
if (!harv.LastSearchFailed || act.NextActivity == null || act.NextActivity.GetType() != typeof(FindResources))
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -69,6 +69,8 @@ namespace OpenRA.Mods.Common.Activities
|
||||
if (!harv.IsEmpty)
|
||||
return deliver;
|
||||
|
||||
harv.LastSearchFailed = true;
|
||||
|
||||
var unblockCell = harv.LastHarvestedCell ?? (self.Location + harvInfo.UnblockCell);
|
||||
var moveTo = mobile.NearestMoveableCell(unblockCell, 2, 5);
|
||||
self.QueueActivity(mobile.MoveTo(moveTo, 1));
|
||||
@@ -92,6 +94,8 @@ namespace OpenRA.Mods.Common.Activities
|
||||
if (!claimLayer.TryClaimCell(self, closestHarvestablePosition.Value))
|
||||
return ActivityUtils.SequenceActivities(new Wait(25), this);
|
||||
|
||||
harv.LastSearchFailed = false;
|
||||
|
||||
// If not given a direct order, assume ordered to the first resource location we find:
|
||||
if (!harv.LastOrderLocation.HasValue)
|
||||
harv.LastOrderLocation = closestHarvestablePosition;
|
||||
|
||||
@@ -89,6 +89,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
bool idleSmart = true;
|
||||
int idleDuration;
|
||||
|
||||
[Sync] public bool LastSearchFailed;
|
||||
[Sync] public Actor OwnerLinkedProc = null;
|
||||
[Sync] public Actor LastLinkedProc = null;
|
||||
[Sync] public Actor LinkedProc = null;
|
||||
|
||||
Reference in New Issue
Block a user