feat: læs-bytte fra Wait — rest afleveres i silo når målet mangler en anden vare

This commit is contained in:
2026-09-22 23:13:22 +02:00
parent a2fcfaf4a7
commit e9f8c57d60
4 changed files with 182 additions and 4 deletions
+13 -4
View File
@@ -96,6 +96,9 @@ local function release(vehicle)
claims[wait.waitMarker.id] = nil
end
waits[vehicle] = nil
if ADLoadSwap ~= nil then
ADLoadSwap.clearWarning(vehicle)
end
end
-- Står køretøjet ved målet med rest-læs, som målet ikke kan tage? Så find et Wait-punkt.
@@ -136,7 +139,7 @@ local function startWaiting(adEnv, task)
end
-- Ventende køretøj: er der nu plads til hele resten, køres tilbage til målet.
local function updateWaiting(adEnv, task, wait)
local function updateWaiting(adEnv, task, wait, dt)
local vehicle = task.vehicle
if wait.task ~= task then
release(vehicle)
@@ -149,6 +152,12 @@ local function updateWaiting(adEnv, task, wait)
end
local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType)
if free == nil or not ADSupplyPlanner.canUnloadRest(free, rest, capacity) then
if ADLoadSwap ~= nil then
local isReachable = function(markerId)
return hasRouteBothWays(adEnv, vehicle, markerId, wait.homeDestinationID)
end
ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirect, release, isReachable)
end
return
end
local home = wait.homeDestinationID
@@ -157,10 +166,10 @@ local function updateWaiting(adEnv, task, wait)
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' kører tilbage fra %s og læsser %.0f l af (målet har %.0f l fri)", tostring(vehicle:getName()), tostring(wait.waitMarker.name), rest, free)
end
function ADUnloadWait.beforeUpdate(adEnv, task)
function ADUnloadWait.beforeUpdate(adEnv, task, dt)
local wait = waits[task.vehicle]
if wait ~= nil then
updateWaiting(adEnv, task, wait)
updateWaiting(adEnv, task, wait, dt)
else
startWaiting(adEnv, task)
end
@@ -204,7 +213,7 @@ function ADUnloadWait.install(adEnv)
local originalUpdate, originalFinished, originalGetSetting = task.update, task.finished, autoDrive.getSetting
task.update = function(self, dt)
local ok, err = pcall(ADUnloadWait.beforeUpdate, adEnv, self)
local ok, err = pcall(ADUnloadWait.beforeUpdate, adEnv, self, dt)
if not ok then
Logging.warning(ADUnloadWait.LOG_PREFIX .. "fejl i Wait-punkt-logik, AutoDrive fortsætter selv: %s", tostring(err))
release(self.vehicle)