-- AD Field Storage -- Markernes trin/plan og markflåden gemmes i savegame-mappen ved siden af runs. Hvert felt modellen gemmer -- (ADFieldModel.toRecord) står i FIELD_TYPES med sin XML-type — en test sikrer at intet felt glemmes. ADFieldStorage = {} ADFieldStorage.FILE_NAME = "ADSmartPickup_fields.xml" ADFieldStorage.ROOT = "ADSmartPickupFields" ADFieldStorage.FIELD_TYPES = { id = "Int", stage = "String", mode = "String", product = "String", rake = "Int", store = "String", rigs = "Int", unloaders = "Int", mulch = "Int", lime = "Int", soil = "String", sow = "Int", sowFruit = "String", roll = "Int", fertilize = "Int", weed = "Int", kind = "String", lastFruit = "String", care = "String", targetFruit = "String", prepAfterMow = "Int", mowWidth = "Float", mowVehicle = "String", rakeVehicle = "String", windrowOffset = "String", } 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.writeRecord(xmlFile, key, record) for name, kind in pairs(ADFieldStorage.FIELD_TYPES) do local value = record[name] if value ~= nil then xmlFile["set" .. kind](xmlFile, key .. "#" .. name, value) end end end function ADFieldStorage.readRecord(xmlFile, key) local record = {} for name, kind in pairs(ADFieldStorage.FIELD_TYPES) do record[name] = xmlFile["get" .. kind](xmlFile, key .. "#" .. name) end return record 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 ADFieldStorage.writeRecord(xmlFile, string.format("%s.field(%d)", ADFieldStorage.ROOT, index), ADFieldModel.toRecord(field)) index = index + 1 end xmlFile:setString(ADFieldStorage.ROOT .. "#fleetMode", state.fleetMode or "all") 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 = {}, fleetMode = "all"} 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 result.fleetMode = xmlFile:getString(ADFieldStorage.ROOT .. "#fleetMode") == "ticked" and "ticked" or "all" xmlFile:iterate(ADFieldStorage.ROOT .. ".field", function(_, key) local field = ADFieldModel.fromRecord(ADFieldStorage.readRecord(xmlFile, key)) 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