feat: foderprioritering — trug som én trang, spillets fodervægt (TMR 1,0 > hø/ensilage 0,8 > græs 0,4) afgør rækkefølgen i truget; fanen viser samme rangering (v1.10.3.0)

This commit is contained in:
2026-09-23 01:49:19 +02:00
parent 231d6a41d6
commit 69a98984bb
6 changed files with 108 additions and 7 deletions
+10 -3
View File
@@ -168,10 +168,13 @@ function ADSupplyPlanner.canUnloadRest(freeSpace, rest, capacity, freeFraction)
return freeSpace >= needed
end
-- needs: {{fillType, level, capacity[, litersPerMinute]}, ...}. Returnerer NY liste,
-- mest trængende først; ingredienser uden plads i målet er sorteret fra.
-- needs: {{fillType, level, capacity[, litersPerMinute][, scoreOverride][, priority]}, ...}.
-- Returnerer NY liste, mest trængende først; ingredienser uden plads i målet er sorteret fra.
-- loadCapacity (valgfri): vognens kapacitet — varer hvor et FULDT læs kan komme af
-- går forud (så vognen ikke ender med rest-læs); passer intet, gælder ren trang.
-- scoreOverride: varer der deler ét lager (staldens fodertrug) får trugets fælles score,
-- så truget konkurrerer som ÉN trang; priority (fx spillets fodervægt: TMR 1,0 > hø 0,8 >
-- græs 0,4) afgør så rækkefølgen inden for lageret.
function ADSupplyPlanner.rankNeeds(needs, loadCapacity)
local ranked = {}
for _, need in ipairs(needs) do
@@ -186,7 +189,8 @@ function ADSupplyPlanner.rankNeeds(needs, loadCapacity)
litersPerMinute = need.litersPerMinute,
minutesToEmpty = minutesToEmpty,
fits = ADSupplyPlanner.fullLoadFits(freeSpace, loadCapacity),
score = ADSupplyPlanner.scoreNeed(need.level, need.capacity, freeSpace, minutesToEmpty),
score = need.scoreOverride or ADSupplyPlanner.scoreNeed(need.level, need.capacity, freeSpace, minutesToEmpty),
priority = need.priority or 0,
})
end
end
@@ -197,6 +201,9 @@ function ADSupplyPlanner.rankNeeds(needs, loadCapacity)
if a.score ~= b.score then
return a.score > b.score
end
if a.priority ~= b.priority then
return a.priority > b.priority
end
return a.fillType < b.fillType
end)
return ranked