From bd446f8add3224eb2fd5fb123940826551c99dff Mon Sep 17 00:00:00 2001 From: masterdraco Date: Tue, 22 Sep 2026 22:46:29 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20controller-opslag=20til=20GUI=20(m?= =?UTF-8?q?=C3=A5lets=20varer,=20k=C3=B8ret=C3=B8js-label,=20Wait-reservat?= =?UTF-8?q?ioner)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adRunsController.lua | 31 +++++++++++++++++++++++++ FS25_ADSmartPickup/adUnloadWait.lua | 17 ++++++++++++++ tests/test_adRunsController.lua | 21 +++++++++++++++++ tests/test_adSmartPickup.lua | 9 +++++++ 4 files changed, 78 insertions(+) diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 9a4670e..11a4ade 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -140,6 +140,37 @@ function ADRunsController.getRunIngredients(adEnv, run, vehicle) return ADRunsController.getTargetFillTypes(adEnv, run, vehicle) end +-- Alle varer målet tager (uanset vogn) — afkrydsningslisten i GUI'et. {index, name, title}, sorteret på titel. +function ADRunsController.getTargetAcceptedFillTypes(adEnv, run) + if run.targetWayPointId == nil then + return {} + end + local farmId = g_currentMission:getFarmId() + local target = ADSmartPickup.getUnloadStationAtWayPointId(adEnv, run.targetWayPointId, farmId) + if target == nil then + return {} + end + local fillTypes = g_fillTypeManager.getFillTypes ~= nil and g_fillTypeManager:getFillTypes() or g_fillTypeManager.fillTypes or {} + local result = {} + for _, fillType in ipairs(fillTypes) do + if fillType.index ~= nil and ADSmartPickup.getStationLevelAndCapacity(target, fillType.index, farmId) ~= nil then + table.insert(result, {index = fillType.index, name = fillType.name, title = fillType.title or fillType.name}) + end + end + table.sort(result, function(a, b) return tostring(a.title) < tostring(b.title) end) + return result +end + +-- Fire traktorer kan hedde det samme; løbenummeret er pladsen i farmens AD-køretøjsliste. +function ADRunsController.getVehicleLabel(adEnv, vehicle) + for index, candidate in ipairs(ADRunsController.getFarmVehicles(adEnv)) do + if candidate == vehicle then + return string.format("%s (#%d)", tostring(vehicle:getName()), index) + end + end + return tostring(vehicle:getName()) +end + -- ---- validering ---- local function getLoadCapacity(adEnv, vehicle) diff --git a/FS25_ADSmartPickup/adUnloadWait.lua b/FS25_ADSmartPickup/adUnloadWait.lua index abb7b0f..62ba880 100644 --- a/FS25_ADSmartPickup/adUnloadWait.lua +++ b/FS25_ADSmartPickup/adUnloadWait.lua @@ -176,6 +176,23 @@ function ADUnloadWait.releaseInactive() end end +-- Hvem holder hvor (GUI'ets Wait-puljer-visning). Sorteret på mappe, dernæst markør-id. +function ADUnloadWait.getClaims() + local result = {} + for _, wait in pairs(waits) do + if wait.waitMarker ~= nil and claims[wait.waitMarker.id] ~= nil then + table.insert(result, {marker = wait.waitMarker, vehicle = claims[wait.waitMarker.id]}) + end + end + table.sort(result, function(a, b) + if a.marker.group ~= b.marker.group then + return tostring(a.marker.group) < tostring(b.marker.group) + end + return a.marker.id < b.marker.id + end) + return result +end + function ADUnloadWait.install(adEnv) local task, autoDrive = adEnv.UnloadAtDestinationTask, adEnv.AutoDrive if isInstalled or task == nil or task.update == nil or autoDrive == nil or autoDrive.getSetting == nil then diff --git a/tests/test_adRunsController.lua b/tests/test_adRunsController.lua index eed3793..fb7cbd0 100644 --- a/tests/test_adRunsController.lua +++ b/tests/test_adRunsController.lua @@ -9,6 +9,14 @@ for index, name in pairs(FILL_TYPE_NAMES) do FILL_TYPE_INDEX[name] = index end g_fillTypeManager = { getFillTypeNameByIndex = function(_, index) return FILL_TYPE_NAMES[index] end, getFillTypeIndexByName = function(_, name) return FILL_TYPE_INDEX[name] end, + getFillTypes = function() + return { + {index = STRAW, name = "STRAW", title = "Halm"}, + {index = TMR, name = "FORAGE", title = "TMR"}, + {index = WATER, name = "WATER", title = "Vand"}, + {index = MILK, name = "MILK", title = "Mælk"}, + } + end, } local logLines = {} Logging = { @@ -245,5 +253,18 @@ check("C11 global rotateTargets urørt", adEnv.AutoDrive.settings.rotateTargets. check("C11 useFolders global stadig skrevet", adEnv.AutoDrive.settings.useFolders.current, 2) check("C11 køretøjet startet", noSettings.started, 1) +-- C10: målets accepterede varer (til afkrydsning i GUI'et) + køretøjs-label +buildWorld() +local labelA = makeVehicle("vehicleA", "Fastrac A", {STRAW, TMR}, 1000000) +local labelB = makeVehicle("vehicleB", "Fastrac B", {STRAW}, 700000) +local accRun = ADRunsController.createRun("Cow Feed") +check("C10 uden mål -> tom", #ADRunsController.getTargetAcceptedFillTypes(adEnv, ADRuns.getRun(ADRunsController.store, accRun.id)), 0) +ADRunsController.updateRun(accRun.id, {targetWayPointId = 94}) +local accepted = ADRunsController.getTargetAcceptedFillTypes(adEnv, ADRuns.getRun(ADRunsController.store, accRun.id)) +check("C10 tre varer (halm, TMR, vand)", #accepted, 3) +check("C10 sorteret på titel", accepted[1].title .. "," .. accepted[2].title .. "," .. accepted[3].title, "Halm,TMR,Vand") +check("C10 navn med", accepted[1].name, "STRAW") +check("C10 label", ADRunsController.getVehicleLabel(adEnv, labelB), "Fastrac B (#2)") + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1) diff --git a/tests/test_adSmartPickup.lua b/tests/test_adSmartPickup.lua index 6c4f67d..9b61381 100644 --- a/tests/test_adSmartPickup.lua +++ b/tests/test_adSmartPickup.lua @@ -707,6 +707,15 @@ listener:update(16) FS25_AutoDrive.LoadAtDestinationTask.update(stopperTask, 16) check("L7 greb ryddet når AD stopper", stopperTask.seenRotate, RT_ONLYPICKUP) +-- W11: reservationer kan aflæses (GUI'ets Wait-puljer-visning) +buildWaitWorld() +local vc1, tc1 = makeUnloadingVehicle("Fastrac Claim", 531, 5000, 35000) +UnloadTask.update(tc1, 16) +local claims = ADUnloadWait.getClaims() +check("W11 én reservation", #claims, 1) +check("W11 markør", claims[1].marker.id, 40) +check("W11 køretøj", claims[1].vehicle, vc1) + -- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ==== -- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste) local runDriver = buildCowWorld()