diff --git a/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua b/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua index b8fad0f..ee99086 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFieldGuide.lua @@ -121,7 +121,9 @@ end function SmartPickupFrame:fieldGuideContext(adEnv, info, plan, chosenStoreIds) local sowable, mowable, straw = self:fruitContext() local context = {info = info or {}, sowable = sowable, mowable = mowable, straw = straw, - rigIdsByField = SmartPickupFrame.rigIdsByField(), fieldSilos = {}, storeHidden = 0, fields = self:fieldPickList(), rigs = {}} + rigIdsByField = SmartPickupFrame.rigIdsByField(), fieldSilos = {}, storeHidden = 0, fields = {}, rigs = {}} + -- marklisten bruges kun i trin 1 (guiden åbnet uden valgt mark) + if info == nil then context.fields = self:fieldPickList() end for _, rig in ipairs(ADFieldJobs.getRigs(adEnv)) do table.insert(context.rigs, {id = rig.id, role = rig.role, text = string.format("%s — %s", tostring(rig.label), self:roleText(rig.role))}) end diff --git a/FS25_ADSmartPickup/gui/SmartPickupFlowTab.lua b/FS25_ADSmartPickup/gui/SmartPickupFlowTab.lua index dc717e5..9f7e93f 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFlowTab.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFlowTab.lua @@ -139,33 +139,4 @@ end -- ---- callbacks ---- -function SmartPickupFrame:onClickDirection(state) - self:safe(function(frame) - local run = frame:getRun() - if run == nil then return end - ADRunsController.updateRun(run.id, {kind = state == SmartPickupFrame.STATE_ON and "outbound" or "supply"}) - frame:requestRebuild() - end) -end -function SmartPickupFrame:onClickBuilding(state, element) - self:safe(function(frame) - local run, data = frame:getRun(), frame.rowData[element] - if run == nil or data == nil then return end - if data.kind == "sourceBuilding" then - ADRunsController.store = ADRuns.toggleSourceBuilding(ADRunsController.store, run.id, data.buildingId) - elseif data.kind == "storeBuilding" then - ADRunsController.store = ADRuns.toggleStoreBuilding(ADRunsController.store, run.id, data.buildingId) - local updatedStore = ADRuns.getRun(ADRunsController.store, run.id) - Logging.info(SmartPickupFrame.LOG_PREFIX .. "run '%s': storeBuildings=%s", tostring(run.name), table.concat(updatedStore.storeBuildingIds or {}, " ")) - frame:requestRebuild() - return - else - ADRunsController.store = ADRuns.toggleTargetBuilding(ADRunsController.store, run.id, data.buildingId) - end - local updated = ADRuns.getRun(ADRunsController.store, run.id) - Logging.info(SmartPickupFrame.LOG_PREFIX .. "run '%s': %s=%s", tostring(run.name), data.kind == "sourceBuilding" and "sourceBuildings" or "targetBuildings", table.concat(data.kind == "sourceBuilding" and updated.sourceBuildingIds or updated.targetBuildingIds, " ")) - ADRunsController.resolveMarkers(frame.getAdEnv(), updated) - frame:requestRebuild() - end) -end diff --git a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua index 309d635..bae73f4 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua @@ -633,29 +633,12 @@ function SmartPickupFrame:onClickRun(state) end function SmartPickupFrame:onClickIngredient(state, element) - -- mål- og kilde-rækkerne deler prefab (og dermed onClick) med vare-rækkerne + -- guiderne og markflåden deler prefab (og dermed onClick) med vare-rækkerne local data = self.rowData[element] if data ~= nil and data.kind == "guideRow" then return self:onClickGuideRow(state, data) - elseif data ~= nil and data.kind == "target" then - return self:onClickTarget(state, element) - elseif data ~= nil and data.kind == "source" then - return self:onClickSource(state, element) - elseif data ~= nil and data.kind == "ingredientMode" then - return self:onClickIngredientMode(state) - elseif data ~= nil and data.kind == "collectRound" then - return self:onClickCollectRound(state) - elseif data ~= nil and data.kind == "direction" then - return self:onClickDirection(state) - elseif data ~= nil and (data.kind == "showAllVehicles" or data.kind == "showAllBuildings") then - local isOn = state == SmartPickupFrame.STATE_ON - if data.kind == "showAllVehicles" then self.showAllVehicles = isOn else self.showAllBuildings = isOn end - self:requestRebuild() - return elseif data ~= nil and SmartPickupFrame.FIELD_ROW_KINDS[data.kind] then return self:onClickFieldRow(state, data) - elseif data ~= nil and (data.kind == "sourceBuilding" or data.kind == "targetBuilding" or data.kind == "storeBuilding") then - return self:onClickBuilding(state, element) end self:safe(function(frame) local run, data = frame:getRun(), frame.rowData[element] @@ -683,7 +666,7 @@ function SmartPickupFrame:onClickVehicle(state, element) local clicked = self.rowData[element] -- markfanens maskinrækker (markflåden og markens faste maskiner) bruger samme række-type som flowets -- traktorliste; de hører til markfanen (fieldRig blev før behandlet som flow-traktor og aldrig gemt) - if clicked ~= nil and (clicked.kind == "fleetVehicle" or clicked.kind == "fieldRig") then + if clicked ~= nil and clicked.kind == "fleetVehicle" then return self:onClickFieldRow(state, clicked) end if clicked ~= nil and clicked.kind == "guideRow" then diff --git a/FS25_ADSmartPickup/gui/SmartPickupOutboundTab.lua b/FS25_ADSmartPickup/gui/SmartPickupOutboundTab.lua index ec8d700..42daef5 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupOutboundTab.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupOutboundTab.lua @@ -57,66 +57,9 @@ function SmartPickupFrame.getPolicyIndex(policies, policy) return 1 end -function SmartPickupFrame:fillSourceRows(adEnv, run) - local chosen = {} - for _, id in ipairs(run.sourceWayPointIds or {}) do - chosen[id] = true - end - local entries = ADRunsController.getSourceMarkers(adEnv, g_currentMission:getFarmId()) - for _, entry in ipairs(entries) do - local row = self:addRow(self.ingredientPrefab, {kind = "source", wayPointId = entry.marker.id}) - local kindText = self.i18n:getText("spu_source_kind_" .. tostring(entry.kind)) - row:getDescendantByName("title"):setText(string.format(" %s — %s (%s)", tostring(entry.marker.name), tostring(entry.name), kindText)) - row:getDescendantByName("option"):setState(chosen[entry.marker.id] and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF, false) - end - if #entries == 0 then - self:addTextRow(self.i18n:getText("spu_noSources")) - end -end -function SmartPickupFrame:fillProductRows(adEnv, run) - self.productRows = {} - local products = ADRunsController.getRunProducts(adEnv, run) - for _, product in ipairs(products) do - local policies = SmartPickupFrame.getPoliciesFor(product) - local policyTexts = {} - for _, policy in ipairs(policies) do - table.insert(policyTexts, self.i18n:getText("spu_policy_" .. policy)) - end - local row = self:addRow(self.productPrefab, {kind = "product", name = product.name, policies = policies}) - local option = row:getDescendantByName("option") - option:setTexts(policyTexts) - option:setState(SmartPickupFrame.getPolicyIndex(policies, product.policy), false) - local title = row:getDescendantByName("title") - title:setText(self:describeProduct(adEnv, product)) - table.insert(self.productRows, {name = product.name, title = title, option = option}) - end - if #products == 0 then - self:addTextRow(#(run.sourceWayPointIds or {}) == 0 and self.i18n:getText("spu_noSources") or self.i18n:getText("spu_noProducts")) - end -end -function SmartPickupFrame:fillOutboundStatusRows(adEnv, run) - self.outboundStatusRows = {} - local status = ADRunsController.getOutboundStatus(adEnv, run) - for _, reason in ipairs(status.reasons or {}) do - table.insert(self.outboundStatusRows, self:addTextRow(string.format(self.i18n:getText("spu_outbound_waiting"), reason))) - end - if status.warning ~= nil then - table.insert(self.outboundStatusRows, self:addTextRow(string.format(self.i18n:getText("spu_outbound_warning"), status.warning))) - end -end -function SmartPickupFrame:rebuildOutboundTab(adEnv, run) - self.sellAtOption:setState(SmartPickupFrame.getStepIndex(self.sellAtSteps, run.sellAtPercent, ADRuns.DEFAULT_SELL_AT_PERCENT), false) - self.storeAboveOption:setState(SmartPickupFrame.getStepIndex(self.storeAboveSteps, run.storeAbovePercent, ADRuns.DEFAULT_STORE_ABOVE_PERCENT), false) - self.collectRoundRowOption = self:addToggleRow("collectRound", self.i18n:getText("spu_collectRound"), {self.i18n:getText("ui_no"), self.i18n:getText("ui_yes")}, run.collectRound == true) - self:addTextRow(self.i18n:getText("spu_section_sources")) - self:fillSourceRows(adEnv, run) - self:addTextRow(self.i18n:getText("spu_section_products")) - self:fillProductRows(adEnv, run) - self:fillOutboundStatusRows(adEnv, run) -end -- Hvert sekund: produktrækkernes mængde/pris og statuslinjerne (antal linjer ændres kun ved rebuild). function SmartPickupFrame:refreshOutboundRows(adEnv, run) @@ -167,15 +110,6 @@ end -- ---- callbacks ---- -function SmartPickupFrame:onClickSource(state, element) - self:safe(function(frame) - local run, data = frame:getRun(), frame.rowData[element] - if run == nil or data == nil then return end - ADRunsController.store = ADRuns.toggleSource(ADRunsController.store, run.id, data.wayPointId) - Logging.info(SmartPickupFrame.LOG_PREFIX .. "run '%s': sources=%s", tostring(run.name), table.concat(ADRuns.getRun(ADRunsController.store, run.id).sourceWayPointIds, " ")) - frame:requestRebuild() - end) -end function SmartPickupFrame:onClickProduct(state, element) local clicked = self.rowData[element] @@ -213,10 +147,3 @@ function SmartPickupFrame:onClickStoreAbove(state) end) end -function SmartPickupFrame:onClickCollectRound(state) - self:safe(function(frame) - local run = frame:getRun() - if run == nil then return end - ADRunsController.updateRun(run.id, {collectRound = state == SmartPickupFrame.STATE_ON}) - end) -end diff --git a/FS25_ADSmartPickup/gui/SmartPickupSupplyTab.lua b/FS25_ADSmartPickup/gui/SmartPickupSupplyTab.lua index 1b14586..2a22199 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupSupplyTab.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupSupplyTab.lua @@ -2,42 +2,8 @@ -- Mål, varer (Auto/Vælg), behovsrække, ture og "kør hjem"-tærskel for et forsynings-run. -- Funktionerne lægges på SmartPickupFrame (indlæses efter SmartPickupFrame.lua). -function SmartPickupFrame:rebuildSupplyTab(adEnv, run) - self.loopsOption:setState(run.loops + 1, false) - self.returnBelowOption:setState(self:getReturnBelowIndex(run), false) - self:addTextRow(self.i18n:getText("spu_section_targets")) - self.ingredientModeRowOption = self:addToggleRow("ingredientMode", self.i18n:getText("spu_ingredientMode"), {self.i18n:getText("spu_mode_auto"), self.i18n:getText("spu_mode_manual")}, run.ingredientMode == "manual") - self:addTextRow(self.i18n:getText("spu_targets")) - self:fillTargetRows(adEnv, run) - self:fillIngredientRows(adEnv, run) - self:fillNeedsRows(adEnv, run) -end --- Mål = afkrydsning (flere stalde/fabrikker pr. run). Ved hver tur vælges den der mangler mest. -function SmartPickupFrame:fillTargetRows(adEnv, run) - local chosen = {} - for _, id in ipairs(ADRunsController.getRunTargets(run)) do - chosen[id] = true - end - for _, marker in ipairs(ADRunsController.getTargetMarkers(adEnv, g_currentMission:getFarmId())) do - local row = self:addRow(self.ingredientPrefab, {kind = "target", wayPointId = marker.id}) - row:getDescendantByName("title"):setText(" " .. tostring(marker.name)) - row:getDescendantByName("option"):setState(chosen[marker.id] and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF, false) - end -end --- Behovsrække pr. mål ("Cow 1 Food: Forage 0/33.750 l · …"), opdateres hvert sekund. -function SmartPickupFrame:fillNeedsRows(adEnv, run) - self.needsRows = {} - local targets = ADRunsController.getTargetsLevels(adEnv, run) - if #targets == 0 then - self:addTextRow(self.i18n:getText("spu_needs_noTarget")) - return - end - for _, target in ipairs(targets) do - table.insert(self.needsRows, {wayPointId = target.wayPointId, title = self:addTextRow(self:describeTargetNeeds(target))}) - end -end function SmartPickupFrame:describeTargetNeeds(target) if #target.levels == 0 then @@ -58,39 +24,8 @@ function SmartPickupFrame:refreshNeedsRows(adEnv, run) end end -function SmartPickupFrame:fillIngredientRows(adEnv, run) - if run.ingredientMode ~= "manual" then - return - end - local chosen = {} - for _, name in ipairs(run.ingredients) do - chosen[name] = true - end - for _, fillType in ipairs(ADRunsController.getTargetAcceptedFillTypes(adEnv, run)) do - local row = self:addRow(self.ingredientPrefab, {kind = "ingredient", name = fillType.name}) - row:getDescendantByName("title"):setText(tostring(fillType.title)) - row:getDescendantByName("option"):setState(chosen[fillType.name] and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF, false) - end -end -function SmartPickupFrame:onClickTarget(state, element) - self:safe(function(frame) - local run, data = frame:getRun(), frame.rowData[element] - if run == nil or data == nil then return end - ADRunsController.store = ADRuns.toggleTarget(ADRunsController.store, run.id, data.wayPointId) - Logging.info(SmartPickupFrame.LOG_PREFIX .. "run '%s': targets=%s", tostring(run.name), table.concat(ADRunsController.getRunTargets(ADRuns.getRun(ADRunsController.store, run.id)), " ")) - frame:requestRebuild() - end) -end -function SmartPickupFrame:onClickIngredientMode(state) - self:safe(function(frame) - local run = frame:getRun() - if run == nil then return end - ADRunsController.updateRun(run.id, {ingredientMode = state == SmartPickupFrame.STATE_ON and "manual" or "auto"}) - frame:requestRebuild() - end) -end function SmartPickupFrame:onClickLoops(state) self:safe(function(frame) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 77e428e..b2dd5fa 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.32.0.0 + 1.32.1.0 <en>AD Smart Pickup</en>