From a95cb9e71d3baa7f0e7f86386d69de026eec3f95 Mon Sep 17 00:00:00 2001 From: masterdraco Date: Sat, 26 Sep 2026 19:08:21 +0200 Subject: [PATCH] =?UTF-8?q?fix(gui):=20maskiner=20der=20er=20faste=20p?= =?UTF-8?q?=C3=A5=20en=20anden=20mark=20vises=20ikke=20ved=20den=20valgte?= =?UTF-8?q?=20mark=20(hverken=20faste=20maskiner=20eller=20markfl=C3=A5den?= =?UTF-8?q?)=20=E2=80=94=20'N=20maskiner=20er=20faste=20p=C3=A5=20andre=20?= =?UTF-8?q?marker=20(F22)'=20(v1.30.3.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FS25_ADSmartPickup/adFieldFleet.lua | 24 +++++++++++++++++++ .../gui/SmartPickupFieldTab.lua | 22 +++++++++++++++-- FS25_ADSmartPickup/l10n/l10n_da.xml | 1 + FS25_ADSmartPickup/l10n/l10n_en.xml | 1 + FS25_ADSmartPickup/modDesc.xml | 2 +- tests/test_adFieldFleet.lua | 7 ++++++ 6 files changed, 54 insertions(+), 3 deletions(-) diff --git a/FS25_ADSmartPickup/adFieldFleet.lua b/FS25_ADSmartPickup/adFieldFleet.lua index 4908644..50f1d73 100644 --- a/FS25_ADSmartPickup/adFieldFleet.lua +++ b/FS25_ADSmartPickup/adFieldFleet.lua @@ -145,3 +145,27 @@ function ADFieldFleet.toggle(enabledIds, id) copy[id] = (not copy[id]) or nil return copy end + +-- Til menuen: skjul maskiner der er faste på en ANDEN mark end den valgte. Returnerer synlige, antal +-- skjulte og de marker de er faste på (sorteret). selectedFieldId nil = vis alle. +function ADFieldFleet.visibleForField(rigs, selectedFieldId, rigIdsByField) + if selectedFieldId == nil then return rigs, 0, {} end + local ownerOf = {} + for fieldId, ids in pairs(rigIdsByField or {}) do + for _, id in ipairs(ids or {}) do ownerOf[id] = fieldId end + end + local visible, hidden, fieldSet = {}, 0, {} + for _, rig in ipairs(rigs or {}) do + local owner = ownerOf[rig.id] + if owner ~= nil and owner ~= selectedFieldId then + hidden = hidden + 1 + fieldSet[owner] = true + else + table.insert(visible, rig) + end + end + local fields = {} + for fieldId in pairs(fieldSet) do table.insert(fields, fieldId) end + table.sort(fields, function(a, b) return tostring(a) < tostring(b) end) + return visible, hidden, fields +end diff --git a/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua b/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua index fdd467d..58b6b4b 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFieldTab.lua @@ -387,6 +387,21 @@ function SmartPickupFrame:rigDetails(rig) return #parts > 0 and (" — " .. table.concat(parts, " — ")) or "" end +-- {[fieldId] = rigIds} for alle marker +local function rigIdsByField() + local byField = {} + for fieldId, field in pairs(ADFieldJobs.state.fields) do byField[fieldId] = field.plan ~= nil and field.plan.rigIds or {} end + return byField +end + +-- "3 maskiner er faste på andre marker (F22, F90)" +function SmartPickupFrame:addHiddenDedicatedRow(hidden, fields) + if hidden <= 0 then return end + local names = {} + for _, fieldId in ipairs(fields) do table.insert(names, "F" .. tostring(fieldId)) end + self:addTextRow(" " .. string.format(self.i18n:getText("spu_field_hiddenDedicated"), hidden, table.concat(names, ", "))) +end + -- Faste maskiner til den valgte mark: en fast maskine bruges kun her, og marken venter på sin egen hellere -- end at låne en anden med samme opgave. Maskiner der er faste på en anden mark er markeret. function SmartPickupFrame:fillDedicatedRows(adEnv, field) @@ -396,7 +411,7 @@ function SmartPickupFrame:fillDedicatedRows(adEnv, field) for fieldId, other in pairs(ADFieldJobs.state.fields) do for _, id in ipairs(other.plan ~= nil and other.plan.rigIds or {}) do owner[id] = fieldId end end - local rigs = ADFieldJobs.getRigs(adEnv) + local rigs, hiddenRigs, hiddenFields = ADFieldFleet.visibleForField(ADFieldJobs.getRigs(adEnv), field.id, rigIdsByField()) table.sort(rigs, function(a, b) local ma, mb = owner[a.id] == field.id, owner[b.id] == field.id if ma ~= mb then return ma end @@ -410,6 +425,7 @@ function SmartPickupFrame:fillDedicatedRows(adEnv, field) row:getDescendantByName("title"):setText(string.format(" %s — %s%s", tostring(rig.label), self:roleText(rig.role), elsewhere)) row:getDescendantByName("option"):setState(owner[rig.id] == field.id and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF, false) end + self:addHiddenDedicatedRow(hiddenRigs, hiddenFields) end function SmartPickupFrame:fillFleetRows(adEnv) @@ -417,7 +433,8 @@ function SmartPickupFrame:fillFleetRows(adEnv) self:addTextRow(i18n:getText("spu_field_section_fleet")) local useAll = ADFieldJobs.state.fleetMode ~= "ticked" self:addToggleRow("fleetMode", i18n:getText("spu_field_fleetAll"), {i18n:getText("ui_no"), i18n:getText("ui_yes")}, useAll) - local rigs = ADFieldJobs.getRigs(adEnv) + -- valgt mark: maskiner der er faste på en anden mark skjules (de kan ikke bruges her) + local rigs, hiddenRigs, hiddenFields = ADFieldFleet.visibleForField(ADFieldJobs.getRigs(adEnv), self.selectedFieldId, rigIdsByField()) table.sort(rigs, function(a, b) if a.role ~= b.role then return a.role < b.role end return ADFlowView.naturalLess(a.label, b.label) @@ -431,6 +448,7 @@ function SmartPickupFrame:fillFleetRows(adEnv) if #rigs == 0 then self:addTextRow(" " .. i18n:getText("spu_field_noRigs")) end + self:addHiddenDedicatedRow(hiddenRigs, hiddenFields) end -- ---- live ---- diff --git a/FS25_ADSmartPickup/l10n/l10n_da.xml b/FS25_ADSmartPickup/l10n/l10n_da.xml index 3546aea..f989284 100644 --- a/FS25_ADSmartPickup/l10n/l10n_da.xml +++ b/FS25_ADSmartPickup/l10n/l10n_da.xml @@ -93,6 +93,7 @@ + diff --git a/FS25_ADSmartPickup/l10n/l10n_en.xml b/FS25_ADSmartPickup/l10n/l10n_en.xml index 1f6fe64..4dca23c 100644 --- a/FS25_ADSmartPickup/l10n/l10n_en.xml +++ b/FS25_ADSmartPickup/l10n/l10n_en.xml @@ -93,6 +93,7 @@ + diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index e70b9ff..43df2d5 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.30.2.0 + 1.30.3.0 <en>AD Smart Pickup</en> diff --git a/tests/test_adFieldFleet.lua b/tests/test_adFieldFleet.lua index 2f4382a..6d49ab9 100644 --- a/tests/test_adFieldFleet.lua +++ b/tests/test_adFieldFleet.lua @@ -122,5 +122,12 @@ check("FLD flyt: fast på F109", moved[109][1], "sprøjte") check("FLD original urørt", byField[22][1], "sprøjte") check("FLD fjern", #F.dedicate(moved, 109, "sprøjte", false)[109], 0) +-- FLV: menuen skjuler maskiner der er faste på en anden mark end den valgte +local vrigs = {{id = "vogn"}, {id = "harve"}, {id = "plov"}} +local vis, hid, flds = F.visibleForField(vrigs, 18, {[22] = {"vogn", "harve"}}) +check("FLV F18 ser kun de frie", #vis .. "/" .. hid .. "/" .. tostring(flds[1]), "1/2/22") +check("FLV F22 ser alle", #(F.visibleForField(vrigs, 22, {[22] = {"vogn", "harve"}})), 3) +check("FLV ingen valgt = alle", #(F.visibleForField(vrigs, nil, {[22] = {"vogn"}})), 3) + print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL")) os.exit(failures == 0 and 0 or 1)