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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user