feat: overblik øverst i fanen — pr. run: status, hver traktors aktivitet (kører med læs/tom mod silo/venter), målets niveauer (v1.10.0.0)

This commit is contained in:
2026-09-23 01:41:58 +02:00
parent 064849c860
commit 12c25deac6
8 changed files with 213 additions and 34 deletions
+61
View File
@@ -403,6 +403,67 @@ function ADRunsController.getRunStatus(adEnv, run)
return {running = running, total = #run.vehicleIds}
end
-- ---- overblik ----
-- Hvad laver traktoren lige nu? {kind = "stopped"|"waiting"|"loaded"|"empty", fillType, liters, place}
-- place = Wait-markør, aflæsningsmål eller den silo moden valgte. Kun eksisterende data bruges.
function ADRunsController.getVehicleActivity(adEnv, vehicle)
if not isVehicleActive(vehicle) then
return {kind = "stopped"}
end
local wait = ADUnloadWait ~= nil and ADUnloadWait.getWaitFor ~= nil and ADUnloadWait.getWaitFor(vehicle) or nil
if wait ~= nil then
return {kind = "waiting", fillType = wait.fillType, liters = wait.rest, place = wait.markerName}
end
local fillType, liters = nil, 0
if ADUnloadWait ~= nil and ADUnloadWait.getRestLoad ~= nil then
fillType, liters = ADUnloadWait.getRestLoad(adEnv, vehicle)
end
local stateModule = vehicle.ad.stateModule
if fillType ~= nil and liters >= 100 then
local target = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil
return {kind = "loaded", fillType = fillType, liters = liters, place = target ~= nil and target.name or nil}
end
local pickup = ADSmartPickup.getActivePickup ~= nil and ADSmartPickup.getActivePickup(vehicle) or nil
if pickup ~= nil then
return {kind = "empty", fillType = pickup.fillType, place = pickup.markerName}
end
local first = stateModule.getFirstMarker ~= nil and stateModule:getFirstMarker() or nil
return {kind = "empty", place = first ~= nil and first.name or nil}
end
-- Målets niveauer for run'ets varer: {{fillType, level, capacity}, ...} mest trængende først.
function ADRunsController.getTargetLevels(adEnv, run)
local farmId = g_currentMission:getFarmId()
local target = run.targetWayPointId ~= nil and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, run.targetWayPointId, farmId) or nil
if target == nil then
return {}
end
local fillTypes = {}
if run.ingredientMode == "manual" then
for _, name in ipairs(run.ingredients) do
local index = g_fillTypeManager:getFillTypeIndexByName(name)
if index ~= nil then table.insert(fillTypes, index) end
end
else
for _, fillType in ipairs(ADRunsController.getTargetAcceptedFillTypes(adEnv, run)) do
table.insert(fillTypes, fillType.index)
end
end
local levels = {}
for _, fillType in ipairs(fillTypes) do
local level, capacity = ADSmartPickup.getStationLevelAndCapacity(target, fillType, farmId)
if level ~= nil then
table.insert(levels, {fillType = fillType, level = level, capacity = capacity, free = capacity - level})
end
end
table.sort(levels, function(a, b)
if a.free ~= b.free then return a.free > b.free end
return a.fillType < b.fillType
end)
return levels
end
-- ---- opslag til dropdowns ----
-- Mål er steder der SKAL holdes fyldt: stalde (1) og fabrikker (2). Siloer tager alt og