feat(marker): vender/river/læssevogn genbruger slåmaskinens Courseplay-kursus (v1.22.0.0)
In-game 25/9: læssevognens nye CP-kursus lå forskudt i forhold til skårene -> ikke samlet korrekt. Slåkurset gemmes pr. mark (kopi) og kopieres til næste trin med vehicle:cpCopyCourse; efter genindlæsning hentes det fra slåmaskinen (mowVehicle gemt i ADSmartPickup_fields.xml).
This commit is contained in:
@@ -14,6 +14,9 @@ ADFieldJobs.PLAYER_DRIVING_KMH = 3
|
||||
-- Courseplay kan efterlade hjørner på skæve marker: efter så mange færdige slå-ture går marken videre.
|
||||
ADFieldJobs.MAX_MOW_PASSES = 2
|
||||
ADFieldJobs.state = {fields = {}, fleet = {}, assignments = {}}
|
||||
-- mark-id -> kopi af slåmaskinens Courseplay-kursus (kun i hukommelsen; efter genindlæsning hentes det
|
||||
-- igen fra slåmaskinen, som CP selv gemmer kurset på)
|
||||
ADFieldJobs.courses = {}
|
||||
ADFieldJobs.timer = 0
|
||||
ADFieldJobs.now = 0
|
||||
ADFieldJobs.loaded = false
|
||||
@@ -255,6 +258,18 @@ local function dispatch(adEnv, field, info, role)
|
||||
note(field.id, {reason = false})
|
||||
end
|
||||
|
||||
-- Slåkurset for marken: gemt kopi, ellers slåmaskinens nuværende kursus (efter genindlæsning).
|
||||
local function mowCourse(adEnv, field)
|
||||
if ADFieldJobs.courses[field.id] ~= nil then return ADFieldJobs.courses[field.id] end
|
||||
if field.mowVehicleId == nil then return nil end
|
||||
for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do
|
||||
if ADRunsController.getVehicleId(vehicle) == field.mowVehicleId then
|
||||
return ADCpBridge.getCourse(vehicle)
|
||||
end
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
local function beginWork(adEnv, field, info, assignment)
|
||||
local vehicle = assignment.vehicle
|
||||
if assignment.role == "collector" then
|
||||
@@ -283,20 +298,27 @@ local function beginWork(adEnv, field, info, assignment)
|
||||
local point = info.points[1] or {x = info.x, z = info.z}
|
||||
assignment.phase = "starting"
|
||||
assignment.since = ADFieldJobs.now
|
||||
local course = assignment.role ~= "mower" and mowCourse(adEnv, field) or nil
|
||||
if assignment.role ~= "mower" and course == nil then
|
||||
log(field.id, "intet slåkursus kendt — Courseplay laver et nyt kursus til %s", assignment.role)
|
||||
end
|
||||
local handle, err = ADCpBridge.start(vehicle, point.x, point.z, function(ok, reason)
|
||||
if ok then
|
||||
assignment.phase = "working"
|
||||
assignment.since = ADFieldJobs.now
|
||||
if assignment.role == "mower" then
|
||||
note(field.id, {mowWidth = assignment.width})
|
||||
note(field.id, {mowWidth = assignment.width, mowVehicleId = assignment.vehicleId})
|
||||
local mowed = ADCpBridge.getCourse(vehicle)
|
||||
local copied = mowed ~= nil and mowed.copy ~= nil and select(2, pcall(mowed.copy, mowed)) or mowed
|
||||
ADFieldJobs.courses[field.id] = type(copied) == "table" and copied or mowed
|
||||
end
|
||||
log(field.id, "Courseplay startet (%s)", assignment.role)
|
||||
log(field.id, "Courseplay startet (%s%s)", assignment.role, reason == "copied" and ", slåkursus kopieret" or "")
|
||||
else
|
||||
release(assignment)
|
||||
note(field.id, {retryAt = ADFieldJobs.now + ADFieldModel.RETRY_MS, reason = {text = tostring(reason)}})
|
||||
log(field.id, "Courseplay fejlede: %s", tostring(reason))
|
||||
end
|
||||
end)
|
||||
end, course)
|
||||
if handle == nil then
|
||||
release(assignment)
|
||||
log(field.id, "Courseplay kunne ikke startes: %s", tostring(err))
|
||||
|
||||
Reference in New Issue
Block a user