From e02d8af3d5d35f37d87f532948ddaeaebb1465d0 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Sat, 26 Sep 2026 12:59:43 +0200 Subject: [PATCH] =?UTF-8?q?feat(markarbejde):=20bygget-over=20marker=20(gr?= =?UTF-8?q?oundType=20NONE=20/=20ingen=20markjord=20=E2=80=94=20stald,=20b?= =?UTF-8?q?iogas,=20g=C3=A5rdsplads)=20er=20ikke=20med=20i=20oversigten=20?= =?UTF-8?q?eller=20arbejdet=20(v1.29.0.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adFields.lua | 16 ++++++++++++++-- FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adFieldsPolygon.lua | 12 ++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/FS25_ADSmartPickup/adFields.lua b/FS25_ADSmartPickup/adFields.lua index 8ef0685..0134983 100644 --- a/FS25_ADSmartPickup/adFields.lua +++ b/FS25_ADSmartPickup/adFields.lua @@ -159,7 +159,17 @@ function ADFields.readFieldState(field) local state = field ~= nil and field.fieldState or nil if type(state) ~= "table" or type(state.fruitTypeIndex) ~= "number" then return nil end local fruitIndex = state.fruitTypeIndex > 0 and state.fruitTypeIndex or nil - return {fruitIndex = fruitIndex, growthState = fruitIndex ~= nil and state.growthState or nil} + local groundNone = type(FieldGroundType) == "table" and FieldGroundType.NONE or 0 + return {fruitIndex = fruitIndex, growthState = fruitIndex ~= nil and state.growthState or nil, + noFieldGround = type(state.groundType) == "number" and state.groundType == groundNone} +end + +-- Kan marken dyrkes? Nej hvis spillet siger "ingen markjord" (groundType NONE: bygget over — gårdsplads, +-- stald, biogasanlæg), eller hvis intet prøvepunkt ligger på markjord. En markensilo i et hjørne ændrer +-- intet: resten af marken er stadig markjord. +function ADFields.isCultivable(state, onFieldPoints) + if state ~= nil and state.noFieldGround then return false end + return (onFieldPoints or 0) > 0 end -- Markens omrids som {{x, z}, ...}. FS25: field:getDensityMapPolygon():getVerticesList() (flad liste @@ -302,6 +312,7 @@ function ADFields.scanPerFruit(scan) -- (getFieldDataAtWorldPosition giver isOnField, densityBits, groundType — IKKE vækststadie) local state = ADFields.readFieldState(info.field) info.growthState = state ~= nil and state.growthState or nil + info.cultivable = ADFields.isCultivable(state, #scan.points) if state ~= nil then info.fruitIndex = state.fruitIndex else @@ -486,7 +497,8 @@ function ADFields.list() local infos = {} for _, entry in ipairs(ADFields.order) do local info = ADFields.cache[entry.id] - if info ~= nil then table.insert(infos, info) end + -- bygget-over marker (stald, biogas, gårdsplads) kan ikke dyrkes: ikke med i oversigt/arbejde + if info ~= nil and info.cultivable ~= false then table.insert(infos, info) end end ADFields.listCache = infos return infos diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index e2208ea..8808b0b 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.28.9.0 + 1.29.0.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adFieldsPolygon.lua b/tests/test_adFieldsPolygon.lua index 8e171d5..05bbf58 100644 --- a/tests/test_adFieldsPolygon.lua +++ b/tests/test_adFieldsPolygon.lua @@ -82,5 +82,17 @@ field.fieldState = {fruitTypeIndex = 0, growthState = 0} cropAt = function() return nil end info = rescan() check("PG9 ingen afgrøde = bar uden stub", info and info.kind .. "/" .. tostring(info.stubbleOf), "bare/nil") +-- PG10-12: bygget-over mark (fields.xml: groundType NONE — gårdsplads/stald/biogas) er ikke med i listen +field.fieldState = {fruitTypeIndex = 0, growthState = 0, groundType = 0} +info = rescan() +check("PG10 ingen markjord = kan ikke dyrkes", info and info.cultivable, false) +check("PG10 ikke i marklisten", #ADFields.list(), 0) +field.fieldState = {fruitTypeIndex = MAIZE, growthState = 2, groundType = 7} +cropAt = function(x) return MAIZE end +info = rescan() +check("PG11 markjord = kan dyrkes", info and info.cultivable, true) +check("PG11 i marklisten", #ADFields.list(), 1) +check("PG12 ingen punkter på markjord", ADFields.isCultivable(nil, 0), false) + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)