diff --git a/FS25_ADSmartPickup/adRunsController.lua b/FS25_ADSmartPickup/adRunsController.lua index 3b63865..0050b1c 100644 --- a/FS25_ADSmartPickup/adRunsController.lua +++ b/FS25_ADSmartPickup/adRunsController.lua @@ -81,8 +81,16 @@ function ADRunsController.deleteRun(runId) ADRunsController.store = ADRuns.deleteRun(ADRunsController.store, runId) end +-- Hver ændring logges, så et klik der ikke når modellen kan ses i log.txt. function ADRunsController.updateRun(runId, changes) ADRunsController.store = ADRuns.updateRun(ADRunsController.store, runId, changes) + local run = ADRuns.getRun(ADRunsController.store, runId) + local parts = {} + for key, value in pairs(changes) do + table.insert(parts, string.format("%s=%s", tostring(key), type(value) == "table" and table.concat(value, " ") or tostring(value))) + end + table.sort(parts) + Logging.info(ADRunsController.LOG_PREFIX .. "run '%s': %s", run ~= nil and tostring(run.name) or tostring(runId), table.concat(parts, ", ")) end function ADRunsController.assignVehicle(runId, vehicle) diff --git a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua index f4c1654..079f5d9 100644 --- a/FS25_ADSmartPickup/gui/SmartPickupFrame.lua +++ b/FS25_ADSmartPickup/gui/SmartPickupFrame.lua @@ -22,6 +22,7 @@ function SmartPickupFrame.new(i18n, getAdEnv) self.refreshTimer = 0 self.statusOverride = nil self.statusRow = nil -- Text-elementet i den klonede statusrække + self.needsRow = nil self.pendingRebuild = false self.frameOpen = false self.focusLost = false @@ -174,6 +175,7 @@ function SmartPickupFrame:clearRows() end self.clonedRows, self.rowData = {}, {} self.statusRow = nil + self.needsRow = nil end function SmartPickupFrame:addRow(prefab, data) @@ -229,6 +231,7 @@ function SmartPickupFrame:rebuild() self:fillTargetOption(adEnv, run) self.ingredientModeOption:setState(run.ingredientMode == "manual" and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF, false) self:fillIngredientRows(adEnv, run) + self.needsRow = self:addTextRow(self:describeNeeds(adEnv, run)) self:fillWaitPoolOption(adEnv, run) self.loopsOption:setState(run.loops + 1, false) self:addTextRow(self.i18n:getText("spu_vehicles")) @@ -362,6 +365,68 @@ function SmartPickupFrame:describeCarriable(adEnv, run, vehicle, carriable) return string.format(self.i18n:getText("spu_canCarry"), table.concat(titles, ", ")) end +-- Felterne følger modellen: når et klik ikke er nået ind i run'et, springer feltet tilbage, +-- og loggen ("run '…': waitPoolGroup=…") viser om klikket blev registreret. +function SmartPickupFrame:syncOptionsFromModel(adEnv, run) + local function sync(option, wantedIndex) + if option ~= nil and wantedIndex ~= nil and SmartPickupFrame.getOptionState(option) ~= wantedIndex then + option:setState(wantedIndex, false) + end + end + local targetIndex = 1 + for index, id in ipairs(self.targetIds) do + if id == run.targetWayPointId then targetIndex = index end + end + sync(self.targetOption, targetIndex) + sync(self.ingredientModeOption, run.ingredientMode == "manual" and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF) + local poolIndex = 1 + for index, group in ipairs(self.poolGroups) do + if group == run.waitPoolGroup then poolIndex = index end + end + sync(self.waitPoolOption, poolIndex) + sync(self.loopsOption, run.loops + 1) +end + +-- "Hentes (mest trængende først): Forage 0/33.750 l · Silage 0/33.750 l · Straw 21.375/21.375 l" +function SmartPickupFrame:describeNeeds(adEnv, run) + local farmId = g_currentMission:getFarmId() + local target = run.targetWayPointId ~= nil and ADSmartPickup.getUnloadStationAtWayPointId(adEnv, run.targetWayPointId, farmId) or nil + if target == nil then + return self.i18n:getText("spu_needs_noTarget") + end + local fillTypes = {} + if run.ingredientMode == "manual" then + for _, name in ipairs(run.ingredients) do + local index = g_fillTypeManager:getFillTypeIndexByName(name) + if index ~= nil then table.insert(fillTypes, index) end + end + else + for _, fillType in ipairs(ADRunsController.getTargetAcceptedFillTypes(adEnv, run)) do + table.insert(fillTypes, fillType.index) + end + end + local needs = {} + for _, fillType in ipairs(fillTypes) do + local level, capacity = ADSmartPickup.getStationLevelAndCapacity(target, fillType, farmId) + if level ~= nil then + table.insert(needs, {fillType = fillType, level = level, capacity = capacity, free = capacity - level}) + end + end + table.sort(needs, function(a, b) + if a.free ~= b.free then return a.free > b.free end + return a.fillType < b.fillType + end) + local parts = {} + for _, need in ipairs(needs) do + local title = g_fillTypeManager.getFillTypeTitleByIndex ~= nil and g_fillTypeManager:getFillTypeTitleByIndex(need.fillType) or g_fillTypeManager:getFillTypeNameByIndex(need.fillType) + table.insert(parts, string.format("%s %s/%s l", tostring(title), g_i18n:formatNumber(need.level, 0), g_i18n:formatNumber(need.capacity, 0))) + end + if #parts == 0 then + return self.i18n:getText("spu_needs_none") + end + return string.format(self.i18n:getText("spu_needs"), table.concat(parts, " · ")) +end + function SmartPickupFrame:fillPoolRows(adEnv) if adEnv == nil then return @@ -405,6 +470,10 @@ function SmartPickupFrame:refreshLive() end local isRunning = false if run ~= nil then + self:syncOptionsFromModel(adEnv, run) + if self.needsRow ~= nil then + self.needsRow:setText(self:describeNeeds(adEnv, run)) + end local status = ADRunsController.getRunStatus(adEnv, run) isRunning = status.running > 0 local text = isRunning and string.format(self.i18n:getText("spu_status_running"), status.running, status.total) diff --git a/FS25_ADSmartPickup/l10n/l10n_da.xml b/FS25_ADSmartPickup/l10n/l10n_da.xml index 4b062c1..19f94a1 100644 --- a/FS25_ADSmartPickup/l10n/l10n_da.xml +++ b/FS25_ADSmartPickup/l10n/l10n_da.xml @@ -42,6 +42,9 @@ + + + diff --git a/FS25_ADSmartPickup/l10n/l10n_en.xml b/FS25_ADSmartPickup/l10n/l10n_en.xml index cafe899..881d5f4 100644 --- a/FS25_ADSmartPickup/l10n/l10n_en.xml +++ b/FS25_ADSmartPickup/l10n/l10n_en.xml @@ -42,6 +42,9 @@ + + + diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 928bd75..321cdd3 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.9.3.0 + 1.9.4.0 <en>AD Smart Pickup</en>