fix: runs-controller — ingen global fallback for køretøjs-indstilling; id-opslag via map

This commit is contained in:
2026-09-22 22:35:30 +02:00
parent c0d0edac69
commit 264a07c697
2 changed files with 40 additions and 9 deletions
+26 -9
View File
@@ -47,13 +47,21 @@ function ADRunsController.getFarmVehicles(adEnv)
return result
end
function ADRunsController.findVehicleById(adEnv, vehicleId)
-- Ét map pr. kald i stedet for at genscanne getFarmVehicles pr. vehicleId — startRun/stopRun/
-- getRunStatus/load slår flere id'er op pr. kald, og GUI'et kalder getRunStatus hvert sekund.
local function getFarmVehiclesById(adEnv)
local byId = {}
for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do
if ADRunsController.getVehicleId(vehicle) == vehicleId then
return vehicle
local id = ADRunsController.getVehicleId(vehicle)
if id ~= nil then
byId[id] = vehicle
end
end
return nil
return byId
end
function ADRunsController.findVehicleById(adEnv, vehicleId)
return getFarmVehiclesById(adEnv)[vehicleId]
end
function ADRunsController.getRunForVehicle(vehicle)
@@ -182,13 +190,18 @@ end
-- ---- Start / Stop ----
-- AD gemmer indstillinger som INDEKS i values; useFolders er global, rotateTargets pr. køretøj.
-- Er indstillingen køretøjs-specifik, men køretøjet mangler sin egen settings-tabel, skrives
-- der IKKE til den globale tabel — det ville ødelægge AD's globale default for alle køretøjer.
local function setSetting(adEnv, vehicle, settingName, value)
local global = adEnv.AutoDrive.settings[settingName]
if global == nil then
return
end
local setting = global
if global.isVehicleSpecific and vehicle.ad.settings ~= nil and vehicle.ad.settings[settingName] ~= nil then
if global.isVehicleSpecific then
if vehicle.ad.settings == nil or vehicle.ad.settings[settingName] == nil then
return
end
setting = vehicle.ad.settings[settingName]
end
for index, candidate in ipairs(setting.values) do
@@ -247,8 +260,9 @@ function ADRunsController.startRun(adEnv, runId)
if run == nil then
return results
end
local vehiclesById = getFarmVehiclesById(adEnv)
for _, vehicleId in ipairs(run.vehicleIds) do
local vehicle = ADRunsController.findVehicleById(adEnv, vehicleId)
local vehicle = vehiclesById[vehicleId]
if vehicle ~= nil then
local validation = ADRunsController.validateVehicle(adEnv, run, vehicle)
local result = {vehicle = vehicle, ok = validation.ok, reason = validation.reason}
@@ -277,8 +291,9 @@ function ADRunsController.stopRun(adEnv, runId)
if run == nil then
return stopped
end
local vehiclesById = getFarmVehiclesById(adEnv)
for _, vehicleId in ipairs(run.vehicleIds) do
local vehicle = ADRunsController.findVehicleById(adEnv, vehicleId)
local vehicle = vehiclesById[vehicleId]
if vehicle ~= nil and isVehicleActive(vehicle) then
vehicle:stopAutoDrive()
stopped = stopped + 1
@@ -289,8 +304,9 @@ end
function ADRunsController.getRunStatus(adEnv, run)
local running = 0
local vehiclesById = getFarmVehiclesById(adEnv)
for _, vehicleId in ipairs(run.vehicleIds) do
local vehicle = ADRunsController.findVehicleById(adEnv, vehicleId)
local vehicle = vehiclesById[vehicleId]
if vehicle ~= nil and isVehicleActive(vehicle) then
running = running + 1
end
@@ -345,9 +361,10 @@ function ADRunsController.load(adEnv)
return
end
ADRunsController.store = store
local vehiclesById = getFarmVehiclesById(adEnv)
for _, run in ipairs(store.runs) do
for _, vehicleId in ipairs(run.vehicleIds) do
if ADRunsController.findVehicleById(adEnv, vehicleId) == nil then
if vehiclesById[vehicleId] == nil then
Logging.info(ADRunsController.LOG_PREFIX .. "run '%s': køretøj %s findes ikke (endnu) i dette savegame", tostring(run.name), tostring(vehicleId))
end
end