diff --git a/FS25_ADSmartPickup/adFieldView.lua b/FS25_ADSmartPickup/adFieldView.lua index 8950437..f2398e4 100644 --- a/FS25_ADSmartPickup/adFieldView.lua +++ b/FS25_ADSmartPickup/adFieldView.lua @@ -79,3 +79,21 @@ function ADFieldView.distanceText(meters) if meters < 1000 then return string.format("%d m", math.floor(meters + 0.5)) end return (string.gsub(string.format("%.1f km", meters / 1000), "%.", ",")) end + +-- ---- status pr. mark (Fields-listen) ---- + +-- Årsager der betyder "kan ikke" (rød) — resten er "venter" (gul). +ADFieldView.ERROR_REASONS = { + spu_field_reason_noRig = true, spu_field_reason_cannotDo = true, spu_field_reason_tooWide = true, + spu_field_reason_tooNarrow = true, spu_field_reason_widthUnknown = true, spu_field_reason_noSowFruit = true, +} + +-- s = {hasMarker, working, awaiting, startRequested, reasonKey} -> "running"|"waiting"|"error"|"stopped" +function ADFieldView.fieldStatus(s) + if not s.hasMarker then return "error" end + if s.reasonKey ~= nil and ADFieldView.ERROR_REASONS[s.reasonKey] then return "error" end + if s.awaiting or s.startRequested then return "waiting" end + if s.working then return s.reasonKey ~= nil and "waiting" or "running" end + if s.reasonKey ~= nil then return "waiting" end + return "stopped" +end diff --git a/tests/test_fieldStatus.lua b/tests/test_fieldStatus.lua new file mode 100644 index 0000000..456a430 --- /dev/null +++ b/tests/test_fieldStatus.lua @@ -0,0 +1,22 @@ +-- Kør: luajit tests/test_fieldStatus.lua (fra repo-roden) +dofile("FS25_ADSmartPickup/adFieldModel.lua") +dofile("FS25_ADSmartPickup/adFieldView.lua") +local V = ADFieldView +local failures = 0 +local function check(name, actual, expected) + if actual == expected then print("OK " .. name) else + failures = failures + 1 + print(string.format("FAIL %s: forventede %s, fik %s", name, tostring(expected), tostring(actual))) + end +end +check("mangler markør", V.fieldStatus({hasMarker = false}), "error") +check("arbejder", V.fieldStatus({hasMarker = true, working = true}), "running") +check("arbejder men venter på maskine", V.fieldStatus({hasMarker = true, working = true, reasonKey = "spu_field_reason_allBusy"}), "waiting") +check("for bred", V.fieldStatus({hasMarker = true, working = true, reasonKey = "spu_field_reason_tooWide"}), "error") +check("ingen maskine", V.fieldStatus({hasMarker = true, reasonKey = "spu_field_reason_noRig"}), "error") +check("regn", V.fieldStatus({hasMarker = true, working = true, reasonKey = "spu_field_reason_rain"}), "waiting") +check("venter på spilleren (høster)", V.fieldStatus({hasMarker = true, awaiting = true}), "waiting") +check("start bestilt", V.fieldStatus({hasMarker = true, startRequested = true}), "waiting") +check("i ro", V.fieldStatus({hasMarker = true}), "stopped") +print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) +os.exit(failures == 0 and 0 or 1)