fix(kobling): afkobling bekræftes — først 'koblet af' når intet sidder bag traktoren, ellers nyt forsøg i op til 20 s og turen stoppes; før kørte traktoren videre med vognen (v1.53.2.0)
This commit is contained in:
@@ -107,6 +107,12 @@ function ADHitch.newJob(markerId, markerName, action)
|
|||||||
actElapsed = 0, seenActive = false}
|
actElapsed = 0, seenActive = false}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Afkobling bekræftes: "done" først når intet sidder bag traktoren efter et forsøg. -> "attempt" | "done" | "nothing"
|
||||||
|
function ADHitch.detachStep(rearCount, attempted)
|
||||||
|
if rearCount > 0 then return "attempt" end
|
||||||
|
return attempted and "done" or "nothing"
|
||||||
|
end
|
||||||
|
|
||||||
-- Et skridt i jobbet. succeeded = lykkedes kobling/afkobling i denne tick (kun relevant i "acting").
|
-- Et skridt i jobbet. succeeded = lykkedes kobling/afkobling i denne tick (kun relevant i "acting").
|
||||||
-- Tilstande: driving -> acting -> done | failed (reason: stoppedAway / noAttachable / nothingToDetach)
|
-- Tilstande: driving -> acting -> done | failed (reason: stoppedAway / noAttachable / nothingToDetach)
|
||||||
function ADHitch.step(job, state, dt, succeeded)
|
function ADHitch.step(job, state, dt, succeeded)
|
||||||
@@ -251,10 +257,13 @@ local function parkIdOf(adEnv, vehicle)
|
|||||||
return marker ~= nil and marker.id or nil
|
return marker ~= nil and marker.id or nil
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag
|
-- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag. Med job bekræftes afkoblingen ved næste tick
|
||||||
function ADHitch.tryDetach(vehicle)
|
-- (ok først når intet sidder bagpå); uden job (konsol) meldes ok straks efter kaldet.
|
||||||
|
function ADHitch.tryDetach(vehicle, job)
|
||||||
local rear = ADHitch.rearImplements(attachedImplements(vehicle))
|
local rear = ADHitch.rearImplements(attachedImplements(vehicle))
|
||||||
if #rear == 0 then return false, "nothingToDetach" end
|
local step = ADHitch.detachStep(#rear, job ~= nil and job.detachNames ~= nil)
|
||||||
|
if step == "done" then return true, job.detachNames end
|
||||||
|
if step == "nothing" then return false, "nothingToDetach" end
|
||||||
local names = {}
|
local names = {}
|
||||||
for _, implement in ipairs(rear) do
|
for _, implement in ipairs(rear) do
|
||||||
local object = implement.object
|
local object = implement.object
|
||||||
@@ -270,7 +279,15 @@ function ADHitch.tryDetach(vehicle)
|
|||||||
vehicle:detachImplementByObject(object)
|
vehicle:detachImplementByObject(object)
|
||||||
table.insert(names, implement.name)
|
table.insert(names, implement.name)
|
||||||
end
|
end
|
||||||
return true, table.concat(names, ", ")
|
if job == nil then return true, table.concat(names, ", ") end
|
||||||
|
if job.detachNames ~= nil then
|
||||||
|
job.detachRetries = (job.detachRetries or 0) + 1
|
||||||
|
if job.detachRetries == 1 then
|
||||||
|
Logging.warning(ADHitch.LOG_PREFIX .. "'%s': '%s' sidder der stadig efter afkobling — prøver igen", vehicleName(vehicle), table.concat(names, ", "))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
job.detachNames = job.detachNames or table.concat(names, ", ")
|
||||||
|
return false, "stillAttached: " .. table.concat(names, ", ")
|
||||||
end
|
end
|
||||||
|
|
||||||
local function start(adEnv, vehicle, markerId, action, onDone)
|
local function start(adEnv, vehicle, markerId, action, onDone)
|
||||||
@@ -425,7 +442,7 @@ function ADHitch.tick(adEnv, dt)
|
|||||||
for vehicle, job in pairs(current) do
|
for vehicle, job in pairs(current) do
|
||||||
local succeeded, detail = false, nil
|
local succeeded, detail = false, nil
|
||||||
if job.state == "acting" then
|
if job.state == "acting" then
|
||||||
succeeded, detail = ACTIONS[job.action](vehicle)
|
succeeded, detail = ACTIONS[job.action](vehicle, job)
|
||||||
if not succeeded then job.lastReason = detail end
|
if not succeeded then job.lastReason = detail end
|
||||||
end
|
end
|
||||||
local state = vehicleState(adEnv, vehicle, job.markerId)
|
local state = vehicleState(adEnv, vehicle, job.markerId)
|
||||||
|
|||||||
@@ -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.53.1.0</version>
|
<version>1.53.2.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -109,5 +109,11 @@ for _ = 1, 16 do H.step(foldJob, {adActive = false, distance = 1, speed = 0}, 50
|
|||||||
check("afkobling: stadig i gang efter 8 s (folder ud)", foldJob.state, "acting")
|
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
|
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")
|
check("afkobling: opgivet efter sin frist", foldJob.state, "failed")
|
||||||
|
-- afkobling bekræftes: først "done" når intet sidder bag traktoren efter et forsøg (in-game 29/9: loggede
|
||||||
|
-- "koblede af", men vognen sad der stadig, og traktoren kørte med den)
|
||||||
|
check("afkobl: redskab bagpå -> forsøg", H.detachStep(1, false), "attempt")
|
||||||
|
check("afkobl: forsøgt, sidder der stadig -> forsøg igen", H.detachStep(1, true), "attempt")
|
||||||
|
check("afkobl: forsøgt, intet bagpå -> færdig", H.detachStep(0, true), "done")
|
||||||
|
check("afkobl: intet bagpå fra start", H.detachStep(0, false), "nothing")
|
||||||
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