fix: silo-mål ved Start holdes indtil aflæsningen er færdig (mål-gendannelse venter), så forkert last ikke kører i ring (v1.11.10.0)
This commit is contained in:
@@ -394,7 +394,14 @@ local function applyRunToVehicle(adEnv, run, vehicle, ingredients)
|
|||||||
-- bliver en silo der tager varen; næste tur sætter choosePickup målet tilbage til run'ets.
|
-- bliver en silo der tager varen; næste tur sætter choosePickup målet tilbage til run'ets.
|
||||||
local targetId = ADRunsController.chooseTarget(adEnv, run, vehicle) or run.targetWayPointId
|
local targetId = ADRunsController.chooseTarget(adEnv, run, vehicle) or run.targetWayPointId
|
||||||
local dump = ADRunsController.findWrongCargoDump(adEnv, run, vehicle, targetId)
|
local dump = ADRunsController.findWrongCargoDump(adEnv, run, vehicle, targetId)
|
||||||
stateModule:setSecondMarkerByWayPointId(dump ~= nil and dump.marker.id or targetId)
|
stateModule:setSecondMarkerByWayPointId(targetId)
|
||||||
|
if dump ~= nil then
|
||||||
|
if ADUnloadWait ~= nil and ADUnloadWait.setDumpTarget ~= nil then
|
||||||
|
ADUnloadWait.setDumpTarget(vehicle, dump.marker.id)
|
||||||
|
else
|
||||||
|
stateModule:setSecondMarkerByWayPointId(dump.marker.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
local loadMarker = findNearestLoadMarker(adEnv, vehicle, farmId)
|
local loadMarker = findNearestLoadMarker(adEnv, vehicle, farmId)
|
||||||
if loadMarker ~= nil then
|
if loadMarker ~= nil then
|
||||||
stateModule:setFirstMarkerByWayPointId(loadMarker.id)
|
stateModule:setFirstMarkerByWayPointId(loadMarker.id)
|
||||||
|
|||||||
@@ -623,6 +623,10 @@ local function chooseRunTarget(adEnv, driver)
|
|||||||
if run == nil or ADRunsController.chooseTarget == nil or #ADRunsController.getRunTargets(run) < 1 then
|
if run == nil or ADRunsController.chooseTarget == nil or #ADRunsController.getRunTargets(run) < 1 then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
-- Er AD's mål midlertidigt en silo (forkert last læsses af), må det ikke røres nu.
|
||||||
|
if ADUnloadWait ~= nil and ADUnloadWait.getPendingTargetRestore ~= nil and ADUnloadWait.getPendingTargetRestore(driver) ~= nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
local stateModule = driver.ad.stateModule
|
local stateModule = driver.ad.stateModule
|
||||||
local targetId = ADRunsController.chooseTarget(adEnv, run, driver)
|
local targetId = ADRunsController.chooseTarget(adEnv, run, driver)
|
||||||
local current = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil
|
local current = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil
|
||||||
|
|||||||
@@ -265,6 +265,19 @@ function ADUnloadWait.getPendingTargetRestore(vehicle)
|
|||||||
return pendingTargetRestore[vehicle]
|
return pendingTargetRestore[vehicle]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Ved Start med forkert last: AD's mål peger på siloen indtil aflæsningen er færdig;
|
||||||
|
-- det oprindelige mål gendannes af finished-hook'en.
|
||||||
|
function ADUnloadWait.setDumpTarget(vehicle, dumpWayPointId)
|
||||||
|
local stateModule = vehicle.ad.stateModule
|
||||||
|
local current = stateModule.getSecondMarker ~= nil and stateModule:getSecondMarker() or nil
|
||||||
|
if current ~= nil and current.id ~= dumpWayPointId then
|
||||||
|
pendingTargetRestore[vehicle] = pendingTargetRestore[vehicle] or current.id
|
||||||
|
end
|
||||||
|
if stateModule.setSecondMarkerByWayPointId ~= nil then
|
||||||
|
stateModule:setSecondMarkerByWayPointId(dumpWayPointId)
|
||||||
|
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.
|
||||||
-- Vognens indhold (største enhed) og evt. Wait-tilstand — til overblikket i fanen.
|
-- Vognens indhold (største enhed) og evt. Wait-tilstand — til overblikket i fanen.
|
||||||
function ADUnloadWait.hasRouteBothWays(adEnv, vehicle, toWayPointId, homeWayPointId)
|
function ADUnloadWait.hasRouteBothWays(adEnv, vehicle, toWayPointId, homeWayPointId)
|
||||||
|
|||||||
@@ -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.9.0</version>
|
<version>1.11.10.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -964,6 +964,35 @@ UnloadTask.update(tw, ADLoadSwap.CHECK_INTERVAL_MS + 1)
|
|||||||
check("V2 fra Wait til silo selv uden manglende vare", tw.destinationID, 21)
|
check("V2 fra Wait til silo selv uden manglende vare", tw.destinationID, 21)
|
||||||
waitBarnCapacity[STRAW] = 50000
|
waitBarnCapacity[STRAW] = 50000
|
||||||
|
|
||||||
|
-- V3: Start med forkert last -> AD's mål = silo; første getNextPickup må IKKE sætte run-målet tilbage,
|
||||||
|
-- og efter aflæsningen (finished) gendannes run-målet
|
||||||
|
buildCowWorld()
|
||||||
|
table.insert(unloadStations, stations[2]) -- halmladen tager halm
|
||||||
|
stations[2].unloadTriggers = {{exactFillRootNode = 121}}
|
||||||
|
stations[2].getIsFillTypeSupported = function(_, fillType) return fillType == STRAW end
|
||||||
|
stations[2].getFreeCapacity = function() return 100000 end
|
||||||
|
stations[2].owningPlaceable = {spec_silo = {storages = {{getFillLevel = function() return 0 end}}}}
|
||||||
|
local v3 = makeSupplyDriver(markerByIndex(21), markerByIndex(30), {TMR, STRAW})
|
||||||
|
v3.uniqueId = "vehicleV3"; v3.carriable = {TMR}; v3.trailers = {level = 4000, capacity = 8000}; v3.rootNode = 571; nodePositions[571] = {x = 0, z = 0}
|
||||||
|
v3.units = {{object = {getFillUnitFillLevel = function() return 4000 end, getFillUnitFillType = function() return STRAW end}, fillUnitIndex = 1}}
|
||||||
|
v3.ad.stateModule.secondMarkerId = 30
|
||||||
|
v3.ad.stateModule.setSecondMarkerByWayPointId = function(self, id) self.secondMarkerId = id end
|
||||||
|
v3.ad.stateModule.getSecondMarker = function(self) return markerByIndex(self.secondMarkerId) end
|
||||||
|
cowLevels[STRAW] = nil -- stald 1 tager i denne test kun TMR
|
||||||
|
unloadStations[1].getIsFillTypeSupported = function(_, fillType) return fillType == TMR end
|
||||||
|
testVehicles = {v3}
|
||||||
|
ADRunsController.store = ADRuns.newStore()
|
||||||
|
local v3Run = ADRunsController.createRun("TMR only")
|
||||||
|
ADRunsController.updateRun(v3Run.id, {targetWayPointId = 30, ingredientMode = "manual", ingredients = {"FORAGE"}})
|
||||||
|
ADRunsController.assignVehicle(v3Run.id, v3)
|
||||||
|
ADUnloadWait.setDumpTarget(v3, 21) -- som Start gør ved forkert last
|
||||||
|
check("V3 AD's mål = silo", v3.ad.stateModule.secondMarkerId, 21)
|
||||||
|
manager:getNextPickup(v3, false)
|
||||||
|
check("V3 getNextPickup rører ikke målet mens silo-aflæsning er undervejs", v3.ad.stateModule.secondMarkerId, 21)
|
||||||
|
UnloadTask.finished({vehicle = v3})
|
||||||
|
check("V3 mål gendannet efter aflæsning", v3.ad.stateModule.secondMarkerId, 30)
|
||||||
|
ADRunsController.store = ADRuns.newStore()
|
||||||
|
|
||||||
-- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ====
|
-- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ====
|
||||||
local eDriver = buildCowWorld()
|
local eDriver = buildCowWorld()
|
||||||
check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1])
|
check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1])
|
||||||
|
|||||||
Reference in New Issue
Block a user