784144cd4e
EDK 650 Unrealistic har kun allowAIDischarge på bagudtip; på venstre/højre/ kornluge åbnede AD aflæsningen, men intet løb ud (Chicken Food 2 786.712 l hvede ved Farma med plads; Disponibel Vogn 3 fuld af løg). CP-genstart logger kun ved ændring (v1.60.16.0).
59 lines
2.7 KiB
Lua
59 lines
2.7 KiB
Lua
-- 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
|