feat(navne): egne bygningsnavne fra ADSmartPickup_names.xml bruges overalt (FS25 kan ikke omdøbe bygninger); marksilo: siloer i samme klynge som et gårdlager er gårdens (v1.39.0.0)
This commit is contained in:
@@ -14,6 +14,8 @@ ADFieldSilos.CARGO_MIN_LITERS = 100 -- rest under dette tæller ikke som last
|
||||
-- Silo så tæt på et gårdlager er en del af gården (Farma-siloer deler lager inden for 50 m): ikke marksilo.
|
||||
-- (in-game 27/9: sukkerroer blev kørt fra én Farma-silo til nabosiloen i samme klynge)
|
||||
ADFieldSilos.FARM_RADIUS = 100
|
||||
-- Siloer højst så langt fra en nabo hører til samme klynge (Farma-rækker: 15 m mellem siloer, 18 m mellem rækker)
|
||||
ADFieldSilos.CLUSTER_LINK = 60
|
||||
ADFieldSilos.MOVING_SPEED = 0.00028 -- m/ms, samme grænse som AutoDrive
|
||||
ADFieldSilos.FILE_NAME = "ADSmartPickup_fieldsilos.xml"
|
||||
ADFieldSilos.ROOT = "ADSmartPickupFieldSilos"
|
||||
@@ -113,6 +115,26 @@ local function runBuildingIds()
|
||||
return ids
|
||||
end
|
||||
|
||||
-- Alle siloer i samme klynge som et gårdlager (kæde af naboer ≤ CLUSTER_LINK): gårdens, aldrig marksiloer.
|
||||
-- (in-game 27/9: gårdens Farma-klynge er ~300 m lang; siloer over 100 m fra et valgt lager blev marksiloer)
|
||||
local function farmCluster(allSilos, storeIds)
|
||||
local farm, queue = {}, {}
|
||||
for _, silo in ipairs(allSilos) do
|
||||
if storeIds[silo.id] then farm[silo.id] = true; table.insert(queue, silo) end
|
||||
end
|
||||
local link2 = ADFieldSilos.CLUSTER_LINK ^ 2
|
||||
while #queue > 0 do
|
||||
local current = table.remove(queue)
|
||||
for _, silo in ipairs(allSilos) do
|
||||
if not farm[silo.id] and (silo.x - current.x) ^ 2 + (silo.z - current.z) ^ 2 <= link2 then
|
||||
farm[silo.id] = true
|
||||
table.insert(queue, silo)
|
||||
end
|
||||
end
|
||||
end
|
||||
return farm
|
||||
end
|
||||
|
||||
local function nearStore(stores, x, z)
|
||||
for _, store in ipairs(stores) do
|
||||
if (store.x - x) ^ 2 + (store.z - z) ^ 2 <= ADFieldSilos.FARM_RADIUS ^ 2 then return true end
|
||||
@@ -123,9 +145,14 @@ end
|
||||
-- Gårdlagre fra opsætningen + marksiloer (alle markers marksiloer, uden dubletter og uden gårdlagre).
|
||||
function ADFieldSilos.collectBuildings(adEnv)
|
||||
local fid = farmId()
|
||||
local stores, byId = {}, {}
|
||||
local stores, byId, allSilos, storeIds = {}, {}, {}, {}
|
||||
for _, building in ipairs(ADBuildings.list(adEnv, fid)) do
|
||||
byId[building.id] = building
|
||||
if building.kind == "silo" then
|
||||
local sx, sz = position(building.placeable ~= nil and building.placeable.rootNode or nil)
|
||||
table.insert(allSilos, {id = building.id, x = sx, z = sz})
|
||||
if ADFieldSiloConfig.hasStore(ADFieldSilos.config, building.id) then storeIds[building.id] = true end
|
||||
end
|
||||
if building.kind == "silo" and ADFieldSiloConfig.hasStore(ADFieldSilos.config, building.id) then
|
||||
local x, z = position(building.placeable ~= nil and building.placeable.rootNode or nil)
|
||||
table.insert(stores, {id = building.id, name = building.name, markerId = firstMarker(building, "unload"),
|
||||
@@ -133,6 +160,7 @@ function ADFieldSilos.collectBuildings(adEnv)
|
||||
end
|
||||
end
|
||||
local silos, seen = {}, runBuildingIds()
|
||||
for id in pairs(farmCluster(allSilos, storeIds)) do seen[id] = true end
|
||||
for _, info in ipairs(ADFields.list()) do
|
||||
for _, building in ipairs(ADFields.fieldSilos(adEnv, fid, info)) do
|
||||
local x, z = position(building.placeable ~= nil and building.placeable.rootNode or nil)
|
||||
|
||||
Reference in New Issue
Block a user