feat(marker): job-løkke — AutoDrive til F-markør, Courseplay på marken, næste trin, gem
Afvigelser fra planen: starting-timeout 60 s og pause efter 'nåede ikke markøren' (undgår genudsendelse hvert sekund); J2-testen bruger en slået mark (readyRatio 0).
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
-- 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)
|
||||
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"),
|
||||
})
|
||||
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
|
||||
Reference in New Issue
Block a user