fix(markarbejde): kultivering/pløjning måles på jorden — er ≥95 % af marken klargjort/pløjet, går trinnet videre uden at sende maskinen ud igen (også efter genindlæsning; F17 blev kultiveret 3 gange) (v1.50.3.0)
This commit is contained in:
@@ -192,6 +192,38 @@ function ADFields.readFieldState(field)
|
||||
noFieldGround = type(state.groundType) == "number" and state.groundType == groundNone}
|
||||
end
|
||||
|
||||
-- Jordtyper der tæller som klargjort til såning (stubbearbejdet, kultiveret, såbed, pløjet).
|
||||
ADFields.PREPARED_GROUNDS = {"STUBBLE_TILLAGE", "CULTIVATED", "SEEDBED", "PLOWED", "ROLLED_SEEDBED"}
|
||||
|
||||
-- value = jordtypens tæthedsværdi i et punkt; values = {[typenavn] = værdi}. -> klargjort, pløjet (nil: ukendt)
|
||||
function ADFields.classifyGround(value, values)
|
||||
if value == nil or values == nil then return nil, nil end
|
||||
-- ingen markjord (bygget over / uden for marken): tæller ikke med i andelen
|
||||
if values.NONE ~= nil and values.NONE == value then return nil, nil end
|
||||
local prepared = false
|
||||
for _, name in ipairs(ADFields.PREPARED_GROUNDS) do
|
||||
if values[name] ~= nil and values[name] == value then prepared = true end
|
||||
end
|
||||
return prepared, values.PLOWED ~= nil and values.PLOWED == value
|
||||
end
|
||||
|
||||
-- Spillets tæthedsværdier for jordtyperne (FieldGroundType -> værdi i GROUND_TYPE-kanalen).
|
||||
function ADFields.groundValues()
|
||||
if ADFields.groundValueCache ~= nil then return ADFields.groundValueCache or nil end
|
||||
local system = g_currentMission ~= nil and g_currentMission.fieldGroundSystem or nil
|
||||
if type(FieldGroundType) ~= "table" or system == nil then return nil end
|
||||
local values = {}
|
||||
for _, name in ipairs({"NONE", "STUBBLE_TILLAGE", "CULTIVATED", "SEEDBED", "PLOWED", "ROLLED_SEEDBED"}) do
|
||||
local groundType = FieldGroundType[name]
|
||||
if groundType ~= nil then
|
||||
local ok, value = pcall(function() return system:getFieldGroundValue(groundType) end)
|
||||
values[name] = ok and type(value) == "number" and value or groundType
|
||||
end
|
||||
end
|
||||
ADFields.groundValueCache = values
|
||||
return values
|
||||
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.
|
||||
@@ -318,7 +350,7 @@ end
|
||||
local function newScan(adEnv, entry)
|
||||
local field, fieldId = entry.field, entry.id
|
||||
local scan = {id = fieldId, queue = {}, head = 1, tail = 0, points = {}, fruitVotes = {},
|
||||
anySum = 0, readySum = 0, immatureSum = 0, totalSum = 0, soil = {fert = {0, 0}, lime = {0, 0}, plowLevel = {0, 0}, weed = {0, 0}}}
|
||||
anySum = 0, readySum = 0, immatureSum = 0, totalSum = 0, soil = {fert = {0, 0}, lime = {0, 0}, plowLevel = {0, 0}, weed = {0, 0}, prepared = {0, 0}, plowed = {0, 0}}}
|
||||
local info = {id = fieldId, field = field, points = scan.points, verts = {}, mowable = false, readyRatio = 0}
|
||||
scan.info = info
|
||||
-- 1) polygon og kandidatpunkter (centroid + halvvejs mod op til 8 hjørner)
|
||||
@@ -413,6 +445,12 @@ function ADFields.scanPerFruit(scan)
|
||||
plowLevel = readDensity(FieldDensityMap.PLOW_LEVEL, x, z),
|
||||
weed = settings.weedsEnabled and readWeed(x, z) or nil,
|
||||
}
|
||||
-- klargjort/pløjet jord i punktet (kun på markjord): klargøringstrin der allerede er gjort går videre
|
||||
local prepared, plowed = ADFields.classifyGround(readDensity(FieldDensityMap.GROUND_TYPE, x, z), ADFields.groundValues())
|
||||
if prepared ~= nil then
|
||||
readings.prepared = prepared and 1 or 0
|
||||
readings.plowed = plowed and 1 or 0
|
||||
end
|
||||
for key, value in pairs(readings) do
|
||||
if value ~= nil then
|
||||
scan.soil[key][1] = scan.soil[key][1] + value
|
||||
|
||||
Reference in New Issue
Block a user