fix(pulje): review — puljeredskab sættes altid af (også påfyldte sæt), kun rolleløse traktorer henter, traktor uden vejnet springes over og får skylden ved stoppedAway, påfyldning efter koblingen, faste maskiner respekteres
This commit is contained in:
@@ -65,13 +65,43 @@ local function nearest(items, x, z, keep)
|
||||
return best
|
||||
end
|
||||
|
||||
-- Når opgaven slutter, sættes puljeredskabet af — også når AutoDrive ellers selv ville parkere (påfyldte
|
||||
-- sæt): AD parkerer ved redskabets plads med redskabet på. Aldrig ved manuel transport.
|
||||
function ADPool.shouldReturnHome(assignment)
|
||||
return not assignment.manual
|
||||
end
|
||||
|
||||
-- Kun maskiner uden egen arbejdsrolle (almindelige traktorer) henter puljeredskaber — ikke mejetærskere,
|
||||
-- selvkørende sprøjter o.l., selv om de har koblingspunkter.
|
||||
function ADPool.canPull(role)
|
||||
return role == nil
|
||||
end
|
||||
|
||||
-- Hvem fik koblingen til at fejle? Kom traktoren ikke frem, er det traktoren (ingen AD-rute), ellers redskabet.
|
||||
function ADPool.failureBlames(reason)
|
||||
if reason == "stoppedAway" then return "tractor" end
|
||||
return "implement"
|
||||
end
|
||||
|
||||
-- Efter koblingen: refill = markarbejdets påfyldningsplan (nil = intet at fylde).
|
||||
function ADPool.nextDrive(refill)
|
||||
if refill == nil or not refill.empty then return "drive" end
|
||||
if refill.refillId ~= nil then return "load" end
|
||||
return "empty"
|
||||
end
|
||||
|
||||
-- Puljen bruges kun til hovedopgaver med ét sæt, og ikke når marken har egne faste maskiner til rollen.
|
||||
function ADPool.mayUsePool(decision, hasOwnForRole)
|
||||
return not decision.helper and (decision.count or 1) == 1 and not hasOwnForRole
|
||||
end
|
||||
|
||||
-- Redskab med rollen nærmest marken, derefter nærmeste ledige traktor med nok hk til redskabet.
|
||||
-- blocked = {[id] = true} (reserverede og redskaber i karantæne). accept (valgfri): implement -> bool.
|
||||
function ADPool.pairFor(role, fieldX, fieldZ, implements, tractors, blocked, accept)
|
||||
blocked = blocked or {}
|
||||
local free = {}
|
||||
for _, tractor in ipairs(tractors or {}) do
|
||||
if not blocked[tractor.id] then table.insert(free, tractor) end
|
||||
if not blocked[tractor.id] and not tractor.offNetwork then table.insert(free, tractor) end
|
||||
end
|
||||
local candidates = {}
|
||||
for _, implement in ipairs(implements or {}) do
|
||||
@@ -214,10 +244,14 @@ function ADPool.collect(adEnv, isBusy)
|
||||
local controlled = vehicle.getIsControlled ~= nil and vehicle:getIsControlled()
|
||||
if id ~= nil and park ~= nil and vehicle.spec_attacherJoints ~= nil and #ADHitch.rearImplementsOf(vehicle) == 0
|
||||
and ADRunsController.getRunForVehicle(vehicle) == nil and not controlled and not isBusy(vehicle)
|
||||
and not ADPool.isReturning(vehicle) and ADFieldFleet.isEnabled(state.fleetMode, state.fleet, id) then
|
||||
and not ADPool.isReturning(vehicle) and ADFieldFleet.isEnabled(state.fleetMode, state.fleet, id)
|
||||
and ADPool.canPull(ADFieldFleet.roleFromSpecs(ADCpBridge.getSpecs(vehicle))) then
|
||||
local x, z = positionOf(vehicle)
|
||||
-- uden for AD-vejnettet: den kan ikke køre ud efter redskabet (ville sende redskaber i karantæne)
|
||||
local networkDistance = ADFieldWork.distanceToNetwork(adEnv, x, z)
|
||||
table.insert(tractors, {id = id, vehicle = vehicle, name = ADRuns.vehicleLabel(vehicle), x = x, z = z,
|
||||
hp = tractorHpOf(vehicle), parkId = park.id})
|
||||
hp = tractorHpOf(vehicle), parkId = park.id,
|
||||
offNetwork = networkDistance ~= nil and networkDistance > ADFieldWork.MAX_OFF_NETWORK})
|
||||
end
|
||||
end
|
||||
return implements, tractors
|
||||
|
||||
Reference in New Issue
Block a user