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:
2026-09-29 14:13:37 +02:00
parent f472f5dd80
commit 5cf093c3f1
6 changed files with 69 additions and 1 deletions
+59
View File
@@ -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