feat(stop): redskaber slukkes, løftes og foldes til transport når en mark, et flow eller 'stop alt' stoppes — alle påkoblede, også forrest og bag redskaber (v1.55.0.0)
This commit is contained in:
@@ -1320,6 +1320,7 @@ function ADFieldWork.stopAllAssignments(adEnv)
|
||||
for _, assignment in ipairs(list) do
|
||||
pcall(stopAd, assignment.vehicle)
|
||||
pcall(ADCpBridge.stop, assignment.vehicle)
|
||||
ADHitch.stow(assignment.vehicle, "stop alt")
|
||||
ADFieldWork.release(assignment)
|
||||
-- puljeredskab: sættes af på sin plads og traktoren kører hjem (i stedet for almindelig parkering)
|
||||
local okPool, pooled = pcall(ADHitch.returnHome, adEnv, assignment.vehicle)
|
||||
@@ -1332,6 +1333,7 @@ function ADFieldWork.stopAll(adEnv, fieldId)
|
||||
for _, assignment in ipairs(ADFieldJobs.assignmentsFor(fieldId)) do
|
||||
pcall(stopAd, assignment.vehicle)
|
||||
ADCpBridge.stop(assignment.vehicle)
|
||||
ADHitch.stow(assignment.vehicle, "marken stoppet")
|
||||
local wasFetching = assignment.phase == "fetching"
|
||||
ADFieldWork.release(assignment)
|
||||
local okHome, pooled = pcall(ADHitch.returnHome, adEnv, assignment.vehicle)
|
||||
|
||||
@@ -371,6 +371,7 @@ end
|
||||
-- Én traktor hjem (fra et stoppet/slettet flow): tøm først, så parkering.
|
||||
function ADFlowWagons.homeVehicle(adEnv, vehicle, runName)
|
||||
waiting[vehicle] = nil
|
||||
ADHitch.stow(vehicle, "flowet stoppet")
|
||||
if fetching[vehicle] ~= nil then
|
||||
fetching[vehicle] = nil
|
||||
ADHitch.cancel(vehicle)
|
||||
|
||||
@@ -237,6 +237,65 @@ local function isImplementPark(adEnv, vehicle, markerId)
|
||||
end
|
||||
|
||||
-- Efter påkobling: fold foldbare redskaber sammen til vejen (CP folder selv ud på marken).
|
||||
-- Klar til vej: s = {turnedOn, lowered, unfolded, canFold} -> liste af "turnOff" | "raise" | "fold"
|
||||
function ADHitch.stowActions(s)
|
||||
local actions = {}
|
||||
if s.turnedOn then table.insert(actions, "turnOff") end
|
||||
if s.lowered then table.insert(actions, "raise") end
|
||||
if s.unfolded and s.canFold then table.insert(actions, "fold") end
|
||||
return actions
|
||||
end
|
||||
|
||||
-- Alle redskaber på maskinen (også forrest og bag et andet redskab): {object, attacher, jointDescIndex}
|
||||
local function allImplements(vehicle, list)
|
||||
list = list or {}
|
||||
if vehicle == nil or vehicle.getAttachedImplements == nil then return list end
|
||||
for _, implement in ipairs(vehicle:getAttachedImplements()) do
|
||||
if implement.object ~= nil then
|
||||
table.insert(list, {object = implement.object, attacher = vehicle, jointDescIndex = implement.jointDescIndex})
|
||||
allImplements(implement.object, list)
|
||||
end
|
||||
end
|
||||
return list
|
||||
end
|
||||
|
||||
-- Stop af mark/flow: sluk, løft og fold alle redskaber til transport. -> antal redskaber der fik noget gjort
|
||||
function ADHitch.stowForTransport(vehicle)
|
||||
local count = 0
|
||||
for _, item in ipairs(allImplements(vehicle)) do
|
||||
local object = item.object
|
||||
local foldDirection = object.spec_foldable ~= nil and -(object.spec_foldable.turnOnFoldDirection or 1) or nil
|
||||
local actions = ADHitch.stowActions({
|
||||
turnedOn = object.getIsTurnedOn ~= nil and object:getIsTurnedOn(),
|
||||
lowered = object.getIsLowered ~= nil and object:getIsLowered(true),
|
||||
unfolded = object.getIsUnfolded ~= nil and object:getIsUnfolded() and foldDirection ~= nil,
|
||||
canFold = foldDirection ~= nil and object.setFoldDirection ~= nil
|
||||
and (object.getIsFoldAllowed == nil or object:getIsFoldAllowed(foldDirection, false)),
|
||||
})
|
||||
for _, action in ipairs(actions) do
|
||||
if action == "turnOff" and object.setIsTurnedOn ~= nil then
|
||||
pcall(object.setIsTurnedOn, object, false)
|
||||
elseif action == "raise" and item.attacher.setJointMoveDown ~= nil and item.jointDescIndex ~= nil then
|
||||
pcall(item.attacher.setJointMoveDown, item.attacher, item.jointDescIndex, false)
|
||||
elseif action == "fold" then
|
||||
pcall(object.setFoldDirection, object, foldDirection)
|
||||
end
|
||||
end
|
||||
if #actions > 0 then count = count + 1 end
|
||||
end
|
||||
return count
|
||||
end
|
||||
|
||||
-- Som stowForTransport, men logget og pcall'et (til stop-vejene).
|
||||
function ADHitch.stow(vehicle, why)
|
||||
local ok, count = pcall(ADHitch.stowForTransport, vehicle)
|
||||
if not ok then
|
||||
Logging.warning(ADHitch.LOG_PREFIX .. "'%s': kunne ikke gøre redskaber klar til vej: %s", vehicleName(vehicle), tostring(count))
|
||||
elseif count > 0 then
|
||||
Logging.info(ADHitch.LOG_PREFIX .. "'%s': %d redskab(er) slukket, løftet og foldet (%s)", vehicleName(vehicle), count, tostring(why))
|
||||
end
|
||||
end
|
||||
|
||||
function ADHitch.foldForTransport(vehicle)
|
||||
for _, implement in ipairs(ADHitch.rearImplementsOf(vehicle)) do
|
||||
local object = implement.object
|
||||
|
||||
@@ -1203,6 +1203,7 @@ function ADRunsController.stopAllAndPark(adEnv)
|
||||
if ADFieldSilos ~= nil and ADFieldSilos.stopAll ~= nil then pcall(ADFieldSilos.stopAll, adEnv) end
|
||||
if ADFieldJobs ~= nil and ADFieldJobs.setPaused ~= nil then ADFieldJobs.setPaused(true) end
|
||||
for _, vehicle in ipairs(toPark) do
|
||||
if ADHitch ~= nil and ADHitch.stow ~= nil and ADRunsController.getRunForVehicle(vehicle) == nil then ADHitch.stow(vehicle, "stop alt") end
|
||||
-- flow-traktor: tøm vognen, sæt den af på sin plads og kør hjem (ADFlowWagons klarer hele turen)
|
||||
local okHome, pooled = false, false
|
||||
if ADFlowWagons ~= nil and ADRunsController.getRunForVehicle(vehicle) ~= nil then
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<modDesc descVersion="107">
|
||||
<author>masterdraco</author>
|
||||
<version>1.54.0.0</version>
|
||||
<version>1.55.0.0</version>
|
||||
<title>
|
||||
<en>AD Smart Pickup</en>
|
||||
</title>
|
||||
|
||||
@@ -115,5 +115,10 @@ check("afkobl: redskab bagpå -> forsøg", H.detachStep(1, false), "attempt")
|
||||
check("afkobl: forsøgt, sidder der stadig -> forsøg igen", H.detachStep(1, true), "attempt")
|
||||
check("afkobl: forsøgt, intet bagpå -> færdig", H.detachStep(0, true), "done")
|
||||
check("afkobl: intet bagpå fra start", H.detachStep(0, false), "nothing")
|
||||
-- transport ved stop: sluk, løft, fold (in-game 29/9: redskaber kørte udfoldet hjem efter stop)
|
||||
check("transport: tændt+sænket+udfoldet", table.concat(H.stowActions({turnedOn = true, lowered = true, unfolded = true, canFold = true}), ","), "turnOff,raise,fold")
|
||||
check("transport: allerede klar", #H.stowActions({}), 0)
|
||||
check("transport: kan ikke foldes -> kun sluk/løft", table.concat(H.stowActions({turnedOn = true, lowered = true, unfolded = true, canFold = false}), ","), "turnOff,raise")
|
||||
check("transport: kun udfoldet", table.concat(H.stowActions({unfolded = true, canFold = true}), ","), "fold")
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user