feat: run-model v3 — bygninger som kilder/mål (sourceBuildingIds/targetBuildingIds), XML v3
This commit is contained in:
@@ -9,7 +9,7 @@ ADRuns.MAX_LOOPS = 99
|
||||
-- "Kør hjem fra Wait når målet er under X %": 10..90, standard 50 (= den gamle 50 %-regel).
|
||||
ADRuns.DEFAULT_RETURN_BELOW_PERCENT = 50
|
||||
ADRuns.MIN_RETURN_BELOW_PERCENT, ADRuns.MAX_RETURN_BELOW_PERCENT = 10, 90
|
||||
ADRuns.XML_VERSION = 2
|
||||
ADRuns.XML_VERSION = 3
|
||||
ADRuns.INGREDIENT_MODES = {auto = true, manual = true}
|
||||
-- Retning: Forsyning (ind til stald/fabrik) eller Udkørsel (fabrik/lager -> silo/salg).
|
||||
ADRuns.KINDS = {supply = true, outbound = true}
|
||||
@@ -45,6 +45,8 @@ local function copyRun(run)
|
||||
name = run.name,
|
||||
kind = run.kind,
|
||||
sourceWayPointIds = copyList(run.sourceWayPointIds),
|
||||
sourceBuildingIds = copyList(run.sourceBuildingIds),
|
||||
targetBuildingIds = copyList(run.targetBuildingIds),
|
||||
products = copyProducts(run.products),
|
||||
sellAtPercent = run.sellAtPercent,
|
||||
storeAbovePercent = run.storeAbovePercent,
|
||||
@@ -89,6 +91,8 @@ function ADRuns.createRun(store, name, kind)
|
||||
name = name,
|
||||
kind = ADRuns.KINDS[kind] and kind or "supply",
|
||||
sourceWayPointIds = {},
|
||||
sourceBuildingIds = {},
|
||||
targetBuildingIds = {},
|
||||
products = {},
|
||||
sellAtPercent = ADRuns.DEFAULT_SELL_AT_PERCENT,
|
||||
storeAbovePercent = ADRuns.DEFAULT_STORE_ABOVE_PERCENT,
|
||||
@@ -152,6 +156,8 @@ function ADRuns.updateRun(store, runId, changes)
|
||||
if changes.returnBelowPercent ~= nil then run.returnBelowPercent = clampPercent(changes.returnBelowPercent) end
|
||||
if ADRuns.KINDS[changes.kind] then run.kind = changes.kind end
|
||||
if changes.sourceWayPointIds ~= nil then run.sourceWayPointIds = copyList(changes.sourceWayPointIds) end
|
||||
if changes.sourceBuildingIds ~= nil then run.sourceBuildingIds = copyList(changes.sourceBuildingIds) end
|
||||
if changes.targetBuildingIds ~= nil then run.targetBuildingIds = copyList(changes.targetBuildingIds) end
|
||||
if changes.products ~= nil then run.products = copyProducts(changes.products) end
|
||||
if changes.sellAtPercent ~= nil then run.sellAtPercent = clampRange(changes.sellAtPercent, ADRuns.DEFAULT_SELL_AT_PERCENT, ADRuns.MIN_SELL_AT_PERCENT, ADRuns.MAX_SELL_AT_PERCENT) end
|
||||
if changes.storeAbovePercent ~= nil then run.storeAbovePercent = clampRange(changes.storeAbovePercent, ADRuns.DEFAULT_STORE_ABOVE_PERCENT, ADRuns.MIN_STORE_ABOVE_PERCENT, ADRuns.MAX_STORE_ABOVE_PERCENT) end
|
||||
@@ -159,6 +165,29 @@ function ADRuns.updateRun(store, runId, changes)
|
||||
return new
|
||||
end
|
||||
|
||||
-- ---- bygninger som kilder/mål (flow-tavlen) ----
|
||||
|
||||
local function toggleInList(list, value)
|
||||
local result, found = {}, false
|
||||
for _, item in ipairs(list or {}) do
|
||||
if item == value then found = true else table.insert(result, item) end
|
||||
end
|
||||
if not found then table.insert(result, value) end
|
||||
return result
|
||||
end
|
||||
|
||||
function ADRuns.toggleSourceBuilding(store, runId, buildingId)
|
||||
local run = ADRuns.getRun(store, runId)
|
||||
if run == nil then return copyStore(store) end
|
||||
return ADRuns.updateRun(store, runId, {sourceBuildingIds = toggleInList(run.sourceBuildingIds, buildingId)})
|
||||
end
|
||||
|
||||
function ADRuns.toggleTargetBuilding(store, runId, buildingId)
|
||||
local run = ADRuns.getRun(store, runId)
|
||||
if run == nil then return copyStore(store) end
|
||||
return ADRuns.updateRun(store, runId, {targetBuildingIds = toggleInList(run.targetBuildingIds, buildingId)})
|
||||
end
|
||||
|
||||
-- ---- udkørsel: kilder og varer ----
|
||||
|
||||
-- Tilføj/fjern en kilde-markør (afkrydsning i fanen Udkørsel).
|
||||
@@ -319,6 +348,8 @@ function ADRuns.toRecords(store)
|
||||
vehicleIds = copyList(run.vehicleIds),
|
||||
kind = run.kind,
|
||||
sources = table.concat(run.sourceWayPointIds or {}, " "),
|
||||
sourceBuildings = table.concat(run.sourceBuildingIds or {}, " "),
|
||||
targetBuildings = table.concat(run.targetBuildingIds or {}, " "),
|
||||
products = ADRuns.serializeProducts(run.products),
|
||||
sellAt = run.sellAtPercent,
|
||||
storeAbove = run.storeAbovePercent,
|
||||
@@ -344,6 +375,11 @@ function ADRuns.fromRecords(records)
|
||||
if #targets == 0 and target ~= nil and target > 0 then
|
||||
targets = {target}
|
||||
end
|
||||
local function parseIds(text)
|
||||
local ids = {}
|
||||
for token in string.gmatch(tostring(text or ""), "%S+") do table.insert(ids, token) end
|
||||
return ids
|
||||
end
|
||||
local sources = {}
|
||||
for token in string.gmatch(tostring(record.sources or ""), "%S+") do
|
||||
local wayPointId = tonumber(token)
|
||||
@@ -354,6 +390,8 @@ function ADRuns.fromRecords(records)
|
||||
name = record.name,
|
||||
kind = ADRuns.KINDS[record.kind] and record.kind or "supply",
|
||||
sourceWayPointIds = sources,
|
||||
sourceBuildingIds = parseIds(record.sourceBuildings),
|
||||
targetBuildingIds = parseIds(record.targetBuildings),
|
||||
products = ADRuns.parseProducts(record.products),
|
||||
sellAtPercent = clampRange(record.sellAt, ADRuns.DEFAULT_SELL_AT_PERCENT, ADRuns.MIN_SELL_AT_PERCENT, ADRuns.MAX_SELL_AT_PERCENT),
|
||||
storeAbovePercent = clampRange(record.storeAbove, ADRuns.DEFAULT_STORE_ABOVE_PERCENT, ADRuns.MIN_STORE_ABOVE_PERCENT, ADRuns.MAX_STORE_ABOVE_PERCENT),
|
||||
|
||||
Reference in New Issue
Block a user