fix: stå og læs ved den valgte silo — AutoDrive kørte tom videre (v1.2.0.0)
Med rotateTargets + mapper afslutter AutoDrives LoadAtDestinationTask pålæsningen i det øjeblik markøren nås; traktoren kørte derfor lige igennem silo-markøren og tom til aflæsning. Når moden har valgt siloen, ses rotationen som slået fra for netop det køretøj under opgavens update, så AutoDrive står og læsser. Grebet slippes når kilden er tom eller AD stopper. Desuden: samme valg logges kun én gang, og loggen viser eget/nabo-lager.
This commit is contained in:
@@ -71,7 +71,15 @@ local function resetWorld()
|
||||
FS25_AutoDrive.ADMultipleTargetsManager.pickups = {}
|
||||
end
|
||||
|
||||
local RT_NONE, RT_ONLYPICKUP = 1, 2
|
||||
FS25_AutoDrive = {
|
||||
AutoDrive = {RT_NONE = RT_NONE, getSetting = function(settingName) return settingName == "rotateTargets" and RT_ONLYPICKUP or "andet" end},
|
||||
-- opgaven noterer hvad AutoDrive "ser" af indstillinger mens den opdaterer
|
||||
LoadAtDestinationTask = {update = function(self)
|
||||
self.seenRotate = FS25_AutoDrive.AutoDrive.getSetting("rotateTargets", self.vehicle)
|
||||
self.seenOther = FS25_AutoDrive.AutoDrive.getSetting("useFolders", self.vehicle)
|
||||
if self.shouldFail then error("task boom") end
|
||||
end},
|
||||
ADMultipleTargetsManager = {pickups = {}, getNextPickup = function() return "ORIGINAL" end},
|
||||
ADGraphManager = {
|
||||
getMapMarkersInGroup = function(_, group)
|
||||
@@ -263,5 +271,63 @@ bareStation.owningPlaceable = {spec_productionPoint = {productionPoint = {storag
|
||||
feeder = makeSupplyDriver(markerByIndex(1), markerByIndex(10), {HAY, GRASS, SILAGE})
|
||||
check("S10 lager læses fra produktionspunktet", manager:getNextPickup(feeder, false), 3)
|
||||
|
||||
-- L1: moden valgte siloen -> AutoDrive skal stå og læsse (rotation skjules under opgaven)
|
||||
resetWorld()
|
||||
local loadLevels = {[SUGARBEET] = 5000}
|
||||
addMarker(1, "Silo 1", "Siloer", 0, 0); table.insert(stations, makeStation(101, 0, 15, loadLevels))
|
||||
local loader = makeDriver(markers[1], {SUGARBEET})
|
||||
manager:getNextPickup(loader, false)
|
||||
local task = {vehicle = loader}
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(task, 16)
|
||||
check("L1 rotation skjult mens kilden har varen", task.seenRotate, RT_NONE)
|
||||
check("L1 andre indstillinger uberørt", task.seenOther, "andet")
|
||||
check("L1 rotation synlig igen efter opgaven", FS25_AutoDrive.AutoDrive.getSetting("rotateTargets", loader), RT_ONLYPICKUP)
|
||||
|
||||
-- L2: andre køretøjer (ikke sendt af moden) beholder AutoDrives rotation
|
||||
local strangerTask = {vehicle = makeDriver(markers[1], {SUGARBEET})}
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(strangerTask, 16)
|
||||
check("L2 fremmed køretøj uberørt", strangerTask.seenRotate, RT_ONLYPICKUP)
|
||||
|
||||
-- L3: kilden løber tør -> grebet slippes, AutoDrive kører videre med det den har
|
||||
loadLevels[SUGARBEET] = 0
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(task, 16)
|
||||
check("L3 tom kilde -> rotation synlig igen", task.seenRotate, RT_ONLYPICKUP)
|
||||
|
||||
-- L4: fejl i AutoDrives opgave må ikke efterlade rotationen skjult
|
||||
loadLevels[SUGARBEET] = 5000
|
||||
task.shouldFail = true
|
||||
check("L4 fejl i opgaven sendes videre", pcall(FS25_AutoDrive.LoadAtDestinationTask.update, task, 16), false)
|
||||
check("L4 rotation synlig efter fejl", FS25_AutoDrive.AutoDrive.getSetting("rotateTargets", loader), RT_ONLYPICKUP)
|
||||
|
||||
-- L5: AutoDrives original valgte (intet fund) -> ingen ventetid
|
||||
task.shouldFail = false
|
||||
loader.ad.stateModule.getSelectedFillTypes = function() return {WHEAT} end
|
||||
manager:getNextPickup(loader, false)
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(task, 16)
|
||||
check("L5 AutoDrives eget valg -> rotation uberørt", task.seenRotate, RT_ONLYPICKUP)
|
||||
|
||||
-- L7: AD stopper -> grebet ryddes, næste opgave venter ikke på en gammel silo
|
||||
resetWorld()
|
||||
addMarker(1, "Silo 1", "Andet", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[HAY] = 5000}))
|
||||
addMarker(2, "Blander", "Fabrik", 5000, 0)
|
||||
table.insert(unloadStations, makeUnloadStation(201, 5000, 15, {[HAY] = 0}, {[HAY] = 1000000, [GRASS] = 1000000}, {}))
|
||||
local stopper = makeSupplyDriver(markers[1], markers[2], {HAY, GRASS})
|
||||
manager:getNextPickup(stopper, false)
|
||||
local stopperTask = {vehicle = stopper}
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(stopperTask, 16)
|
||||
check("L7 venter mens AD kører", stopperTask.seenRotate, RT_NONE)
|
||||
stopper.ad.stateModule.active = false
|
||||
listener:update(16)
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(stopperTask, 16)
|
||||
check("L7 greb ryddet når AD stopper", stopperTask.seenRotate, RT_ONLYPICKUP)
|
||||
|
||||
-- L6: samme valg logges kun én gang
|
||||
resetWorld()
|
||||
addMarker(1, "Silo 1", "Siloer", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[SUGARBEET] = 5000}, false, {[SUGARBEET] = 5000}))
|
||||
local chatty = makeDriver(markers[1], {SUGARBEET})
|
||||
manager:getNextPickup(chatty, false); manager:getNextPickup(chatty, false)
|
||||
check("L6 gentaget valg logges én gang", #logLines, 1)
|
||||
check("L6 loggen viser eget lager", logLines[1]:find("eget lager", 1, true) ~= nil, true)
|
||||
|
||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||
os.exit(failures == 0 and 0 or 1)
|
||||
|
||||
Reference in New Issue
Block a user