Files
fs25-adsmartpickup/FS25_ADSmartPickup/adFieldStorage.lua
T
masterdraco cf7a2a51e5 feat(marker): sideriver — mål hvor riven lægger skåret, forskyd læssevognen tilsvarende (v1.24.0.0)
Brugerkrav 25/9: alle river-typer skal virke. Nedlægningsområdet (runtime-felt eller riverens XML) måles
i traktorens ramme mens riven arbejder; læssevognen på rivens kursus får CP-toolOffsetX = egen -
skårets forskydning og får sin værdi tilbage når den slippes.
2026-09-25 23:35:42 +02:00

70 lines
3.1 KiB
Lua

-- AD Field Storage
-- Markernes trin/plan og markflåden gemmes i savegame-mappen ved siden af runs.
ADFieldStorage = {}
ADFieldStorage.FILE_NAME = "ADSmartPickup_fields.xml"
ADFieldStorage.ROOT = "ADSmartPickupFields"
function ADFieldStorage.getPath()
local runsPath = ADRunsStorage ~= nil and ADRunsStorage.getPath() or nil
if runsPath == nil then return nil end
return (string.gsub(runsPath, ADRunsStorage.FILE_NAME .. "$", ADFieldStorage.FILE_NAME))
end
function ADFieldStorage.save(state)
local path = ADFieldStorage.getPath()
if path == nil then return false end
local xmlFile = XMLFile.create("ADSmartPickupFields", path, ADFieldStorage.ROOT)
if xmlFile == nil then return false end
local index = 0
for _, field in pairs(state.fields) do
local record = ADFieldModel.toRecord(field)
local key = string.format("%s.field(%d)", ADFieldStorage.ROOT, index)
xmlFile:setInt(key .. "#id", record.id)
xmlFile:setString(key .. "#stage", record.stage)
xmlFile:setString(key .. "#mode", record.mode)
xmlFile:setString(key .. "#product", record.product)
xmlFile:setInt(key .. "#rake", record.rake)
xmlFile:setString(key .. "#store", record.store)
xmlFile:setFloat(key .. "#mowWidth", record.mowWidth)
xmlFile:setString(key .. "#mowVehicle", record.mowVehicle)
xmlFile:setString(key .. "#rakeVehicle", record.rakeVehicle)
xmlFile:setString(key .. "#windrowOffset", record.windrowOffset)
index = index + 1
end
local vehicleIndex = 0
for vehicleId in pairs(state.fleet) do
xmlFile:setString(string.format("%s.fleet.vehicle(%d)#id", ADFieldStorage.ROOT, vehicleIndex), vehicleId)
vehicleIndex = vehicleIndex + 1
end
xmlFile:save()
xmlFile:delete()
return true
end
function ADFieldStorage.load()
local result = {fields = {}, fleet = {}}
local path = ADFieldStorage.getPath()
if path == nil or not fileExists(path) then return result end
local xmlFile = XMLFile.load("ADSmartPickupFields", path)
if xmlFile == nil then return result end
xmlFile:iterate(ADFieldStorage.ROOT .. ".field", function(_, key)
local field = ADFieldModel.fromRecord({
id = xmlFile:getInt(key .. "#id"), stage = xmlFile:getString(key .. "#stage"),
mode = xmlFile:getString(key .. "#mode"), product = xmlFile:getString(key .. "#product"),
rake = xmlFile:getInt(key .. "#rake"), store = xmlFile:getString(key .. "#store"),
mowWidth = xmlFile:getFloat(key .. "#mowWidth"), mowVehicle = xmlFile:getString(key .. "#mowVehicle"),
rakeVehicle = xmlFile:getString(key .. "#rakeVehicle"),
windrowOffset = xmlFile:getString(key .. "#windrowOffset"),
})
if field.id ~= nil then result.fields[field.id] = field end
end)
xmlFile:iterate(ADFieldStorage.ROOT .. ".fleet.vehicle", function(_, key)
local id = xmlFile:getString(key .. "#id")
if id ~= nil and id ~= "" then result.fleet[id] = true end
end)
xmlFile:delete()
return result
end