fix: læs-bytte — AD's 2. markør skiftes midlertidigt til siloen (AD tipper kun nær sit eget mål) og gendannes efter aflæsning (v1.11.9.0)
This commit is contained in:
@@ -107,6 +107,35 @@ local function redirect(task, destinationID)
|
|||||||
task.vehicle.ad.drivePathModule:setPathTo(destinationID)
|
task.vehicle.ad.drivePathModule:setPathTo(destinationID)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- køretøj -> AD's oprindelige 2. markør (waypoint-id) mens der læsses af i en silo
|
||||||
|
local pendingTargetRestore = setmetatable({}, {__mode = "k"})
|
||||||
|
|
||||||
|
-- Aflæsning ved en ANDEN destination end AD's mål: AD tipper kun når vognen er tæt på
|
||||||
|
-- AD's egen 2. markør (getDistanceToUnloadPosition), så den skiftes midlertidigt til
|
||||||
|
-- siloen og gendannes når opgaven er færdig.
|
||||||
|
local function redirectForUnload(task, destinationID)
|
||||||
|
local vehicle = task.vehicle
|
||||||
|
local stateModule = vehicle.ad.stateModule
|
||||||
|
local current = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil
|
||||||
|
if current ~= nil and current.id ~= destinationID and stateModule.setSecondMarkerByWayPointId ~= nil then
|
||||||
|
pendingTargetRestore[vehicle] = pendingTargetRestore[vehicle] or current.id
|
||||||
|
stateModule:setSecondMarkerByWayPointId(destinationID)
|
||||||
|
end
|
||||||
|
redirect(task, destinationID)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function restoreTarget(vehicle)
|
||||||
|
local homeId = pendingTargetRestore[vehicle]
|
||||||
|
if homeId == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
pendingTargetRestore[vehicle] = nil
|
||||||
|
local stateModule = vehicle.ad ~= nil and vehicle.ad.stateModule or nil
|
||||||
|
if stateModule ~= nil and stateModule.setSecondMarkerByWayPointId ~= nil then
|
||||||
|
stateModule:setSecondMarkerByWayPointId(homeId)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function release(vehicle)
|
local function release(vehicle)
|
||||||
local wait = waits[vehicle]
|
local wait = waits[vehicle]
|
||||||
if wait ~= nil and claims[wait.waitMarker.id] == vehicle then
|
if wait ~= nil and claims[wait.waitMarker.id] == vehicle then
|
||||||
@@ -197,7 +226,7 @@ local function updateWaiting(adEnv, task, wait, dt)
|
|||||||
local isReachable = function(markerId)
|
local isReachable = function(markerId)
|
||||||
return hasRouteTo(adEnv, vehicle, markerId)
|
return hasRouteTo(adEnv, vehicle, markerId)
|
||||||
end
|
end
|
||||||
ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirect, release, isReachable)
|
ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirectForUnload, release, isReachable)
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
@@ -224,6 +253,16 @@ function ADUnloadWait.releaseInactive()
|
|||||||
release(vehicle)
|
release(vehicle)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
for vehicle in pairs(pendingTargetRestore) do
|
||||||
|
local stateModule = vehicle.ad ~= nil and vehicle.ad.stateModule or nil
|
||||||
|
if stateModule == nil or stateModule.isActive == nil or not stateModule:isActive() then
|
||||||
|
restoreTarget(vehicle)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function ADUnloadWait.getPendingTargetRestore(vehicle)
|
||||||
|
return pendingTargetRestore[vehicle]
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Hvem holder hvor (GUI'ets Wait-puljer-visning). Sorteret på mappe, dernæst markør-id.
|
-- Hvem holder hvor (GUI'ets Wait-puljer-visning). Sorteret på mappe, dernæst markør-id.
|
||||||
@@ -286,6 +325,7 @@ function ADUnloadWait.install(adEnv)
|
|||||||
if originalFinished ~= nil then
|
if originalFinished ~= nil then
|
||||||
task.finished = function(self)
|
task.finished = function(self)
|
||||||
release(self.vehicle)
|
release(self.vehicle)
|
||||||
|
restoreTarget(self.vehicle)
|
||||||
return originalFinished(self)
|
return originalFinished(self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.11.8.0</version>
|
<version>1.11.9.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -469,6 +469,9 @@ end
|
|||||||
-- traktor der holder ved stalden (markør 30) med rest-læs halm på vognen
|
-- traktor der holder ved stalden (markør 30) med rest-læs halm på vognen
|
||||||
local function makeUnloadingVehicle(name, node, x, restStraw)
|
local function makeUnloadingVehicle(name, node, x, restStraw)
|
||||||
local vehicle = makeSupplyDriver(markerByIndex(21), markerByIndex(30), {TMR, STRAW})
|
local vehicle = makeSupplyDriver(markerByIndex(21), markerByIndex(30), {TMR, STRAW})
|
||||||
|
vehicle.ad.stateModule.secondMarkerId = 30
|
||||||
|
vehicle.ad.stateModule.setSecondMarkerByWayPointId = function(self, id) self.secondMarkerId = id end
|
||||||
|
vehicle.ad.stateModule.getSecondMarker = function(self) return markerByIndex(self.secondMarkerId) end
|
||||||
vehicle.getName = function() return name end
|
vehicle.getName = function() return name end
|
||||||
vehicle.rootNode = node
|
vehicle.rootNode = node
|
||||||
nodePositions[node] = {x = x, z = 10}
|
nodePositions[node] = {x = x, z = 10}
|
||||||
@@ -830,6 +833,9 @@ UnloadTask.update(st, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
|||||||
check("S1 omdirigeret til halmladen", st.destinationID, 21)
|
check("S1 omdirigeret til halmladen", st.destinationID, 21)
|
||||||
check("S1 logget bytte", countLogsSince(1, "bytter læs") >= 1, true)
|
check("S1 logget bytte", countLogsSince(1, "bytter læs") >= 1, true)
|
||||||
check("S1 Wait-punkt frigivet", FS25_AutoDrive.AutoDrive.getSetting("rotateTargets", sv), RT_ONLYPICKUP)
|
check("S1 Wait-punkt frigivet", FS25_AutoDrive.AutoDrive.getSetting("rotateTargets", sv), RT_ONLYPICKUP)
|
||||||
|
check("S1 AD's mål peger midlertidigt på siloen (ellers tipper AD ikke)", sv.ad.stateModule.secondMarkerId, 21)
|
||||||
|
UnloadTask.finished(st)
|
||||||
|
check("S1 mål gendannet efter aflæsning", sv.ad.stateModule.secondMarkerId, 30)
|
||||||
|
|
||||||
-- S2: målet mangler IKKE et fuldt læs af TMR -> bliv ved Wait
|
-- S2: målet mangler IKKE et fuldt læs af TMR -> bliv ved Wait
|
||||||
buildSwapWorld()
|
buildSwapWorld()
|
||||||
|
|||||||
Reference in New Issue
Block a user