Don't use SearchFromProcRadius when searching from self.Location

This commit is contained in:
abcdefg30
2019-08-10 12:47:08 +02:00
committed by teinarss
parent ead35bccda
commit 698ef5e375

View File

@@ -175,8 +175,14 @@ namespace OpenRA.Mods.Common.Activities
} }
// Determine where to search from and how far to search: // Determine where to search from and how far to search:
var searchFromLoc = lastHarvestedCell ?? GetSearchFromLocation(self); var searchFromLoc = lastHarvestedCell ?? GetSearchFromProcLocation(self);
var searchRadius = lastHarvestedCell.HasValue ? harvInfo.SearchFromOrderRadius : harvInfo.SearchFromProcRadius; var searchRadius = lastHarvestedCell.HasValue ? harvInfo.SearchFromOrderRadius : harvInfo.SearchFromProcRadius;
if (!searchFromLoc.HasValue)
{
searchFromLoc = self.Location;
searchRadius = harvInfo.SearchFromOrderRadius;
}
var searchRadiusSquared = searchRadius * searchRadius; var searchRadiusSquared = searchRadius * searchRadius;
// Find any harvestable resources: // Find any harvestable resources:
@@ -185,12 +191,12 @@ namespace OpenRA.Mods.Common.Activities
domainIndex.IsPassable(self.Location, loc, locomotorInfo) && harv.CanHarvestCell(self, loc) && claimLayer.CanClaimCell(self, loc)) domainIndex.IsPassable(self.Location, loc, locomotorInfo) && harv.CanHarvestCell(self, loc) && claimLayer.CanClaimCell(self, loc))
.WithCustomCost(loc => .WithCustomCost(loc =>
{ {
if ((loc - searchFromLoc).LengthSquared > searchRadiusSquared) if ((loc - searchFromLoc.Value).LengthSquared > searchRadiusSquared)
return int.MaxValue; return int.MaxValue;
return 0; return 0;
}) })
.FromPoint(searchFromLoc) .FromPoint(searchFromLoc.Value)
.FromPoint(self.Location)) .FromPoint(self.Location))
path = pathFinder.FindPath(search); path = pathFinder.FindPath(search);
@@ -217,7 +223,7 @@ namespace OpenRA.Mods.Common.Activities
yield return new TargetLineNode(Target.FromActor(deliverActor), Color.Green); yield return new TargetLineNode(Target.FromActor(deliverActor), Color.Green);
} }
CPos GetSearchFromLocation(Actor self) CPos? GetSearchFromProcLocation(Actor self)
{ {
if (harv.LastLinkedProc != null && !harv.LastLinkedProc.IsDead && harv.LastLinkedProc.IsInWorld) if (harv.LastLinkedProc != null && !harv.LastLinkedProc.IsDead && harv.LastLinkedProc.IsInWorld)
return harv.LastLinkedProc.Location + harv.LastLinkedProc.Trait<IAcceptResources>().DeliveryOffset; return harv.LastLinkedProc.Location + harv.LastLinkedProc.Trait<IAcceptResources>().DeliveryOffset;
@@ -225,7 +231,7 @@ namespace OpenRA.Mods.Common.Activities
if (harv.LinkedProc != null && !harv.LinkedProc.IsDead && harv.LinkedProc.IsInWorld) if (harv.LinkedProc != null && !harv.LinkedProc.IsDead && harv.LinkedProc.IsInWorld)
return harv.LinkedProc.Location + harv.LinkedProc.Trait<IAcceptResources>().DeliveryOffset; return harv.LinkedProc.Location + harv.LinkedProc.Trait<IAcceptResources>().DeliveryOffset;
return self.Location; return null;
} }
} }
} }