fix: runs-controller — ingen global fallback for køretøjs-indstilling; id-opslag via map
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user