feat(lager): lagerture undgår markører andre udkørsels-forløb henter fra (Milk Store læsser af ved 'unload', ikke ved 'Load') (v1.17.5.0)

This commit is contained in:
2026-09-24 04:07:51 +02:00
parent c0f523700e
commit 73e886ee26
8 changed files with 82 additions and 13 deletions
+18 -7
View File
@@ -54,7 +54,23 @@ end
-- Nærmeste silo med plads til resten og vejnet fra traktoren; siloer der allerede har varen
-- foretrækkes. Returnerer marker — eller nil + en forklaring (til loggen).
-- excludedPlaceables (valgfri): {[placeable] = true} der aldrig må vælges (fx udkørslens kilder).
function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointId, isReachable, excludedPlaceables)
-- Rækkefølge for aflæsnings-siloer: markører et forløb HENTER fra (avoidMarkers = {[id] = true}) sidst —
-- ellers læsser en lagertur af dér hvor en salgstur skal læsse (samme tank-række); dernæst siloer der
-- allerede har varen, så nærmeste. Returnerer en ny sorteret liste.
function ADLoadSwap.rankDumpCandidates(candidates, avoidMarkers)
local ranked = {}
for _, candidate in ipairs(candidates or {}) do table.insert(ranked, candidate) end
local function avoided(candidate) return avoidMarkers ~= nil and avoidMarkers[candidate.marker.id] == true end
table.sort(ranked, function(a, b)
if avoided(a) ~= avoided(b) then return not avoided(a) end
if a.hasFillType ~= b.hasFillType then return a.hasFillType end
if a.distance ~= b.distance then return a.distance < b.distance end
return a.marker.id < b.marker.id
end)
return ranked
end
function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointId, isReachable, excludedPlaceables, avoidMarkers)
if vehicle.rootNode == nil then
return nil, "køretøjet har ingen position"
end
@@ -82,12 +98,7 @@ function ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, rest, homeWayPointI
end
end
end
table.sort(candidates, function(a, b)
if a.hasFillType ~= b.hasFillType then
return a.hasFillType
end
return a.distance < b.distance
end)
candidates = ADLoadSwap.rankDumpCandidates(candidates, avoidMarkers)
for _, candidate in ipairs(candidates) do
if isReachable(candidate.marker.id) then
return candidate.marker