fix(markarbejde): CP får markens punkt nærmest traktoren som position (kursets startsted) — F17-kurset startede 280 m væk, og kultivatoren kørte gennem skoven (v1.43.1.0)
This commit is contained in:
@@ -123,6 +123,18 @@ function ADFieldJobs.shouldEmptyHarvester(s)
|
|||||||
return (s.fill or 0) > 0 and s.near == true and not s.busy and not s.controlled and not s.tried
|
return (s.fill or 0) > 0 and s.near == true and not s.busy and not s.controlled and not s.tried
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Markens punkt nærmest (x, z) — CP bruger det som kursets startsted. Uden position: første punkt.
|
||||||
|
function ADFieldJobs.nearestPoint(points, x, z)
|
||||||
|
if points == nil or points[1] == nil then return nil end
|
||||||
|
if x == nil or z == nil then return points[1] end
|
||||||
|
local best, bestD = nil, nil
|
||||||
|
for _, point in ipairs(points) do
|
||||||
|
local d = (point.x - x) ^ 2 + (point.z - z) ^ 2
|
||||||
|
if bestD == nil or d < bestD then best, bestD = point, d end
|
||||||
|
end
|
||||||
|
return best
|
||||||
|
end
|
||||||
|
|
||||||
-- Beslutning for én mark. assignments = sæt på marken ({phase, stage, helper}); kun sæt på det aktuelle
|
-- Beslutning for én mark. assignments = sæt på marken ({phase, stage, helper}); kun sæt på det aktuelle
|
||||||
-- trin tæller (en aflæsningsvogn på vej hjem fra høsten forstyrrer ikke kultiveringen).
|
-- trin tæller (en aflæsningsvogn på vej hjem fra høsten forstyrrer ikke kultiveringen).
|
||||||
-- env = {raining = bool}: vejrfølsomme trin (høst/slå/vend/riv/hø) sendes ikke ud i regn.
|
-- env = {raining = bool}: vejrfølsomme trin (høst/slå/vend/riv/hø) sendes ikke ud i regn.
|
||||||
|
|||||||
@@ -630,7 +630,9 @@ local function beginUnloader(adEnv, field, info, assignment)
|
|||||||
assignment.storeId = store.id
|
assignment.storeId = store.id
|
||||||
local station = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, store.id, vehicle:getOwnerFarmId())
|
local station = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, store.id, vehicle:getOwnerFarmId())
|
||||||
local markerPoint = adEnv.ADGraphManager:getWayPointById(info.markerId)
|
local markerPoint = adEnv.ADGraphManager:getWayPointById(info.markerId)
|
||||||
local point = info.points[1] or {x = info.x, z = info.z}
|
-- punktet nærmest traktoren: CP lægger kursets start dér (ikke i den anden ende af marken)
|
||||||
|
local vx, vz = vehiclePosition(assignment.vehicle)
|
||||||
|
local point = ADFieldJobs.nearestPoint(info.points, vx, vz) or {x = info.x, z = info.z}
|
||||||
assignment.phase = "starting"
|
assignment.phase = "starting"
|
||||||
assignment.since = now()
|
assignment.since = now()
|
||||||
local handle, err = ADCpBridge.startUnloader(vehicle, point.x, point.z, markerPoint ~= nil and markerPoint.x or point.x,
|
local handle, err = ADCpBridge.startUnloader(vehicle, point.x, point.z, markerPoint ~= nil and markerPoint.x or point.x,
|
||||||
@@ -676,7 +678,9 @@ local function beginBaleCollector(adEnv, field, info, assignment)
|
|||||||
else
|
else
|
||||||
log(field.id, "intet ballelager med plads og vej fundet — ballesamleren stopper når den er fuld")
|
log(field.id, "intet ballelager med plads og vej fundet — ballesamleren stopper når den er fuld")
|
||||||
end
|
end
|
||||||
local point = info.points[1] or {x = info.x, z = info.z}
|
-- punktet nærmest traktoren: CP lægger kursets start dér (ikke i den anden ende af marken)
|
||||||
|
local vx, vz = vehiclePosition(assignment.vehicle)
|
||||||
|
local point = ADFieldJobs.nearestPoint(info.points, vx, vz) or {x = info.x, z = info.z}
|
||||||
assignment.phase = "starting"
|
assignment.phase = "starting"
|
||||||
assignment.since = now()
|
assignment.since = now()
|
||||||
local handle, err = ADCpBridge.startBaleFinder(vehicle, point.x, point.z, function(ok, reason)
|
local handle, err = ADCpBridge.startBaleFinder(vehicle, point.x, point.z, function(ok, reason)
|
||||||
@@ -778,7 +782,9 @@ local function beginWork(adEnv, field, info, assignment)
|
|||||||
math.abs(field.windrowOffset), field.windrowOffset > 0 and "til venstre" or "til højre", target, own)
|
math.abs(field.windrowOffset), field.windrowOffset > 0 and "til venstre" or "til højre", target, own)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local point = info.points[1] or {x = info.x, z = info.z}
|
-- punktet nærmest traktoren: CP lægger kursets start dér (ikke i den anden ende af marken)
|
||||||
|
local vx, vz = vehiclePosition(assignment.vehicle)
|
||||||
|
local point = ADFieldJobs.nearestPoint(info.points, vx, vz) or {x = info.x, z = info.z}
|
||||||
-- genbrug af Courseplay-kurser: maskinens eget / en andens matchende kursus frem for ny beregning
|
-- genbrug af Courseplay-kurser: maskinens eget / en andens matchende kursus frem for ny beregning
|
||||||
local cacheContext
|
local cacheContext
|
||||||
opts, cacheContext = ADCourseCache.prepare(adEnv, field, info, assignment, opts)
|
opts, cacheContext = ADCourseCache.prepare(adEnv, field, info, assignment, opts)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.43.0.0</version>
|
<version>1.43.1.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -187,5 +187,16 @@ check("EH optaget -> videre", ADFieldJobs.shouldEmptyHarvester({fill = 12000, ne
|
|||||||
check("EH spiller i -> videre", ADFieldJobs.shouldEmptyHarvester({fill = 12000, near = true, controlled = true}), false)
|
check("EH spiller i -> videre", ADFieldJobs.shouldEmptyHarvester({fill = 12000, near = true, controlled = true}), false)
|
||||||
check("EH allerede forsøgt -> videre", ADFieldJobs.shouldEmptyHarvester({fill = 12000, near = true, tried = true}), false)
|
check("EH allerede forsøgt -> videre", ADFieldJobs.shouldEmptyHarvester({fill = 12000, near = true, tried = true}), false)
|
||||||
|
|
||||||
|
|
||||||
|
-- nearestPoint: CP bruger markens punkt som kursets startsted — tag det nærmest traktoren (in-game 27/9 F17: første
|
||||||
|
-- punkt lå 280 m væk i den anden ende, og CP kørte gennem skoven)
|
||||||
|
do
|
||||||
|
local pts = {{x = 1600, z = -1839}, {x = 1350, z = -1740}, {x = 1500, z = -1800}}
|
||||||
|
local p = ADFieldJobs.nearestPoint(pts, 1340, -1733)
|
||||||
|
check("NP nærmest traktoren", p.x .. "," .. p.z, "1350,-1740")
|
||||||
|
check("NP uden punkter -> nil", ADFieldJobs.nearestPoint({}, 0, 0), nil)
|
||||||
|
check("NP uden position -> første", ADFieldJobs.nearestPoint(pts, nil, nil).x, 1600)
|
||||||
|
end
|
||||||
|
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user