feat: forkert last ved Start læsses af i nærmeste silo før run'et fortsætter; run-mål gendannes ved næste tur (v1.11.6.0)
This commit is contained in:
@@ -309,6 +309,36 @@ function ADRunsController.validateVehicle(adEnv, run, vehicle)
|
||||
return result
|
||||
end
|
||||
|
||||
-- Vognens last som INGEN af run'ets mål tager -> {marker, fillType, liters} for en silo der gør
|
||||
-- (plads >= resten, vejnet til siloen og fra siloen til målet); nil når lasten passer eller
|
||||
-- ingen silo findes (så kører AD som normalt og Wait-logikken tager over).
|
||||
function ADRunsController.findWrongCargoDump(adEnv, run, vehicle, targetId)
|
||||
if ADUnloadWait == nil or ADUnloadWait.getRestLoad == nil or ADLoadSwap == nil or ADLoadSwap.findDumpMarker == nil then
|
||||
return nil
|
||||
end
|
||||
local fillType, liters = ADUnloadWait.getRestLoad(adEnv, vehicle)
|
||||
if fillType == nil or liters < 100 then
|
||||
return nil
|
||||
end
|
||||
local farmId = ADSmartPickup.getFarmId(vehicle)
|
||||
for _, entry in ipairs(getTargetStations(adEnv, run, farmId)) do
|
||||
if ADSmartPickup.getStationLevelAndCapacity(entry.station, fillType, farmId) ~= nil then
|
||||
return nil
|
||||
end
|
||||
end
|
||||
local isReachable = function(markerId)
|
||||
return ADUnloadWait.hasRouteBothWays == nil or ADUnloadWait.hasRouteBothWays(adEnv, vehicle, markerId, targetId)
|
||||
end
|
||||
local marker = ADLoadSwap.findDumpMarker(adEnv, vehicle, fillType, liters, targetId, isReachable)
|
||||
local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
|
||||
if marker == nil then
|
||||
Logging.warning(ADRunsController.LOG_PREFIX .. "run '%s': '%s' har %.0f l %s på vognen, som målet ikke tager, og ingen silo med plads/vejnet tager den — AutoDrive starter som normalt", tostring(run.name), tostring(vehicle:getName()), liters, tostring(fillTypeName))
|
||||
return nil
|
||||
end
|
||||
Logging.info(ADRunsController.LOG_PREFIX .. "run '%s': '%s' læsser først %.0f l %s af i %s (markør %s) — målet tager ikke varen", tostring(run.name), tostring(vehicle:getName()), liters, tostring(fillTypeName), tostring(marker.name), tostring(marker.markerIndex or marker.id))
|
||||
return {marker = marker, fillType = fillType, liters = liters}
|
||||
end
|
||||
|
||||
-- ---- Start / Stop ----
|
||||
|
||||
-- AD gemmer indstillinger som INDEKS i values; useFolders er global, rotateTargets pr. køretøj.
|
||||
@@ -360,7 +390,11 @@ local function applyRunToVehicle(adEnv, run, vehicle, ingredients)
|
||||
local stateModule = vehicle.ad.stateModule
|
||||
local farmId = ADSmartPickup.getFarmId(vehicle)
|
||||
stateModule:setMode(adEnv.AutoDrive.MODE_PICKUPANDDELIVER)
|
||||
stateModule:setSecondMarkerByWayPointId(ADRunsController.chooseTarget(adEnv, run, vehicle) or run.targetWayPointId)
|
||||
-- Forkert last på vognen (fx halm fra et tidligere run, mål = sukkerfabrik): første stop
|
||||
-- bliver en silo der tager varen; næste tur sætter choosePickup målet tilbage til run'ets.
|
||||
local targetId = ADRunsController.chooseTarget(adEnv, run, vehicle) or run.targetWayPointId
|
||||
local dump = ADRunsController.findWrongCargoDump(adEnv, run, vehicle, targetId)
|
||||
stateModule:setSecondMarkerByWayPointId(dump ~= nil and dump.marker.id or targetId)
|
||||
local loadMarker = findNearestLoadMarker(adEnv, vehicle, farmId)
|
||||
if loadMarker ~= nil then
|
||||
stateModule:setFirstMarkerByWayPointId(loadMarker.id)
|
||||
|
||||
Reference in New Issue
Block a user