From 3ac53b7d1f26b8d2bd7dd0901b027c5f6f9e6e74 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Mon, 28 Sep 2026 18:06:12 +0200 Subject: [PATCH] =?UTF-8?q?feat(pulje):=20marker=20der=20venter=20p=C3=A5?= =?UTF-8?q?=20en=20maskine=20betjenes=20l=C3=A6ngst-ventende=20f=C3=B8rst?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adFieldJobs.lua | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/FS25_ADSmartPickup/adFieldJobs.lua b/FS25_ADSmartPickup/adFieldJobs.lua index 99b3e20..422d756 100644 --- a/FS25_ADSmartPickup/adFieldJobs.lua +++ b/FS25_ADSmartPickup/adFieldJobs.lua @@ -374,6 +374,9 @@ end -- Seneste beslutning pr. mark (GUI viser pleje-behov og grunde). ADFieldJobs.lastDecision = {} +-- Hvornår en mark begyndte at vente på en maskine (kø: længst ventende får næste ledige traktor). +ADFieldJobs.waitingSince = {} + local function stepField(adEnv, info, env) local current = ADFieldJobs.getField(info.id) local field = ADFieldModel.onReadiness(current, info.readyRatio or 0) @@ -406,6 +409,7 @@ local function stepField(adEnv, info, env) end local nextField = ADFieldModel.advance(field, info.needs) ADFieldJobs.setField(nextField) + ADFieldJobs.waitingSince[info.id] = nil ADFieldJobs.forgetFinished(info.id) ADFieldWork.windDownHelpers(adEnv, info.id, field.stage) ADFieldJobs.log(info.id, "%s -> %s", field.stage, nextField.stage) @@ -423,7 +427,12 @@ local function stepField(adEnv, info, env) if not ADFieldJobs.mayDispatch(ADFieldJobs.now, ADFieldJobs.lastDispatchAt) then return end local before = ADFieldJobs.assignmentCount() ADFieldWork.dispatch(adEnv, field, info, decision) - if ADFieldJobs.assignmentCount() > before then ADFieldJobs.lastDispatchAt = ADFieldJobs.now end + if ADFieldJobs.assignmentCount() > before then + ADFieldJobs.lastDispatchAt = ADFieldJobs.now + ADFieldJobs.waitingSince[info.id] = nil + elseif ADFieldJobs.waitingSince[info.id] == nil then + ADFieldJobs.waitingSince[info.id] = ADFieldJobs.now + end end end @@ -483,7 +492,9 @@ function ADFieldJobs.tick(adEnv, dt) local env = ADFieldJobs.environment() local slice = ADFieldJobs.tickCount % ADFieldJobs.PASSIVE_SLICES local stepped = 0 - for index, info in ipairs(ADFields.list()) do + local infos = ADFields.list() + if ADPool ~= nil then infos = ADPool.queueOrder(infos, ADFieldJobs.waitingSince) end + for index, info in ipairs(infos) do -- passive marker (der sker intet uden brugeren) vurderes kun i deres tiendedel af sekunderne if not ADFieldModel.isPassive(ADFieldJobs.getField(info.id)) or index % ADFieldJobs.PASSIVE_SLICES == slice then stepped = stepped + 1