fix: under Wait peger AD's mål på Wait-punktet (AD tippede ellers i småportioner og holdt vognen); behov/bytte måles mod hjem-målet; mål gendannes ved hjemkørsel (v1.11.13.0)
This commit is contained in:
@@ -13,12 +13,12 @@ ADLoadSwap.CHECK_INTERVAL_MS = 5000
|
|||||||
local warnedNoSilo = setmetatable({}, {__mode = "k"})
|
local warnedNoSilo = setmetatable({}, {__mode = "k"})
|
||||||
|
|
||||||
-- Er en anden vare i listen så tom i målet, at et FULDT læs passer, og findes den i en silo?
|
-- Er en anden vare i listen så tom i målet, at et FULDT læs passer, og findes den i en silo?
|
||||||
function ADLoadSwap.findMissingIngredient(adEnv, vehicle, restFillType)
|
function ADLoadSwap.findMissingIngredient(adEnv, vehicle, restFillType, homeWayPointId)
|
||||||
local ingredients = ADSmartPickup.getIngredientsFor(adEnv, vehicle)
|
local ingredients = ADSmartPickup.getIngredientsFor(adEnv, vehicle)
|
||||||
if ingredients == nil or #ingredients < 2 then
|
if ingredients == nil or #ingredients < 2 then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
local choice = ADSmartPickup.findSupplyPickup(adEnv, vehicle, ingredients)
|
local choice = ADSmartPickup.findSupplyPickup(adEnv, vehicle, ingredients, homeWayPointId)
|
||||||
if choice == nil or choice.fillType == nil or choice.fillType == restFillType or choice.need.fits ~= true then
|
if choice == nil or choice.fillType == nil or choice.fillType == restFillType or choice.need.fits ~= true then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@@ -99,7 +99,7 @@ function ADLoadSwap.tryFromWait(adEnv, task, wait, dt, redirect, release, isReac
|
|||||||
wait.swapTimerMs = 0
|
wait.swapTimerMs = 0
|
||||||
local vehicle = task.vehicle
|
local vehicle = task.vehicle
|
||||||
-- Tager målet slet ikke varen (forkert last), skal den af uanset hvad der ellers mangler.
|
-- Tager målet slet ikke varen (forkert last), skal den af uanset hvad der ellers mangler.
|
||||||
local missing = ADLoadSwap.findMissingIngredient(adEnv, vehicle, wait.fillType)
|
local missing = ADLoadSwap.findMissingIngredient(adEnv, vehicle, wait.fillType, wait.homeDestinationID)
|
||||||
if missing == nil and not wait.isRejected then
|
if missing == nil and not wait.isRejected then
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -517,13 +517,16 @@ end
|
|||||||
-- Fri plads + kapacitet for varen i køretøjets aflæsningsmål (Wait-punkt-logikken);
|
-- Fri plads + kapacitet for varen i køretøjets aflæsningsmål (Wait-punkt-logikken);
|
||||||
-- nil hvis målet ikke kendes eller ikke tager varen.
|
-- nil hvis målet ikke kendes eller ikke tager varen.
|
||||||
-- askAccepted=true: returnerer i stedet true/false for "tager målet varen?" (nil = mål ukendt).
|
-- askAccepted=true: returnerer i stedet true/false for "tager målet varen?" (nil = mål ukendt).
|
||||||
function ADSmartPickup.getTargetFreeCapacity(adEnv, driver, fillType, askAccepted)
|
-- targetWayPointId (valgfri): brug dette mål i stedet for AD's 2. markør (mens en traktor venter
|
||||||
|
-- ved et Wait-punkt, peger AD's markør på Wait-punktet, så AD ikke tipper).
|
||||||
|
function ADSmartPickup.getTargetFreeCapacity(adEnv, driver, fillType, askAccepted, targetWayPointId)
|
||||||
local secondMarker = driver.ad.stateModule:getSecondMarker()
|
local secondMarker = driver.ad.stateModule:getSecondMarker()
|
||||||
local farmId = getFarmId(driver)
|
local farmId = getFarmId(driver)
|
||||||
if secondMarker == nil or farmId == nil then
|
local wayPointId = targetWayPointId or (secondMarker ~= nil and secondMarker.id or nil)
|
||||||
|
if wayPointId == nil or farmId == nil then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
local targetWayPoint = adEnv.ADGraphManager:getWayPointById(secondMarker.id)
|
local targetWayPoint = adEnv.ADGraphManager:getWayPointById(wayPointId)
|
||||||
local target = targetWayPoint ~= nil and getUnloadStationAtMarker(adEnv, targetWayPoint, farmId) or nil
|
local target = targetWayPoint ~= nil and getUnloadStationAtMarker(adEnv, targetWayPoint, farmId) or nil
|
||||||
if target == nil then
|
if target == nil then
|
||||||
return nil
|
return nil
|
||||||
@@ -539,13 +542,14 @@ function ADSmartPickup.getTargetFreeCapacity(adEnv, driver, fillType, askAccepte
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Behovsstyret: den ingrediens aflæsningsmålet mangler mest, som også findes i en silo.
|
-- Behovsstyret: den ingrediens aflæsningsmålet mangler mest, som også findes i en silo.
|
||||||
function ADSmartPickup.findSupplyPickup(adEnv, driver, ingredients)
|
function ADSmartPickup.findSupplyPickup(adEnv, driver, ingredients, targetWayPointId)
|
||||||
local secondMarker = driver.ad.stateModule:getSecondMarker()
|
local secondMarker = driver.ad.stateModule:getSecondMarker()
|
||||||
local farmId = getFarmId(driver)
|
local farmId = getFarmId(driver)
|
||||||
if secondMarker == nil or farmId == nil then
|
local wayPointId = targetWayPointId or (secondMarker ~= nil and secondMarker.id or nil)
|
||||||
|
if wayPointId == nil or farmId == nil then
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
local targetWayPoint = adEnv.ADGraphManager:getWayPointById(secondMarker.id)
|
local targetWayPoint = adEnv.ADGraphManager:getWayPointById(wayPointId)
|
||||||
local target = targetWayPoint ~= nil and getUnloadStationAtMarker(adEnv, targetWayPoint, farmId) or nil
|
local target = targetWayPoint ~= nil and getUnloadStationAtMarker(adEnv, targetWayPoint, farmId) or nil
|
||||||
if target == nil then
|
if target == nil then
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@@ -216,7 +216,9 @@ local function startWaiting(adEnv, task)
|
|||||||
warnedNoWaitPoint[vehicle] = nil
|
warnedNoWaitPoint[vehicle] = nil
|
||||||
claims[candidate.marker.id] = vehicle
|
claims[candidate.marker.id] = vehicle
|
||||||
waits[vehicle] = {task = task, homeDestinationID = task.destinationID, waitMarker = candidate.marker, fillType = fillType, rest = rest}
|
waits[vehicle] = {task = task, homeDestinationID = task.destinationID, waitMarker = candidate.marker, fillType = fillType, rest = rest}
|
||||||
redirect(task, candidate.marker.id)
|
-- AD tipper (og holder vognen stille) så længe den står nær sit EGET mål — også i små
|
||||||
|
-- portioner, når målet forbruger løbende. Derfor peger AD's mål på Wait-punktet imens.
|
||||||
|
redirectForUnload(task, candidate.marker.id)
|
||||||
local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
|
local fillTypeName = g_fillTypeManager ~= nil and g_fillTypeManager:getFillTypeNameByIndex(fillType) or tostring(fillType)
|
||||||
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' venter ved %s (markør %s): %.0f l %s rest, målet har kun %.0f l fri", tostring(vehicle:getName()), tostring(candidate.marker.name), tostring(candidate.marker.markerIndex or candidate.marker.id), rest, tostring(fillTypeName), free)
|
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' venter ved %s (markør %s): %.0f l %s rest, målet har kun %.0f l fri", tostring(vehicle:getName()), tostring(candidate.marker.name), tostring(candidate.marker.markerIndex or candidate.marker.id), rest, tostring(fillTypeName), free)
|
||||||
end
|
end
|
||||||
@@ -235,8 +237,9 @@ local function updateWaiting(adEnv, task, wait, dt)
|
|||||||
end
|
end
|
||||||
-- Friske tal til evt. bytte og til tilbage-loggen — ikke dem fra da ventningen startede.
|
-- Friske tal til evt. bytte og til tilbage-loggen — ikke dem fra da ventningen startede.
|
||||||
wait.fillType, wait.rest = fillType, rest
|
wait.fillType, wait.rest = fillType, rest
|
||||||
local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType)
|
local home = wait.homeDestinationID
|
||||||
local isRejected = free == nil and ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType, true) == false
|
local free, capacity = ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType, nil, home)
|
||||||
|
local isRejected = free == nil and ADSmartPickup.getTargetFreeCapacity(adEnv, vehicle, fillType, true, home) == false
|
||||||
if isRejected then
|
if isRejected then
|
||||||
free = 0
|
free = 0
|
||||||
end
|
end
|
||||||
@@ -253,8 +256,8 @@ local function updateWaiting(adEnv, task, wait, dt)
|
|||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local home = wait.homeDestinationID
|
|
||||||
release(vehicle)
|
release(vehicle)
|
||||||
|
restoreTarget(vehicle)
|
||||||
redirect(task, home)
|
redirect(task, home)
|
||||||
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' kører tilbage fra %s og læsser %.0f l af (målet har %.0f l fri)", tostring(vehicle:getName()), tostring(wait.waitMarker.name), rest, free)
|
Logging.info(ADUnloadWait.LOG_PREFIX .. "'%s' kører tilbage fra %s og læsser %.0f l af (målet har %.0f l fri)", tostring(vehicle:getName()), tostring(wait.waitMarker.name), rest, free)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.11.12.0</version>
|
<version>1.11.13.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -783,6 +783,17 @@ check("W13 Wait selv om markøren ikke er nået", tn.destinationID, 40)
|
|||||||
FS25_AutoDrive.AutoDrive.getDistanceToUnloadPosition = nil
|
FS25_AutoDrive.AutoDrive.getDistanceToUnloadPosition = nil
|
||||||
FS25_AutoDrive.AutoDrive.getMaxTriggerDistance = nil
|
FS25_AutoDrive.AutoDrive.getMaxTriggerDistance = nil
|
||||||
|
|
||||||
|
-- W14: mens der ventes, peger AD's mål på Wait-punktet (så AD ikke tipper i småportioner);
|
||||||
|
-- behovet måles stadig mod hjem-målet, og AD's mål gendannes når den kører hjem
|
||||||
|
buildWaitWorld()
|
||||||
|
local vm, tm = makeUnloadingVehicle("Fastrac Mål", 591, 5000, 35000)
|
||||||
|
UnloadTask.update(tm, 16)
|
||||||
|
check("W14 AD's mål = Wait-punkt under ventetid", vm.ad.stateModule.secondMarkerId, 40)
|
||||||
|
waitBarnLevels[STRAW] = 10000 -- plads hjemme
|
||||||
|
UnloadTask.update(tm, 16)
|
||||||
|
check("W14 kører hjem (behov målt mod stalden, ikke Wait-punktet)", tm.destinationID, 30)
|
||||||
|
check("W14 AD's mål gendannet", vm.ad.stateModule.secondMarkerId, 30)
|
||||||
|
|
||||||
-- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ====
|
-- ==== I: run-integration — ingredienser fra run i stedet for multi-valg; Wait-pulje pr. run ====
|
||||||
-- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste)
|
-- I1: traktor i et run med ÉN valgt vare i AD får alligevel behovsstyring (run'ets liste)
|
||||||
local runDriver = buildCowWorld()
|
local runDriver = buildCowWorld()
|
||||||
|
|||||||
Reference in New Issue
Block a user