-- 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) 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"), }) 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