Skip to content

Commit 907a415

Browse files
authored
Merge pull request #995 from Courseplay/993-connecting-path-fruit-avoidance
fix: consider fruit avoidance setting for transitions
2 parents 97ae250 + 3503295 commit 907a415

7 files changed

Lines changed: 16 additions & 12 deletions

scripts/ai/PathfinderController.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function Strategy:onPathfindingFailed(controller : PathfinderController, current
6666
fruitPenaltyNodePercent : number, offFieldPenaltyNodePercent : number)
6767
if currentRetryAttempt == 1 then
6868
// try whatever has better chances:
69-
currentContext:ignoreFruit()
69+
currentContext:ignoreFruit(true)
7070
self.pathfinderController:findPathToNode(currentContext, ...)
7171
else
7272
// Something else ...

scripts/ai/strategies/AIDriveStrategyAttachHeader.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ function AIDriveStrategyAttachHeader:startPathfindingToCutter()
239239
local context = PathfinderContext(self.vehicle)
240240
context:mustBeAccurate(false):allowReverse(true):offFieldPenalty(0)
241241
context:vehiclesToIgnore({ self.vehicle }):areaToAvoid(self.trailerAreaToAvoid)
242-
context:ignoreFruit()
242+
context:ignoreFruit(true)
243243
local result
244244
self.pathfinder, result = PathfinderUtil.startPathfindingFromVehicleToNode(
245245
self.cutterNode, 0, -math.max(1.5 * length, 1.5 * self.turningRadius), context)

scripts/ai/strategies/AIDriveStrategyDriveToFieldWorkStart.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ end
202202
---@param wasLastRetry boolean
203203
---@param currentRetryAttempt number
204204
function AIDriveStrategyDriveToFieldWorkStart:onPathfindingFailed(controller, lastContext, wasLastRetry, currentRetryAttempt)
205-
self:debug('Failed to find a path, trying with a reduced off-field penalty and no fruit avoidence again')
206-
lastContext:offFieldPenalty(PathfinderContext.defaultOffFieldPenalty / 2):ignoreFruit():ignoreFruitHeaps()
205+
self:debug('Failed to find a path, trying with a reduced off-field penalty and no fruit avoidance again')
206+
lastContext:offFieldPenalty(PathfinderContext.defaultOffFieldPenalty / 2):ignoreFruit(true):ignoreFruitHeaps()
207207
controller:retry(lastContext)
208208
end
209209

scripts/ai/strategies/AIDriveStrategyFieldWorkCourse.lua

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,9 @@ function AIDriveStrategyFieldWorkCourse:returnToStartAfterDone()
505505
if not self.pathfinder or not self.pathfinder:isActive() then
506506
self.pathfindingStartedAt = g_currentMission.time
507507
self:debug('Return to first waypoint')
508-
local context = PathfinderContext(self.vehicle):allowReverse(self:getAllowReversePathfinding())
508+
local context = PathfinderContext(self.vehicle)
509+
:allowReverse(self:getAllowReversePathfinding())
510+
:ignoreFruit(not self.settings.avoidFruit:getValue())
509511
local result
510512
self.pathfinder, result = PathfinderUtil.startPathfindingFromVehicleToWaypoint(
511513
self.fieldWorkCourse, 1, 0, 0, context)
@@ -545,7 +547,9 @@ function AIDriveStrategyFieldWorkCourse:startPathfindingToNextWaypoint(ix)
545547
self.turnNodes, self:getWorkWidth(), fm, bm, self:getTurnEndSideOffset(false), self:getTurnEndForwardOffset())
546548
local _, steeringLength = AIUtil.getSteeringParameters(self.vehicle)
547549
local targetNode, zOffset = self.turnContext:getTurnEndNodeAndOffsets(steeringLength)
548-
local context = PathfinderContext(self.vehicle):allowReverse(self:getAllowReversePathfinding())
550+
local context = PathfinderContext(self.vehicle)
551+
:allowReverse(self:getAllowReversePathfinding())
552+
:ignoreFruit(not self.settings.avoidFruit:getValue())
549553
self.waypointToContinueOnFailedPathfinding = ix + 1
550554
self.pathfinderController:registerListeners(self, self.onPathfindingDoneToNextWaypoint,
551555
self.onPathfindingFailedToNextWaypoint)
@@ -609,7 +613,7 @@ function AIDriveStrategyFieldWorkCourse:startConnectingPath(ix)
609613
local _, steeringLength = AIUtil.getSteeringParameters(self.vehicle)
610614
local targetNode, zOffset = self.turnContext:getTurnEndNodeAndOffsets(steeringLength)
611615
local context = PathfinderContext(self.vehicle):allowReverse(self:getAllowReversePathfinding())
612-
context:preferredPath(connectingPath):mustBeAccurate(true)
616+
context:preferredPath(connectingPath):mustBeAccurate(true):ignoreFruit(not self.settings.avoidFruit:getValue())
613617
if #connectingPath < 2 then
614618
self:debug('Connecting path has only %d waypoint, use an alignment course instead', #connectingPath)
615619
self.workStarterCourse = self:createAlignmentCourse(self.fieldWorkCourse, targetWaypointIx)

scripts/ai/strategies/AIDriveStrategyShovelSiloLoader.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ function AIDriveStrategyShovelSiloLoader:onPathfindingFailed(controller,
610610
if self.state == self.states.DRIVING_ALIGNMENT_COURSE then
611611
local course = self:getRememberedCourseAndIx()
612612
local fm = self:getFrontAndBackMarkers()
613-
lastContext:ignoreFruit()
613+
lastContext:ignoreFruit(true)
614614
controller:findPathToWaypoint(lastContext, course,
615615
1, 0, -(fm + 4), 1)
616616
elseif self.state == self.states.DRIVING_TO_UNLOAD_POSITION then

scripts/ai/strategies/AIDriveStrategySiloLoader.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ function AIDriveStrategySiloLoader:startPathfindingToStart(course)
300300
self.state = self.states.DRIVING_ALIGNMENT_COURSE
301301
self:rememberCourse(course, 1)
302302
local fm = self:getFrontAndBackMarkers()
303-
local context = PathfinderContext(self.vehicle):allowReverse(true):ignoreFruit()
303+
local context = PathfinderContext(self.vehicle):allowReverse(true):ignoreFruit(true)
304304
self.pathfinderController:findPathToWaypoint(context, course,
305305
1, 0, -1.5 * (fm + 4), 1)
306306
end

scripts/pathfinder/PathfinderContext.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ function PathfinderContext:init(vehicle)
113113
CpObjectUtil.registerBuilderAPI(self, self.attributesToDefaultValue)
114114
end
115115

116-
--- Disables the fruit avoidance
117-
function PathfinderContext:ignoreFruit()
118-
self._maxFruitPercent = math.huge
116+
--- Disables the fruit avoidance if true, otherwise sets the default value.
117+
function PathfinderContext:ignoreFruit(ignore)
118+
self._maxFruitPercent = ignore and math.huge or PathfinderContext.attributesToDefaultValue.maxFruitPercent
119119
return self
120120
end
121121

0 commit comments

Comments
 (0)