fix(kobling): plov o.l. foldes ud før afkobling (spillet kræver det) med 20 s frist; foldbare redskaber foldes sammen til vejen efter påkobling (v1.50.2.0)
This commit is contained in:
@@ -387,6 +387,7 @@ local function dispatchPool(adEnv, order, pair, silosById, storesById)
|
||||
if park ~= nil then ADFieldWork.startAd(adEnv, tractor, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
||||
return
|
||||
end
|
||||
pcall(ADHitch.foldForTransport, tractor)
|
||||
local okDispatch, err = pcall(dispatchOne, adEnv, order, tractor, silosById, storesById, true)
|
||||
if not okDispatch then
|
||||
Logging.warning(ADFieldSilos.LOG_PREFIX .. "'%s' kunne ikke starte turen med puljevognen: %s", tostring(ADRuns.vehicleLabel(tractor)), tostring(err))
|
||||
|
||||
@@ -1203,7 +1203,8 @@ function ADFieldWork.follow(adEnv, assignment)
|
||||
if park ~= nil then startAd(adEnv, vehicle, adEnv.AutoDrive.MODE_DRIVETO, park, nil) end
|
||||
return
|
||||
end
|
||||
-- koblet på: bredden med redskabet på (for bred -> hjem igen)
|
||||
-- koblet på: sammenfoldet til vejen, bredden med redskabet på (for bred -> hjem igen)
|
||||
pcall(ADHitch.foldForTransport, vehicle)
|
||||
local width = ADCpBridge.getWorkWidth(vehicle)
|
||||
local okWidth, widthReason, widthArgs = ADFieldModel.checkWidth(assignment.role, width, ADFieldModel.requiredWidth(field, assignment.role))
|
||||
if not okWidth then
|
||||
|
||||
@@ -23,7 +23,8 @@ ADHitch.TIMEOUT_REASON = {attach = "noAttachable", detach = "nothingToDetach", a
|
||||
ADHitch.ARRIVE_DISTANCE = 5 -- m fra markøren, AD standser traktoren tæt på waypointet
|
||||
ADHitch.STILL_SPEED = 1 -- km/t
|
||||
ADHitch.START_GRACE_MS = 3000 -- så længe må AD være om at komme i gang efter fetch/drop
|
||||
ADHitch.ACT_TIMEOUT_MS = 8000 -- så længe forsøges kobling/afkobling efter ankomst
|
||||
ADHitch.ACT_TIMEOUT_MS = 8000 -- så længe forsøges kobling efter ankomst
|
||||
ADHitch.DETACH_TIMEOUT_MS = 20000 -- afkobling: redskabet skal måske foldes ud først (plov: "unfold the tool")
|
||||
ADHitch.TICK_MS = 250
|
||||
ADHitch.ROUTE_WAIT_MS = 10000 -- pause ved almindelige markører midt i en tur
|
||||
|
||||
@@ -117,7 +118,8 @@ function ADHitch.step(job, state, dt, succeeded)
|
||||
job.state = "done"
|
||||
else
|
||||
job.actElapsed = job.actElapsed + dt
|
||||
if job.actElapsed >= ADHitch.ACT_TIMEOUT_MS then
|
||||
local limit = job.action == "detach" and ADHitch.DETACH_TIMEOUT_MS or ADHitch.ACT_TIMEOUT_MS
|
||||
if job.actElapsed >= limit then
|
||||
job.state, job.reason = "failed", ADHitch.TIMEOUT_REASON[job.action]
|
||||
end
|
||||
end
|
||||
@@ -217,6 +219,17 @@ local function isImplementPark(adEnv, vehicle, markerId)
|
||||
return false
|
||||
end
|
||||
|
||||
-- Efter påkobling: fold foldbare redskaber sammen til vejen (CP folder selv ud på marken).
|
||||
function ADHitch.foldForTransport(vehicle)
|
||||
for _, implement in ipairs(ADHitch.rearImplementsOf(vehicle)) do
|
||||
local object = implement.object
|
||||
local unfolded = object.getIsUnfolded ~= nil and object:getIsUnfolded()
|
||||
if unfolded and object.spec_foldable ~= nil and object.setFoldDirection ~= nil then
|
||||
object:setFoldDirection(-(object.spec_foldable.turnOnFoldDirection or 1))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ADHitch.rearImplementsOf(vehicle)
|
||||
return ADHitch.rearImplements(attachedImplements(vehicle))
|
||||
end
|
||||
@@ -236,6 +249,12 @@ function ADHitch.tryDetach(vehicle)
|
||||
local object = implement.object
|
||||
local allowed, warning = true, nil
|
||||
if object.isDetachAllowed ~= nil then allowed, warning = object:isDetachAllowed() end
|
||||
if not allowed and object.spec_foldable ~= nil and object.setFoldDirection ~= nil then
|
||||
-- plove o.l. må kun kobles af udfoldet (in-game 28/9: "You first need to unfold the tool") — fold ud
|
||||
-- og prøv igen ved næste tick, mens foldningen kører
|
||||
object:setFoldDirection(object.spec_foldable.turnOnFoldDirection or 1)
|
||||
return false, "unfolding: " .. tostring(warning)
|
||||
end
|
||||
if not allowed then return false, tostring(warning or "detachNotAllowed") end
|
||||
vehicle:detachImplementByObject(object)
|
||||
table.insert(names, implement.name)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.50.1.0</version>
|
||||
<version>1.50.2.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
@@ -47,7 +47,7 @@ check("job: opgivet efter vagt-tid", failJob.state, "failed")
|
||||
check("job: årsag", failJob.reason, "noAttachable")
|
||||
local dropJob = H.newJob(9, "Afkobl Bredal", "detach")
|
||||
H.step(dropJob, {adActive = false, distance = 1, speed = 0}, 500, false)
|
||||
for _ = 1, 20 do H.step(dropJob, {adActive = false, distance = 1, speed = 0}, 500, false) end
|
||||
for _ = 1, 45 do H.step(dropJob, {adActive = false, distance = 1, speed = 0}, 500, false) end
|
||||
check("job: afkobling opgivet", dropJob.reason, "nothingToDetach")
|
||||
local lostJob = H.newJob(25, "Connect Bredal", "attach")
|
||||
H.step(lostJob, {adActive = false, distance = 40, speed = 0}, 500, false)
|
||||
@@ -98,5 +98,12 @@ H.fetch(stubEnv, tractorStub, 9, function() end)
|
||||
check("annullér: job fandtes", H.cancel(tractorStub), true)
|
||||
check("annullér: AD stoppet", tractorStub.stopped, true)
|
||||
check("annullér: intet job tilbage", H.cancel(tractorStub), false)
|
||||
-- afkobling må tage længere tid (redskabet skal måske foldes ud først)
|
||||
local foldJob = H.newJob(4, "Plov", "detach")
|
||||
H.step(foldJob, {adActive = false, distance = 1, speed = 0}, 500, false)
|
||||
for _ = 1, 16 do H.step(foldJob, {adActive = false, distance = 1, speed = 0}, 500, false) end
|
||||
check("afkobling: stadig i gang efter 8 s (folder ud)", foldJob.state, "acting")
|
||||
for _ = 1, 30 do H.step(foldJob, {adActive = false, distance = 1, speed = 0}, 500, false) end
|
||||
check("afkobling: opgivet efter sin frist", foldJob.state, "failed")
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user