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
|
||||||
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.
|
-- 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 function startWaiting(adEnv, task)
|
||||||
local vehicle = task.vehicle
|
local vehicle = task.vehicle
|
||||||
-- Kun "fremme ved målet". At AD stadig regner vognen som aflæssende (isActiveAtTrigger)
|
-- 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
|
-- 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.
|
-- 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
|
return
|
||||||
end
|
end
|
||||||
-- Efter et bytte er opgavens mål en silo, ikke AD's rigtige aflæsningsmål (anden markør);
|
-- 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
|
return
|
||||||
end
|
end
|
||||||
local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType)
|
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 trailerModule = vehicle.ad.trailerModule
|
||||||
local states = {}
|
local states = {}
|
||||||
for _, unit in ipairs(adEnv.AutoDrive.getAllDischargeableUnits(vehicle) or {}) do
|
for _, unit in ipairs(adEnv.AutoDrive.getAllDischargeableUnits(vehicle) or {}) do
|
||||||
|
|||||||
@@ -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.11.11.0</version>
|
<version>1.11.12.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -771,6 +771,18 @@ e5Food[HAY] = 21000
|
|||||||
check("E5 halmlager tommere end truget -> halm", manager:getNextPickup(e5Driver, false), 21)
|
check("E5 halmlager tommere end truget -> halm", manager:getNextPickup(e5Driver, false), 21)
|
||||||
g_currentMission.animalFoodSystem = nil
|
g_currentMission.animalFoodSystem = nil
|
||||||
|
|
||||||
|
-- W13: AD stopper vognen i triggeren FØR markøren (isTargetReached=false) — Wait udløses alligevel
|
||||||
|
-- når vognen er inden for AD's trigger-afstand til aflæsningsstedet
|
||||||
|
buildWaitWorld()
|
||||||
|
local vn, tn = makeUnloadingVehicle("Fastrac Før markør", 581, 5000, 35000)
|
||||||
|
vn.targetReached = false
|
||||||
|
FS25_AutoDrive.AutoDrive.getDistanceToUnloadPosition = function() return 8.6 end
|
||||||
|
FS25_AutoDrive.AutoDrive.getMaxTriggerDistance = function() return 15 end
|
||||||
|
UnloadTask.update(tn, 16)
|
||||||
|
check("W13 Wait selv om markøren ikke er nået", tn.destinationID, 40)
|
||||||
|
FS25_AutoDrive.AutoDrive.getDistanceToUnloadPosition = nil
|
||||||
|
FS25_AutoDrive.AutoDrive.getMaxTriggerDistance = nil
|
||||||
|
|
||||||
-- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ====
|
-- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ====
|
||||||
-- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste)
|
-- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste)
|
||||||
local runDriver = buildCowWorld()
|
local runDriver = buildCowWorld()
|
||||||
|
|||||||
Reference in New Issue
Block a user