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
|
return result
|
||||||
end
|
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
|
for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do
|
||||||
if ADRunsController.getVehicleId(vehicle) == vehicleId then
|
local id = ADRunsController.getVehicleId(vehicle)
|
||||||
return vehicle
|
if id ~= nil then
|
||||||
|
byId[id] = vehicle
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return nil
|
return byId
|
||||||
|
end
|
||||||
|
|
||||||
|
function ADRunsController.findVehicleById(adEnv, vehicleId)
|
||||||
|
return getFarmVehiclesById(adEnv)[vehicleId]
|
||||||
end
|
end
|
||||||
|
|
||||||
function ADRunsController.getRunForVehicle(vehicle)
|
function ADRunsController.getRunForVehicle(vehicle)
|
||||||
@@ -182,13 +190,18 @@ end
|
|||||||
-- ---- Start / Stop ----
|
-- ---- Start / Stop ----
|
||||||
|
|
||||||
-- AD gemmer indstillinger som INDEKS i values; useFolders er global, rotateTargets pr. køretøj.
|
-- 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 function setSetting(adEnv, vehicle, settingName, value)
|
||||||
local global = adEnv.AutoDrive.settings[settingName]
|
local global = adEnv.AutoDrive.settings[settingName]
|
||||||
if global == nil then
|
if global == nil then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local setting = global
|
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]
|
setting = vehicle.ad.settings[settingName]
|
||||||
end
|
end
|
||||||
for index, candidate in ipairs(setting.values) do
|
for index, candidate in ipairs(setting.values) do
|
||||||
@@ -247,8 +260,9 @@ function ADRunsController.startRun(adEnv, runId)
|
|||||||
if run == nil then
|
if run == nil then
|
||||||
return results
|
return results
|
||||||
end
|
end
|
||||||
|
local vehiclesById = getFarmVehiclesById(adEnv)
|
||||||
for _, vehicleId in ipairs(run.vehicleIds) do
|
for _, vehicleId in ipairs(run.vehicleIds) do
|
||||||
local vehicle = ADRunsController.findVehicleById(adEnv, vehicleId)
|
local vehicle = vehiclesById[vehicleId]
|
||||||
if vehicle ~= nil then
|
if vehicle ~= nil then
|
||||||
local validation = ADRunsController.validateVehicle(adEnv, run, vehicle)
|
local validation = ADRunsController.validateVehicle(adEnv, run, vehicle)
|
||||||
local result = {vehicle = vehicle, ok = validation.ok, reason = validation.reason}
|
local result = {vehicle = vehicle, ok = validation.ok, reason = validation.reason}
|
||||||
@@ -277,8 +291,9 @@ function ADRunsController.stopRun(adEnv, runId)
|
|||||||
if run == nil then
|
if run == nil then
|
||||||
return stopped
|
return stopped
|
||||||
end
|
end
|
||||||
|
local vehiclesById = getFarmVehiclesById(adEnv)
|
||||||
for _, vehicleId in ipairs(run.vehicleIds) do
|
for _, vehicleId in ipairs(run.vehicleIds) do
|
||||||
local vehicle = ADRunsController.findVehicleById(adEnv, vehicleId)
|
local vehicle = vehiclesById[vehicleId]
|
||||||
if vehicle ~= nil and isVehicleActive(vehicle) then
|
if vehicle ~= nil and isVehicleActive(vehicle) then
|
||||||
vehicle:stopAutoDrive()
|
vehicle:stopAutoDrive()
|
||||||
stopped = stopped + 1
|
stopped = stopped + 1
|
||||||
@@ -289,8 +304,9 @@ end
|
|||||||
|
|
||||||
function ADRunsController.getRunStatus(adEnv, run)
|
function ADRunsController.getRunStatus(adEnv, run)
|
||||||
local running = 0
|
local running = 0
|
||||||
|
local vehiclesById = getFarmVehiclesById(adEnv)
|
||||||
for _, vehicleId in ipairs(run.vehicleIds) do
|
for _, vehicleId in ipairs(run.vehicleIds) do
|
||||||
local vehicle = ADRunsController.findVehicleById(adEnv, vehicleId)
|
local vehicle = vehiclesById[vehicleId]
|
||||||
if vehicle ~= nil and isVehicleActive(vehicle) then
|
if vehicle ~= nil and isVehicleActive(vehicle) then
|
||||||
running = running + 1
|
running = running + 1
|
||||||
end
|
end
|
||||||
@@ -345,9 +361,10 @@ function ADRunsController.load(adEnv)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
ADRunsController.store = store
|
ADRunsController.store = store
|
||||||
|
local vehiclesById = getFarmVehiclesById(adEnv)
|
||||||
for _, run in ipairs(store.runs) do
|
for _, run in ipairs(store.runs) do
|
||||||
for _, vehicleId in ipairs(run.vehicleIds) 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))
|
Logging.info(ADRunsController.LOG_PREFIX .. "run '%s': køretøj %s findes ikke (endnu) i dette savegame", tostring(run.name), tostring(vehicleId))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -231,5 +231,19 @@ ADRunsController.installSaveHook()
|
|||||||
ItemSystem.save()
|
ItemSystem.save()
|
||||||
check("C9 save-hook kaldes før ItemSystem.save", hooked, true)
|
check("C9 save-hook kaldes før ItemSystem.save", hooked, true)
|
||||||
|
|
||||||
|
-- C11: vogn uden egen ad.settings-tabel (ingen rotateTargets pr. køretøj) -> den
|
||||||
|
-- køretøjs-specifikke indstilling skrives IKKE til den globale settings-tabel
|
||||||
|
adEnv.AutoDrive.settings.rotateTargets.current = 1
|
||||||
|
adEnv.AutoDrive.settings.useFolders.current = 1
|
||||||
|
local settingsRun = ADRunsController.createRun("Settings Test")
|
||||||
|
ADRunsController.updateRun(settingsRun.id, {targetWayPointId = 94, loops = 1})
|
||||||
|
local noSettings = makeVehicle("vehicleH", "Uden AD-settings", {STRAW}, 500000, 200, 0)
|
||||||
|
noSettings.ad.settings = {}
|
||||||
|
ADRunsController.assignVehicle(settingsRun.id, noSettings)
|
||||||
|
ADRunsController.startRun(adEnv, settingsRun.id)
|
||||||
|
check("C11 global rotateTargets urørt", adEnv.AutoDrive.settings.rotateTargets.current, 1)
|
||||||
|
check("C11 useFolders global stadig skrevet", adEnv.AutoDrive.settings.useFolders.current, 2)
|
||||||
|
check("C11 køretøjet startet", noSettings.started, 1)
|
||||||
|
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user