-- AD Tip Side -- Tipvogne med flere tip-sider (fx Farmtech EDK 650 Unrealistic: bag / kornluge / venstre / højre) tillader kun -- AI-aflæsning (allowAIDischarge) på nogle af udløbene. Står vognen på en side uden, åbner AD aflæsningen ved -- målet, men intet løber ud — vognen holder med fuldt læs (in-game 29/9: Chicken Food 2 med 786.712 l hvede på -- højre side ved en Farma med 10 mio. l fri; Disponibel Vogn 3 fuld af løg). Når AD kører en vogn, skiftes den til -- en side, AI må aflæsse fra. ADTipSide = {} ADTipSide.LOG_PREFIX = "ADSmartPickup: tip-side: " -- ---- ren logik ---- -- sides = {{node = udløbsindeks}}, allowAI = {[udløbsindeks] = true}, current = nuværende side -- -> sideindeks der skal vælges, eller nil (nuværende er fin / ingen side tilladt / ukendt) function ADTipSide.choose(sides, allowAI, current) local currentSide = (sides or {})[current] if currentSide ~= nil and (allowAI or {})[currentSide.node] then return nil end for index, side in ipairs(sides or {}) do if (allowAI or {})[side.node] then return index end end return nil end -- ---- spil ---- local warned = setmetatable({}, {__mode = "k"}) local function sidesOf(object) local spec = object.spec_trailer local dis = object.spec_dischargeable if spec == nil or dis == nil or spec.tipSides == nil or #spec.tipSides < 2 then return nil end local sides, allowAI = {}, {} for index, side in ipairs(spec.tipSides) do sides[index] = {node = side.dischargeNodeIndex} end for index, node in ipairs(dis.dischargeNodes or {}) do if node.allowAIDischarge then allowAI[index] = true end end return sides, allowAI, spec.preferedTipSideIndex end -- Alle tipvogne bag traktoren: skift til en AI-tilladt side (kun mens vognen ikke tipper). function ADTipSide.ensure(vehicle) local children = vehicle.getChildVehicles ~= nil and vehicle:getChildVehicles() or {} for _, object in pairs(children) do if object ~= vehicle and object.setPreferedTipSide ~= nil then local sides, allowAI, current = sidesOf(object) local tipping = Trailer ~= nil and object.getTipState ~= nil and object:getTipState() ~= Trailer.TIPSTATE_CLOSED local index = sides ~= nil and not tipping and ADTipSide.choose(sides, allowAI, current) or nil if index ~= nil then object:setPreferedTipSide(index) if not warned[object] then warned[object] = true Logging.info(ADTipSide.LOG_PREFIX .. "'%s': tip-side %s -> %d (AutoDrive må kun aflæse fra den side)", tostring(object.getName ~= nil and object:getName() or "?"), tostring(current), index) end end end end end