feat: run-traktorer får ingredienser og Wait-pulje fra deres run
This commit is contained in:
@@ -489,10 +489,23 @@ local function applySupplyChoice(driver, ingredients, choice)
|
||||
supplyState[driver] = {ingredients = ingredients, narrowedTo = choice.fillType}
|
||||
end
|
||||
|
||||
-- Samlet valg: behovsstyret når flere varer er valgt, ellers mappe-logik. nil = AutoDrives original.
|
||||
-- Ingredienslisten for køretøjet: run'ets liste når det er i et run (ingen tændknap
|
||||
-- nødvendig), ellers AD's multi-valg (>1 vare). nil = ingen behovsstyring.
|
||||
function ADSmartPickup.getIngredientsFor(adEnv, driver)
|
||||
local run = ADRunsController ~= nil and ADRunsController.getRunForVehicle(driver) or nil
|
||||
if run ~= nil then
|
||||
local ingredients = ADRunsController.getRunIngredients(adEnv, run, driver)
|
||||
if #ingredients > 0 then
|
||||
return ingredients
|
||||
end
|
||||
return nil
|
||||
end
|
||||
return ADSupplyPlanner.resolveIngredients(supplyState[driver], driver.ad.stateModule:getSelectedFillTypes())
|
||||
end
|
||||
|
||||
-- Samlet valg: behovsstyret med ingrediensliste, ellers mappe-logik. nil = AutoDrives original.
|
||||
function ADSmartPickup.choosePickup(adEnv, driver)
|
||||
local selected = driver.ad.stateModule:getSelectedFillTypes()
|
||||
local ingredients = ADSupplyPlanner.resolveIngredients(supplyState[driver], selected)
|
||||
local ingredients = ADSmartPickup.getIngredientsFor(adEnv, driver)
|
||||
if ingredients == nil then
|
||||
supplyState[driver] = nil
|
||||
return ADSmartPickup.findLeastFilledPickup(adEnv, driver)
|
||||
@@ -664,6 +677,10 @@ function ADSmartPickup:update(dt)
|
||||
if adEnv ~= nil and g_currentMission ~= nil and g_currentMission.storageSystem ~= nil then
|
||||
installHook(adEnv)
|
||||
isHooked = true
|
||||
if ADRunsController ~= nil then
|
||||
pcall(ADRunsController.load, adEnv)
|
||||
pcall(ADRunsController.installSaveHook)
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
@@ -39,10 +39,12 @@ local function getRestLoad(adEnv, vehicle)
|
||||
return bestFillType, bestLevel
|
||||
end
|
||||
|
||||
local function getWaitCandidates(adEnv)
|
||||
-- poolGroup: run'ets Wait-mappe; tom/nil = alle Wait-mapper.
|
||||
local function getWaitCandidates(adEnv, poolGroup)
|
||||
local candidates = {}
|
||||
for _, marker in pairs(adEnv.ADGraphManager:getMapMarkers()) do
|
||||
if ADSupplyPlanner.isWaitMarker(marker) then
|
||||
local isInPool = poolGroup == nil or poolGroup == "" or marker.group == poolGroup
|
||||
if isInPool and ADSupplyPlanner.isWaitMarker(marker) then
|
||||
local wayPoint = adEnv.ADGraphManager:getWayPointById(marker.id)
|
||||
if wayPoint ~= nil then
|
||||
table.insert(candidates, {marker = marker, x = wayPoint.x, z = wayPoint.z})
|
||||
@@ -52,6 +54,11 @@ local function getWaitCandidates(adEnv)
|
||||
return candidates
|
||||
end
|
||||
|
||||
local function getWaitPoolGroup(vehicle)
|
||||
local run = ADRunsController ~= nil and ADRunsController.getRunForVehicle(vehicle) or nil
|
||||
return run ~= nil and run.waitPoolGroup or nil
|
||||
end
|
||||
|
||||
local function getVehiclePosition(vehicle)
|
||||
if vehicle.rootNode == nil then
|
||||
return nil
|
||||
@@ -110,11 +117,13 @@ local function startWaiting(adEnv, task)
|
||||
local isReachable = function(candidate)
|
||||
return hasRouteBothWays(adEnv, vehicle, candidate.marker.id, task.destinationID)
|
||||
end
|
||||
local candidate = x ~= nil and ADSupplyPlanner.pickNearestFreeWaitPoint(getWaitCandidates(adEnv), claims, x, z, vehicle, isReachable) or nil
|
||||
local pool = getWaitPoolGroup(vehicle)
|
||||
local candidate = x ~= nil and ADSupplyPlanner.pickNearestFreeWaitPoint(getWaitCandidates(adEnv, pool), claims, x, z, vehicle, isReachable) or nil
|
||||
if candidate == nil then
|
||||
if not warnedNoWaitPoint[vehicle] then
|
||||
warnedNoWaitPoint[vehicle] = true
|
||||
Logging.warning(ADUnloadWait.LOG_PREFIX .. "'%s' har %.0f l rest, og målet er fuldt — intet ledigt Wait-punkt med vejnet til OG fra målet (markør i en mappe med 'Wait' i navnet), så AutoDrive venter ved målet", tostring(vehicle:getName()), rest)
|
||||
local poolText = pool ~= nil and pool ~= "" and (" i puljen '" .. pool .. "'") or ""
|
||||
Logging.warning(ADUnloadWait.LOG_PREFIX .. "'%s' har %.0f l rest, og målet er fuldt — intet ledigt Wait-punkt%s med vejnet til OG fra målet (markør i en mappe med 'Wait' i navnet), så AutoDrive venter ved målet", tostring(vehicle:getName()), rest, poolText)
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
<multiplayer supported="true"/>
|
||||
<extraSourceFiles>
|
||||
<sourceFile filename="adSupplyPlanner.lua"/>
|
||||
<sourceFile filename="adRuns.lua"/>
|
||||
<sourceFile filename="adRunsStorage.lua"/>
|
||||
<sourceFile filename="adRunsController.lua"/>
|
||||
<sourceFile filename="adUnloadWait.lua"/>
|
||||
<sourceFile filename="adSmartPickup.lua"/>
|
||||
</extraSourceFiles>
|
||||
|
||||
Reference in New Issue
Block a user