feat: læs på vej tælles med — flere traktorer til samme stald fordeler sig på varer og stalde (v1.14.1.0)

This commit is contained in:
2026-09-24 01:36:29 +02:00
parent 1b7b74ad2c
commit 8ec0853fae
7 changed files with 124 additions and 7 deletions
+31
View File
@@ -210,6 +210,37 @@ function ADSupplyPlanner.rankNeeds(needs, loadCapacity)
return ranked
end
-- ---- læs på vej ----
-- pending = {[fillType] = liter} som ANDRE traktorer allerede er på vej med til samme mål.
-- Almindelige lagre: niveau + på vej (højst kapaciteten). Foder i et fælles trug (scoreOverride +
-- troughCapacity): varens niveau stiger, og trugets fri plads falder med ALT foder på vej.
-- Returnerer NY liste; input røres ikke.
function ADSupplyPlanner.applyPending(needs, pending)
local troughPending = 0
for _, need in ipairs(needs) do
if need.scoreOverride ~= nil and pending[need.fillType] ~= nil then
troughPending = troughPending + pending[need.fillType]
end
end
local result = {}
for index, need in ipairs(needs) do
local copy = {}
for key, value in pairs(need) do copy[key] = value end
local extra = pending[need.fillType] or 0
if need.scoreOverride ~= nil and troughPending > 0 then
local free = math.max(0, (need.capacity - need.level) - troughPending)
copy.level = need.level + extra
copy.capacity = copy.level + free
local troughCapacity = need.troughCapacity or need.capacity
copy.scoreOverride = troughCapacity > 0 and math.max(0, need.scoreOverride - troughPending / troughCapacity) or 0
elseif extra > 0 then
copy.level = math.min(need.capacity, need.level + extra)
end
result[index] = copy
end
return result
end
-- ---- bedste foder først ----
-- Foder i et stald-trug deler plads. Lavere foder (ensilage/hø, vægt 0,8) må kun hentes når der er
-- bedre foder (TMR, 1,0) på listen, hvis truget er nødlidende: mindst så stor en andel fri.