fix: pålæsningsdiagnose kun ved stationen (ikke Wait/mark)
This commit is contained in:
@@ -2,11 +2,13 @@
|
||||
-- Diagnose når AutoDrive står ved et LOAD-mål uden at fylde (in-game 30/9: Fendt + MEGA-sprøjte ved "Market Price
|
||||
-- Liquid Fill Station"). AutoDrive fylder kun, når en fyldenhed står i triggerens boks (trigger.fillableObjects) og
|
||||
-- triggeren har varen. Efter REPORT_MS ved målet uden fremgang skrives én linje: markør, vare, og for hver vogn den
|
||||
-- nærmeste AD-læssetrigger (afstand, har varen?, står vognen i boksen?). Ingen indgreb — kun log.
|
||||
-- nærmeste AD-læssetrigger (afstand, har varen?, står vognen i boksen?). Kun når en trigger med varen er inden for
|
||||
-- NEAR_M (holder ved Wait-punkter logges ikke). Ingen indgreb — kun log.
|
||||
|
||||
ADLoadDiag = {}
|
||||
ADLoadDiag.LOG_PREFIX = "ADSmartPickup: pålæsning: "
|
||||
ADLoadDiag.REPORT_MS = 30000
|
||||
ADLoadDiag.NEAR_M = 20 -- m: trigger med varen herinden for = køretøjet står ved stationen (ellers Wait/mark: ingen log)
|
||||
|
||||
-- ---- ren logik ----
|
||||
|
||||
@@ -27,6 +29,14 @@ function ADLoadDiag.tick(state, dt, reached, level)
|
||||
return true
|
||||
end
|
||||
|
||||
-- distances = afstande fra vognene til nærmeste AD-trigger med varen -> står ved stationen?
|
||||
function ADLoadDiag.atStation(distances)
|
||||
for _, d in ipairs(distances or {}) do
|
||||
if d <= ADLoadDiag.NEAR_M then return true end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
-- ---- spil ----
|
||||
|
||||
local function fillTypeName(fillType)
|
||||
@@ -65,20 +75,23 @@ local function describeTrailer(adEnv, trailer, fillType)
|
||||
inBox(nearestOk.trigger, trailer) and "i boksen" or "ikke i boksen"))
|
||||
end
|
||||
if nearestOk == nil then table.insert(parts, "INGEN AD-læssetrigger med varen") end
|
||||
return string.format("'%s': %s", tostring(name), table.concat(parts, ", "))
|
||||
return string.format("'%s': %s", tostring(name), table.concat(parts, ", ")), nearestOk ~= nil and nearestOk.d or nil
|
||||
end
|
||||
|
||||
local function report(adEnv, task)
|
||||
local vehicle = task.vehicle
|
||||
local fillType = vehicle.ad.stateModule.getFillType ~= nil and vehicle.ad.stateModule:getFillType() or nil
|
||||
local marker = task.destinationID ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(task.destinationID) or nil
|
||||
local lines = {}
|
||||
local lines, distances = {}, {}
|
||||
for _, trailer in ipairs(task.trailers or {}) do
|
||||
if trailer.getFillUnits ~= nil and #trailer:getFillUnits() > 0 then
|
||||
local ok, line = pcall(describeTrailer, adEnv, trailer, fillType)
|
||||
local ok, line, distance = pcall(describeTrailer, adEnv, trailer, fillType)
|
||||
if ok and line ~= nil then table.insert(lines, line) end
|
||||
if ok and distance ~= nil then table.insert(distances, distance) end
|
||||
end
|
||||
end
|
||||
-- holder ved Wait/mark (ingen trigger med varen tæt på): det er ikke en fejlet pålæsning
|
||||
if not ADLoadDiag.atStation(distances) then return end
|
||||
local maxDistance = adEnv.AutoDrive.getMaxTriggerDistance ~= nil and adEnv.AutoDrive.getMaxTriggerDistance(vehicle) or nil
|
||||
Logging.warning(ADLoadDiag.LOG_PREFIX .. "'%s' står ved '%s' uden at fylde %s i %d s (AD-triggerafstand %s m): %s",
|
||||
tostring(ADRuns.vehicleLabel(vehicle)), tostring(marker ~= nil and marker.name or task.destinationID), fillTypeName(fillType),
|
||||
|
||||
Reference in New Issue
Block a user