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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user