feat: run-traktorer får ingredienser og Wait-pulje fra deres run
This commit is contained in:
@@ -5,7 +5,10 @@ local SUGARBEET, WHEAT = 10, 11
|
||||
local HAY, GRASS, SILAGE = 20, 21, 22
|
||||
local MILK = 30
|
||||
local FILL_TYPE_NAMES = {[SUGARBEET] = "SUGARBEET", [WHEAT] = "WHEAT", [HAY] = "DRYGRASS_WINDROW", [GRASS] = "GRASS_WINDROW", [SILAGE] = "SILAGE", [MILK] = "MILK"}
|
||||
g_fillTypeManager = {getFillTypeNameByIndex = function(_, index) return FILL_TYPE_NAMES[index] end}
|
||||
g_fillTypeManager = {
|
||||
getFillTypeNameByIndex = function(_, index) return FILL_TYPE_NAMES[index] end,
|
||||
getFillTypeIndexByName = function(_, name) for index, candidate in pairs(FILL_TYPE_NAMES) do if candidate == name then return index end end return nil end,
|
||||
}
|
||||
local logLines = {}
|
||||
|
||||
-- ---- FS25-mocks ----
|
||||
@@ -60,6 +63,7 @@ g_currentMission = {
|
||||
getUnloadingStations = function() return unloadStations end,
|
||||
},
|
||||
accessHandler = {canFarmAccess = function() return true end},
|
||||
getFarmId = function() return 1 end,
|
||||
}
|
||||
|
||||
-- ---- AutoDrive-mocks ----
|
||||
@@ -80,6 +84,7 @@ local function resetWorld()
|
||||
end
|
||||
|
||||
local RT_NONE, RT_ONLYPICKUP = 1, 2
|
||||
local testVehicles = {}
|
||||
FS25_AutoDrive = {
|
||||
AutoDrive = {
|
||||
RT_NONE = RT_NONE,
|
||||
@@ -87,6 +92,8 @@ FS25_AutoDrive = {
|
||||
getAllFillLevels = function(trailers) return trailers.level, trailers.capacity or 0, false, 0 end,
|
||||
getAllUnits = function(vehicle) return vehicle.trailers or {level = 0} end,
|
||||
getAllDischargeableUnits = function(vehicle) return vehicle.units or {} end,
|
||||
getSupportedFillTypesOfAllUnitsAlphabetically = function(vehicle) return vehicle.carriable or {} end,
|
||||
getAllVehicles = function() return testVehicles end,
|
||||
},
|
||||
-- opgaven noterer hvad AutoDrive "ser" af indstillinger mens den opdaterer
|
||||
LoadAtDestinationTask = {update = function(self)
|
||||
@@ -154,6 +161,8 @@ local function makeSupplyDriver(firstMarker, secondMarker, fillTypes)
|
||||
end
|
||||
|
||||
dofile("FS25_ADSmartPickup/adSupplyPlanner.lua")
|
||||
dofile("FS25_ADSmartPickup/adRuns.lua")
|
||||
dofile("FS25_ADSmartPickup/adRunsController.lua")
|
||||
dofile("FS25_ADSmartPickup/adUnloadWait.lua")
|
||||
dofile("FS25_ADSmartPickup/adSmartPickup.lua")
|
||||
listener:update(16) -- installerer hook'en
|
||||
@@ -307,7 +316,6 @@ check("S10 lager læses fra produktionspunktet", manager:getNextPickup(feeder, f
|
||||
ProductionPoint = {PROD_STATUS = {INACTIVE = 0, RUNNING = 1, MISSING_INPUTS = 2, NO_OUTPUT_SPACE = 3}}
|
||||
local WATER = 40
|
||||
FILL_TYPE_NAMES[WATER] = "WATER"
|
||||
FS25_AutoDrive.AutoDrive.getSupportedFillTypesOfAllUnitsAlphabetically = function(vehicle) return vehicle.carriable end
|
||||
|
||||
-- Fabrik med TMR-opskrift: sluger ensilage, nipper til hø. Vand kan vognen ikke bære.
|
||||
local function buildFactoryWorld(tmrEnabled, tmrStatus)
|
||||
@@ -699,6 +707,48 @@ listener:update(16)
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(stopperTask, 16)
|
||||
check("L7 greb ryddet når AD stopper", stopperTask.seenRotate, RT_ONLYPICKUP)
|
||||
|
||||
-- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ====
|
||||
-- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste)
|
||||
local runDriver = buildCowWorld()
|
||||
runDriver.uniqueId = "vehicleRun"
|
||||
runDriver.ad.stateModule.selectedFillTypes = {STRAW}
|
||||
runDriver.ad.stateModule.fillType = STRAW
|
||||
testVehicles = {runDriver}
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
local feedRun = ADRunsController.createRun("Cow Feed")
|
||||
ADRunsController.updateRun(feedRun.id, {targetWayPointId = 30, ingredientMode = "manual", ingredients = {"FORAGE", "STRAW"}})
|
||||
ADRunsController.assignVehicle(feedRun.id, runDriver)
|
||||
check("I1 run-liste styrer: halm mangler -> halmladen", manager:getNextPickup(runDriver, false), 21)
|
||||
cowLevels[STRAW] = 99500
|
||||
check("I1 run-liste styrer: TMR når halm er fuld", manager:getNextPickup(runDriver, false), 20)
|
||||
check("I1 getIngredientsFor = run'ets liste", table.concat(ADSmartPickup.getIngredientsFor(FS25_AutoDrive, runDriver), ","), TMR .. "," .. STRAW)
|
||||
|
||||
-- I2: samme traktor uden run -> som før (én vare = mappe-logik i mappen "Lader")
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
runDriver.ad.stateModule.selectedFillTypes = {STRAW}
|
||||
cowLevels[STRAW] = 0
|
||||
check("I2 uden run: mappe-logik", manager:getNextPickup(runDriver, false), 21)
|
||||
check("I2 uden run og én vare: ingen ingrediensliste", ADSmartPickup.getIngredientsFor(FS25_AutoDrive, runDriver), nil)
|
||||
|
||||
-- I3: run med tom auto-liste (intet mål) -> falder tilbage til AD's valg
|
||||
local emptyRun = ADRunsController.createRun("Tomt")
|
||||
ADRunsController.assignVehicle(emptyRun.id, runDriver)
|
||||
check("I3 tom run-liste -> som uden run", manager:getNextPickup(runDriver, false), 21)
|
||||
|
||||
-- I4: Wait-kandidater begrænses til run'ets pulje
|
||||
buildWaitWorld()
|
||||
addMarker(42, "Pig Wait 1", "Pig Wait", 5050, 0) -- nærmere end Cow Wait, men forkert pulje
|
||||
local vp, tp = makeUnloadingVehicle("Fastrac Pulje", 511, 5000, 35000)
|
||||
vp.uniqueId = "vehiclePool"
|
||||
testVehicles = {vp}
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
local poolRun = ADRunsController.createRun("Cow Feed")
|
||||
ADRunsController.updateRun(poolRun.id, {targetWayPointId = 30, waitPoolGroup = "Cow Wait"})
|
||||
ADRunsController.assignVehicle(poolRun.id, vp)
|
||||
UnloadTask.update(tp, 16)
|
||||
check("I4 kun run'ets pulje", tp.destinationID, 40)
|
||||
ADRunsController.store = ADRuns.newStore()
|
||||
|
||||
-- ==== E: eksponerede opslag (bruges af runs-controller og læs-bytte) ====
|
||||
local eDriver = buildCowWorld()
|
||||
check("E1 aflæsningsstation ved waypoint", ADSmartPickup.getUnloadStationAtWayPointId(FS25_AutoDrive, 30, 1), unloadStations[1])
|
||||
|
||||
Reference in New Issue
Block a user