diff --git a/FS25_ADSmartPickup/adHitch.lua b/FS25_ADSmartPickup/adHitch.lua index 5cb91f6..658f77c 100644 --- a/FS25_ADSmartPickup/adHitch.lua +++ b/FS25_ADSmartPickup/adHitch.lua @@ -68,10 +68,9 @@ function ADHitch.stepAction(name) return ADHitch.parseMarker(name) or "arrive" end --- Connect-markøren virker begge veje: ankommer traktoren med et redskab bag sig, kobles det af igen — markøren --- ligger under trækøjet, så vognen står da præcis på sin parkeringsplads. -function ADHitch.resolveAction(action, hasRearImplement) - if action == "attach" and hasRearImplement then return "detach" end +-- I en tur: en almindelig markør, der er AD-parkeringen for redskabet bag traktoren, er stedet vognen sættes af. +function ADHitch.resolveAction(action, isImplementPark) + if action == "arrive" and isImplementPark then return "detach" end return action end @@ -188,8 +187,15 @@ local function attachedImplements(vehicle) return list end -local function hasRearImplement(vehicle) - return #ADHitch.rearImplements(attachedImplements(vehicle)) > 0 +-- Er markøren (waypoint-id) AD-parkeringen for et af redskaberne bag traktoren? +local function isImplementPark(adEnv, vehicle, markerId) + for _, implement in ipairs(ADHitch.rearImplements(attachedImplements(vehicle))) do + local advd = implement.object.advd + local index = advd ~= nil and advd.parkDestination or nil + local marker = type(index) == "number" and index >= 1 and adEnv.ADGraphManager:getMapMarkerById(index) or nil + if marker ~= nil and marker.id == markerId then return true end + end + return false end -- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag @@ -228,7 +234,8 @@ function ADHitch.drop(adEnv, vehicle, markerId, onDone) return start(adEnv, vehicle, markerId, "detach", onDone) end --- Tur: markørerne køres i rækkefølge. Connect = kobl på, Afkobl = kobl af, andre = kør dertil (og hold +-- Tur: markørerne køres i rækkefølge. Connect = kobl på, Afkobl eller vognens egen AD-parkering = kobl af, +-- andre = kør dertil (og hold -- ROUTE_WAIT_MS, hvis det ikke er sidste trin). Stopper ved første fejl. onDone(vehicle, ok, årsag) til sidst. local waits = {} -- {vehicle, leftMs, continue} @@ -241,7 +248,7 @@ function ADHitch.route(adEnv, vehicle, markerIds, onDone) end local marker = adEnv.ADGraphManager:getMapMarkerByWayPointId(markerIds[index]) local action = ADHitch.resolveAction(ADHitch.stepAction(marker ~= nil and marker.name or nil), - hasRearImplement(vehicle)) + isImplementPark(adEnv, vehicle, markerIds[index])) start(adEnv, vehicle, markerIds[index], action, function(_, ok, detail) if not ok then Logging.warning(ADHitch.LOG_PREFIX .. "'%s' stopper turen ved trin %d", vehicleName(vehicle), index) @@ -280,9 +287,7 @@ local function watchManualTrips(adEnv) and module:getMode() == adEnv.AutoDrive.MODE_DRIVETO then local marker = module:getFirstMarker() local action = marker ~= nil and ADHitch.parseMarker(marker.name) or nil - if action ~= nil then - jobs[vehicle] = ADHitch.newJob(marker.id, marker.name, ADHitch.resolveAction(action, hasRearImplement(vehicle))) - end + if action ~= nil then jobs[vehicle] = ADHitch.newJob(marker.id, marker.name, action) end end end end @@ -351,7 +356,7 @@ function ADHitch:consoleDetach() return "spuDetach: intet koblet af (" .. tostring(detail) .. ")" end --- "spuTrip Connect Bredal > Start > Connect Bredal > Start": maskinen spilleren sidder i kører turen +-- "spuTrip Connect Bredal > Start > Bredal > Start": maskinen spilleren sidder i kører turen -- (spilleren kan blive siddende; AD kører også med spilleren i førerhuset). function ADHitch:consoleTrip(...) local vehicle = currentVehicle() @@ -359,7 +364,7 @@ function ADHitch:consoleTrip(...) local adEnv = ADFieldSilos ~= nil and ADFieldSilos.adEnv or nil if adEnv == nil then return "spuTrip: AutoDrive er ikke klar endnu" end local names = ADHitch.parseTrip(...) - if #names == 0 then return "spuTrip: brug fx spuTrip Connect Bredal > Start > Connect Bredal > Start" end + if #names == 0 then return "spuTrip: brug fx spuTrip Connect Bredal > Start > Bredal > Start" end local markers, ids = adEnv.ADGraphManager:getMapMarkers(), {} for _, name in ipairs(names) do local marker = ADHitch.findMarker(markers, name) @@ -372,6 +377,6 @@ end if addConsoleCommand ~= nil then addConsoleCommand("spuConnect", "Kobler nærmeste redskab på den maskine du sidder i", "consoleConnect", ADHitch) - addConsoleCommand("spuTrip", "Kør en tur: spuTrip Connect Bredal > Start > Connect Bredal > Start", "consoleTrip", ADHitch) + addConsoleCommand("spuTrip", "Kør en tur: spuTrip Connect Bredal > Start > Bredal > Start", "consoleTrip", ADHitch) addConsoleCommand("spuDetach", "Kobler redskaberne bag den maskine du sidder i af", "consoleDetach", ADHitch) end diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 92b87d8..7c9be47 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.47.2.0 + 1.47.3.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adHitch.lua b/tests/test_adHitch.lua index c35e531..d3940b7 100644 --- a/tests/test_adHitch.lua +++ b/tests/test_adHitch.lua @@ -77,10 +77,11 @@ check("trin: ankom er færdig", arriveJob.state, "done") local markers = {{name = "Start", id = 1}, {name = "Connect Bredal", id = 9}} check("markør: navn uden hensyn til store/små", H.findMarker(markers, "connect bredal").id, 9) check("markør: ukendt", H.findMarker(markers, "Stald"), nil) --- Connect-markøren virker begge veje: med redskab bag sig kobles det af (vognen står så på sin plads) -check("connect uden vogn: kobl på", H.resolveAction("attach", false), "attach") -check("connect med vogn: kobl af", H.resolveAction("attach", true), "detach") +-- Connect = kun kobl på; i en tur kobles vognen af ved sin egen AD-parkering +check("connect: kobl på", H.resolveAction("attach", false), "attach") +check("connect med vogn: stadig kobl på (ingen vending)", H.resolveAction("attach", false), "attach") +check("vognens parkering: kobl af", H.resolveAction("arrive", true), "detach") +check("almindelig markør", H.resolveAction("arrive", false), "arrive") check("afkobl forbliver afkobl", H.resolveAction("detach", false), "detach") -check("almindelig markør", H.resolveAction("arrive", true), "arrive") print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)