fix: Wait udløses også når AD stopper vognen i triggeren før markøren (isTargetReached aldrig sand) — 'fremme' = markør nået, inden for AD's trigger-afstand, eller AD tipper (v1.11.12.0)
This commit is contained in:
@@ -147,13 +147,36 @@ local function release(vehicle)
|
||||
end
|
||||
end
|
||||
|
||||
-- "Fremme ved målet": AD stopper vognen så snart den står i aflæsningstriggeren — ofte
|
||||
-- 5–10 m FØR markøren, så isTargetReached() bliver aldrig sand (set ved sukkerfabrikken).
|
||||
-- Derfor tæller også AD's eget mål for tipning (afstand til aflæsningsstedet inden for
|
||||
-- AD's trigger-afstand) og at AD er i gang med at tippe.
|
||||
local function isAtUnloadTarget(adEnv, vehicle)
|
||||
if vehicle.ad.drivePathModule:isTargetReached() then
|
||||
return true
|
||||
end
|
||||
local trailerModule = vehicle.ad.trailerModule
|
||||
if trailerModule ~= nil and trailerModule.isUnloading then
|
||||
return true
|
||||
end
|
||||
local autoDrive = adEnv.AutoDrive
|
||||
if autoDrive.getDistanceToUnloadPosition ~= nil and autoDrive.getMaxTriggerDistance ~= nil then
|
||||
local ok, distance = pcall(autoDrive.getDistanceToUnloadPosition, vehicle)
|
||||
local okMax, maxDistance = pcall(autoDrive.getMaxTriggerDistance, vehicle)
|
||||
if ok and okMax and type(distance) == "number" and type(maxDistance) == "number" then
|
||||
return distance <= maxDistance
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- Står køretøjet ved målet med rest-læs, som målet ikke kan tage? Så find et Wait-punkt.
|
||||
local function startWaiting(adEnv, task)
|
||||
local vehicle = task.vehicle
|
||||
-- Kun "fremme ved målet". At AD stadig regner vognen som aflæssende (isActiveAtTrigger)
|
||||
-- tæller IKKE med: ved et fuldt fodertrug bliver isUnloading stående for evigt, selv om
|
||||
-- intet løber — og så blokerede traktoren stalden i stedet for at køre til Wait.
|
||||
if not vehicle.ad.drivePathModule:isTargetReached() then
|
||||
if not isAtUnloadTarget(adEnv, vehicle) then
|
||||
return
|
||||
end
|
||||
-- Efter et bytte er opgavens mål en silo, ikke AD's rigtige aflæsningsmål (anden markør);
|
||||
@@ -253,6 +276,10 @@ local function debugAtTarget(adEnv, task, dt)
|
||||
return
|
||||
end
|
||||
local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType)
|
||||
-- kun den tilstand vi vil se: målet fuldt/afvist, og traktoren venter ikke ved et Wait-punkt
|
||||
if waits[vehicle] ~= nil or (free ~= nil and free >= ADUnloadWait.MIN_FREE_TO_UNLOAD) then
|
||||
return
|
||||
end
|
||||
local trailerModule = vehicle.ad.trailerModule
|
||||
local states = {}
|
||||
for _, unit in ipairs(adEnv.AutoDrive.getAllDischargeableUnits(vehicle) or {}) do
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.11.11.0</version>
|
||||
<version>1.11.12.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
Reference in New Issue
Block a user