feat: fyldeste kilde først for mælk/gylle/digestat (v1.5.0.0)
Lagervarer tømmes stadig mindst-fyldte-først; varer hvis tanke løber fulde og stopper produktionen hentes fyldest-først (ADSupplyPlanner.FULLEST_FIRST_FILL_TYPES). Strategien vises i loggen. fix: en trigger foran næsen tæller aldrig som markørens egen (tolerance 2 -> 0). Markør-drift i ensilage-rækken lod næste tanks rør (1,9 m foran) vinde. Verificeret mod savegame: 40/40 siloer, 7/7 ensilage-tanke, 0 dropof.
This commit is contained in:
@@ -3,6 +3,9 @@
|
||||
|
||||
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}
|
||||
local logLines = {}
|
||||
|
||||
-- ---- FS25-mocks ----
|
||||
@@ -357,6 +360,15 @@ addMarker(2, "1 Silage Pickup", "Ensilage", 1247, -2278, 1247, -2266) -- køre
|
||||
table.insert(stations, makeStation(101, 1247, -2271, {[SILAGE] = 4000}))
|
||||
check("G3 pickup-markøren vælges, ikke dropoff", manager:getNextPickup(makeDriver(markers[1], {SILAGE}), false), 2)
|
||||
|
||||
-- G5: markør-drift i en tank-række — næste tanks rør ligger 2 m FORAN næsen og er
|
||||
-- nærmest, men vognen holder under røret 11 m bagved
|
||||
resetWorld()
|
||||
addMarker(1, "5 Silage Pickup", "Ensilage", 1246, -2218, 1246, -2230) -- kører +z
|
||||
table.insert(stations, makeStation(101, 1246, -2216, {[SILAGE] = 9000})) -- 2 m foran næsen
|
||||
table.insert(stations, makeStation(102, 1246, -2229, {[HAY] = 4000})) -- 11 m bag næsen: kun den har hø
|
||||
addMarker(2, "6 Silage Pickup", "Ensilage", 1246, -2208, 1246, -2218)
|
||||
check("G5 markør 5 hører til tanken bag næsen", manager:getNextPickup(makeDriver(markers[1], {HAY}), false), 1)
|
||||
|
||||
-- G4: kurve ind til markøren -> retningen snyder og røret ligger "foran"; tæt på = ok
|
||||
resetWorld()
|
||||
addMarker(1, "7 Silage Pickup", "Ensilage", 100, 0, 100, 20) -- kører -z
|
||||
@@ -380,6 +392,14 @@ check("L9 sluppet greb logges som advarsel", logLines[#logLines]:sub(1, 4), "WAR
|
||||
FS25_AutoDrive.LoadAtDestinationTask.update(stuckTask, 16)
|
||||
check("L9 grebet tages ikke igen på samme tur", stuckTask.seenRotate, RT_ONLYPICKUP)
|
||||
|
||||
-- M1: mælketanke løber fulde -> den FYLDESTE hentes først (siloer: mindst fyldte)
|
||||
resetWorld()
|
||||
addMarker(1, "Kostald 1", "Mælk", 0, 0); table.insert(stations, makeStation(101, 0, 15, {[MILK] = 2000}))
|
||||
addMarker(2, "Kostald 2", "Mælk", 500, 0); table.insert(stations, makeStation(102, 500, 15, {[MILK] = 48000}))
|
||||
addMarker(3, "Kostald 3", "Mælk", 1000, 0); table.insert(stations, makeStation(103, 1000, 15, {[MILK] = 30000}))
|
||||
check("M1 fyldeste mælketank først", manager:getNextPickup(makeDriver(markers[1], {MILK}), false), 2)
|
||||
check("M1 loggen nævner strategien", logLines[#logLines]:find("fyldeste først", 1, true) ~= nil, true)
|
||||
|
||||
-- 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}))
|
||||
|
||||
@@ -51,5 +51,16 @@ check("bruger valgte andet -> nil", ADSupplyPlanner.resolveIngredients(state, {H
|
||||
check("nyt multi-valg erstatter gemt liste", #ADSupplyPlanner.resolveIngredients(state, {HAY, SILAGE}), 2)
|
||||
check("ugyldigt valg -> nil", ADSupplyPlanner.resolveIngredients(state, nil), nil)
|
||||
|
||||
-- Kildestrategi: lager-siloer tømmes mindst-først; tanke der løber fulde (mælk, gylle) fyldest-først
|
||||
check("mælk hentes fyldest-først", ADSupplyPlanner.prefersFullestSource({"MILK"}), true)
|
||||
check("gylle hentes fyldest-først", ADSupplyPlanner.prefersFullestSource({"LIQUIDMANURE"}), true)
|
||||
check("roer hentes mindst-først", ADSupplyPlanner.prefersFullestSource({"SUGARBEET"}), false)
|
||||
check("blandet valg -> mindst-først", ADSupplyPlanner.prefersFullestSource({"MILK", "WHEAT"}), false)
|
||||
check("ukendt/tomt valg -> mindst-først", ADSupplyPlanner.prefersFullestSource({}), false)
|
||||
check("mindst-først: lavere niveau er bedre", ADSupplyPlanner.isBetterSource(100, 500, false), true)
|
||||
check("mindst-først: højere niveau er ikke bedre", ADSupplyPlanner.isBetterSource(900, 500, false), false)
|
||||
check("fyldest-først: højere niveau er bedre", ADSupplyPlanner.isBetterSource(900, 500, true), true)
|
||||
check("første kandidat er altid bedre end ingen", ADSupplyPlanner.isBetterSource(900, nil, false), 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