From 0e714d29687fa7118a93ab1050aa30663a94a0b1 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Mon, 28 Sep 2026 18:33:52 +0200 Subject: [PATCH] =?UTF-8?q?feat(markarbejde):=20bar=20mark=20med=20m=C3=A5?= =?UTF-8?q?l-afgr=C3=B8de=20klarg=C3=B8res=20straks=20uanset=20=C3=A5rstid?= =?UTF-8?q?=20=E2=80=94=20kun=20s=C3=A5ningen=20venter=20p=C3=A5=20s=C3=A5?= =?UTF-8?q?tiden=20(v1.48.1.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adFieldJobs.lua | 5 ++--- FS25_ADSmartPickup/adFieldModel.lua | 9 +++++---- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adFieldJobs.lua | 4 ++-- tests/test_adFieldModel.lua | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/FS25_ADSmartPickup/adFieldJobs.lua b/FS25_ADSmartPickup/adFieldJobs.lua index 422d756..877405c 100644 --- a/FS25_ADSmartPickup/adFieldJobs.lua +++ b/FS25_ADSmartPickup/adFieldJobs.lua @@ -152,10 +152,9 @@ function ADFieldJobs.decide(field, info, assignments, now, env) end return {action = "start"} end - -- mål-afgrøde på en bar mark: klargør og så så snart målet kan sås + -- mål-afgrøde på en bar mark: klargør straks; såningen venter selv på såtiden if info ~= nil and info.kind == "bare" and field.plan.targetFruit ~= nil and field.plan.targetFruit ~= "" then - local plantable = env ~= nil and env.plantable ~= nil and env.plantable(field.plan.targetFruit) or false - if ADFieldModel.shouldStartBare(field, "bare", plantable) then + if ADFieldModel.shouldStartBare(field, "bare") then if not hasMarker then return {action = "wait"} end return {action = "start"} end diff --git a/FS25_ADSmartPickup/adFieldModel.lua b/FS25_ADSmartPickup/adFieldModel.lua index 79be375..b89116e 100644 --- a/FS25_ADSmartPickup/adFieldModel.lua +++ b/FS25_ADSmartPickup/adFieldModel.lua @@ -166,12 +166,13 @@ function ADFieldModel.setTarget(field, fruitName) return copy end --- Bar mark med mål-afgrøde starter selv klargøring + såning, når målet kan sås nu. -function ADFieldModel.shouldStartBare(field, kind, plantableNow) +-- Bar mark med mål-afgrøde starter selv klargøring + såning med det samme: klargøringen (kalk, plov, +-- kultivator) kører uanset årstid, og kun såningen venter på såtiden (preflight: notPlantable). Med mange +-- marker nås det ellers ikke inden såvinduet lukker (brugerønske 28/9). +function ADFieldModel.shouldStartBare(field, kind) if field.plan.targetFruit == nil or field.plan.targetFruit == "" then return false end -- kun fra idle: efter egen såning står marken "done" (nysået kan læses som bar) — ingen dobbelt-såning - if kind ~= "bare" or field.stage ~= "idle" then return false end - return plantableNow == true + return kind == "bare" and field.stage == "idle" end -- Krævet bredde for et sæt: kun læssevognen uden riv skal dække slåmaskinens baner (halmskår ligger i diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index e69ad98..dc609e2 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.48.0.0 + 1.48.1.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adFieldJobs.lua b/tests/test_adFieldJobs.lua index 5059575..324e2cc 100644 --- a/tests/test_adFieldJobs.lua +++ b/tests/test_adFieldJobs.lua @@ -92,12 +92,12 @@ local hayCollect = M.with(silageCollect, {plan = {product = "hay"}}) check("J11 hø-opsamling venter", J.decide(hayCollect, info, {}, 0, rain).reason, "rain") check("J11 tørvejr", J.decide(mowing, info, {}, 0, {raining = false}).action, "dispatch") --- J12: bar mark med mål-afgrøde starter selv når målet kan sås; ellers venter den +-- J12: bar mark med mål-afgrøde klargøres straks — kun selve såningen venter på såtiden local bareInfo = {id = 90, markerId = 9, kind = "bare", readyRatio = 0, needs = {}} local bareTarget = M.with(M.newField(90), {plan = {targetFruit = "WHEAT", mode = "auto"}}) local canSow = {plantable = function(name) return name == "WHEAT" end} check("J12 bar + såtid -> start", J.decide(bareTarget, bareInfo, {}, 0, canSow).action, "start") -check("J12 bar + ikke såtid -> intet", J.decide(bareTarget, bareInfo, {}, 0, {plantable = function() return false end}).action, "none") +check("J12 bar + ikke såtid -> start alligevel (klargøring)", J.decide(bareTarget, bareInfo, {}, 0, {plantable = function() return false end}).action, "start") check("J12 bar uden markør -> vent", J.decide(bareTarget, {id = 90, kind = "bare"}, {}, 0, canSow).action, "wait") check("J12 voksende mark med mål -> lad den vokse", J.decide(bareTarget, {id = 90, markerId = 9, kind = "harvest", growing = true, readyRatio = 0.3}, {}, 0, canSow).action, "none") diff --git a/tests/test_adFieldModel.lua b/tests/test_adFieldModel.lua index 23d1f0d..1a27acf 100644 --- a/tests/test_adFieldModel.lua +++ b/tests/test_adFieldModel.lua @@ -263,9 +263,9 @@ check("M19 start anvender målet", started.plan.sowFruit, "WHEAT") check("M19 start: høst først", started.stage, "harvesting") check("M19 målet gemmes", M.fromRecord(M.toRecord(started)).plan.targetFruit, "WHEAT") check("M19 klargøring efter slåning gemmes", M.fromRecord(M.toRecord(M.start(target, "mowable", {}, "GRASS"))).plan.prepAfterMow, true) --- M20: skal en bar mark med mål starte? (kun når målafgrøden kan sås nu) +-- M20: skal en bar mark med mål starte? (altid — kun såningen venter på såtiden) check("M20 bar + sås nu -> start", M.shouldStartBare(target, "bare", true), true) -check("M20 bar + ikke såtid -> vent", M.shouldStartBare(target, "bare", false), false) +check("M20 bar + ikke såtid -> klargør alligevel (kun såningen venter)", M.shouldStartBare(target, "bare"), true) check("M20 uden mål -> ingen auto-start", M.shouldStartBare(M.newField(83), "bare", true), false) check("M20 voksende mark -> nej", M.shouldStartBare(target, "harvest", true), false) check("M20 arbejdende mark -> nej", M.shouldStartBare(started, "bare", true), false)