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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user