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)
|
||||
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 wait = waits[vehicle]
|
||||
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)
|
||||
return hasRouteTo(adEnv, vehicle, markerId)
|
||||
end
|
||||
ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirect, release, isReachable)
|
||||
ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirectForUnload, release, isReachable)
|
||||
end
|
||||
return
|
||||
end
|
||||
@@ -224,6 +253,16 @@ function ADUnloadWait.releaseInactive()
|
||||
release(vehicle)
|
||||
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
|
||||
|
||||
-- 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
|
||||
task.finished = function(self)
|
||||
release(self.vehicle)
|
||||
restoreTarget(self.vehicle)
|
||||
return originalFinished(self)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user