fix(wait): fysisk optagede Wait-punkter springes over; feat(udkørsel): fodring — med 'Lager til' køres ved >= 10.000 l i kilden (v1.18.3.0)

This commit is contained in:
2026-09-24 12:51:12 +02:00
parent 889689cfce
commit 925163758a
9 changed files with 88 additions and 7 deletions
+21 -2
View File
@@ -135,11 +135,30 @@ end
-- ledigt (eller allerede reserveret af dette køretøj) og som isReachable(candidate)
-- godkender (valgfri; AutoDrive slukker sig selv, hvis den sendes mod et punkt uden rute).
-- nil hvis intet punkt duer. Nåelighed tjekkes kun for de punkter der er i spil, nærmeste først.
function ADSupplyPlanner.pickNearestFreeWaitPoint(candidates, claims, x, z, vehicle, isReachable)
-- Wait-punkter hvor et ANDET køretøj fysisk holder (positions = {{x, z}}): hvert køretøj optager
-- højst ét punkt — det nærmeste inden for radius — så et nabopunkt 6 m væk ikke blokeres ved en fejl.
function ADSupplyPlanner.markOccupiedWaitPoints(candidates, positions, radius)
local occupied = {}
local limit = (radius or 6) * (radius or 6)
for _, position in ipairs(positions or {}) do
local best, bestDistance = nil, limit
for _, candidate in ipairs(candidates or {}) do
local dx, dz = candidate.x - position.x, candidate.z - position.z
local distance = dx * dx + dz * dz
if distance <= bestDistance then best, bestDistance = candidate, distance end
end
if best ~= nil then occupied[best.marker.id] = true end
end
return occupied
end
-- occupied (valgfri) = {[markerId] = true} fysisk optaget af andre; springes over medmindre man selv har reservationen.
function ADSupplyPlanner.pickNearestFreeWaitPoint(candidates, claims, x, z, vehicle, isReachable, occupied)
local free = {}
for _, candidate in ipairs(candidates) do
local owner = claims[candidate.marker.id]
if owner == nil or owner == vehicle then
local isTaken = occupied ~= nil and occupied[candidate.marker.id] == true and owner ~= vehicle
if (owner == nil or owner == vehicle) and not isTaken then
local dx, dz = candidate.x - x, candidate.z - z
table.insert(free, {candidate = candidate, distance = dx * dx + dz * dz})
end