110 lines
4.6 KiB
Lua
110 lines
4.6 KiB
Lua
-- Smart Pickup — fanen Forsyning
|
|
-- 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.ingredientModeOption:setState(run.ingredientMode == "manual" and SmartPickupFrame.STATE_ON or SmartPickupFrame.STATE_OFF, false)
|
|
self.loopsOption:setState(run.loops + 1, false)
|
|
self.returnBelowOption:setState(self:getReturnBelowIndex(run), false)
|
|
self:addTextRow(self.i18n:getText("spu_section_targets"))
|
|
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
|
|
return string.format("%s: %s", target.name, self.i18n:getText("spu_needs_none"))
|
|
end
|
|
return string.format(self.i18n:getText("spu_needs"), target.name .. ": " .. self:formatLevels(target.levels))
|
|
end
|
|
|
|
function SmartPickupFrame:refreshNeedsRows(adEnv, run)
|
|
local byId = {}
|
|
for _, target in ipairs(ADRunsController.getTargetsLevels(adEnv, run)) do
|
|
byId[target.wayPointId] = target
|
|
end
|
|
for _, row in ipairs(self.needsRows or {}) do
|
|
if byId[row.wayPointId] ~= nil then
|
|
row.title:setText(self:describeTargetNeeds(byId[row.wayPointId]))
|
|
end
|
|
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)
|
|
local run = frame:getRun()
|
|
if run == nil then return end
|
|
ADRunsController.updateRun(run.id, {loops = state - 1})
|
|
end)
|
|
end
|
|
|
|
function SmartPickupFrame:onClickReturnBelow(state)
|
|
self:safe(function(frame)
|
|
local run = frame:getRun()
|
|
if run == nil then return end
|
|
ADRunsController.updateRun(run.id, {returnBelowPercent = frame.returnBelowSteps[state] or ADRuns.DEFAULT_RETURN_BELOW_PERCENT})
|
|
end)
|
|
end
|