feat(pulje): hjemtur — puljeredskaber sættes af på deres parkering, traktoren kører til sin egen; optaget imens
This commit is contained in:
@@ -125,6 +125,16 @@ function ADHitch.step(job, state, dt, succeeded)
|
|||||||
return job
|
return job
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Hjemtur: hvert puljeredskabs parkering (der sættes det af), så traktorens egen parkering.
|
||||||
|
function ADHitch.homeRoute(implementParkIds, tractorParkId)
|
||||||
|
local route, seen = {}, {}
|
||||||
|
for _, id in ipairs(implementParkIds or {}) do
|
||||||
|
if not seen[id] then seen[id] = true table.insert(route, id) end
|
||||||
|
end
|
||||||
|
if tractorParkId ~= nil then table.insert(route, tractorParkId) end
|
||||||
|
return route
|
||||||
|
end
|
||||||
|
|
||||||
-- ---- spil ----
|
-- ---- spil ----
|
||||||
|
|
||||||
local jobs = setmetatable({}, {__mode = "k"}) -- [vehicle] = job (+ onDone)
|
local jobs = setmetatable({}, {__mode = "k"}) -- [vehicle] = job (+ onDone)
|
||||||
@@ -207,6 +217,16 @@ local function isImplementPark(adEnv, vehicle, markerId)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ADHitch.rearImplementsOf(vehicle)
|
||||||
|
return ADHitch.rearImplements(attachedImplements(vehicle))
|
||||||
|
end
|
||||||
|
|
||||||
|
local function parkIdOf(adEnv, vehicle)
|
||||||
|
local index = vehicle.advd ~= nil and vehicle.advd.parkDestination or nil
|
||||||
|
local marker = type(index) == "number" and index >= 1 and adEnv.ADGraphManager:getMapMarkerById(index) or nil
|
||||||
|
return marker ~= nil and marker.id or nil
|
||||||
|
end
|
||||||
|
|
||||||
-- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag
|
-- Kobler redskaberne bag traktoren af. -> ok, navne eller årsag
|
||||||
function ADHitch.tryDetach(vehicle)
|
function ADHitch.tryDetach(vehicle)
|
||||||
local rear = ADHitch.rearImplements(attachedImplements(vehicle))
|
local rear = ADHitch.rearImplements(attachedImplements(vehicle))
|
||||||
@@ -277,6 +297,26 @@ function ADHitch.route(adEnv, vehicle, markerIds, onDone)
|
|||||||
runStep(1)
|
runStep(1)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Puljeredskaber bag traktoren sættes af på deres parkering, og traktoren kører hjem til sin egen.
|
||||||
|
-- Kun redskaber med en Connect-markør til deres parkering er puljeredskaber; andre bliver siddende.
|
||||||
|
function ADHitch.returnHome(adEnv, tractor, onDone)
|
||||||
|
local markers = adEnv.ADGraphManager:getMapMarkers()
|
||||||
|
local parkIds = {}
|
||||||
|
for _, implement in ipairs(ADHitch.rearImplementsOf(tractor)) do
|
||||||
|
local parkId = parkIdOf(adEnv, implement.object)
|
||||||
|
local park = parkId ~= nil and adEnv.ADGraphManager:getMapMarkerByWayPointId(parkId) or nil
|
||||||
|
if park ~= nil and ADPool.connectFor(park.name, markers) ~= nil then table.insert(parkIds, parkId) end
|
||||||
|
end
|
||||||
|
if #parkIds == 0 then return false end
|
||||||
|
local route = ADHitch.homeRoute(parkIds, parkIdOf(adEnv, tractor))
|
||||||
|
ADPool.setReturning(tractor, true)
|
||||||
|
ADHitch.route(adEnv, tractor, route, function(vehicle, ok, detail)
|
||||||
|
ADPool.setReturning(vehicle, false)
|
||||||
|
if onDone ~= nil then onDone(vehicle, ok, detail) end
|
||||||
|
end)
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
local function tickWaits(elapsed)
|
local function tickWaits(elapsed)
|
||||||
for i = #waits, 1, -1 do
|
for i = #waits, 1, -1 do
|
||||||
local wait = waits[i]
|
local wait = waits[i]
|
||||||
|
|||||||
@@ -134,6 +134,17 @@ function ADPool.blocked(nowMs)
|
|||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Traktorer på hjemtur (sætter redskab af, kører hjem): optaget for markarbejdet til de er hjemme.
|
||||||
|
local returning = setmetatable({}, {__mode = "k"})
|
||||||
|
|
||||||
|
function ADPool.setReturning(vehicle, isOn)
|
||||||
|
returning[vehicle] = isOn and true or nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function ADPool.isReturning(vehicle)
|
||||||
|
return returning[vehicle] == true
|
||||||
|
end
|
||||||
|
|
||||||
-- ---- spil ----
|
-- ---- spil ----
|
||||||
|
|
||||||
local function parkMarker(adEnv, vehicle)
|
local function parkMarker(adEnv, vehicle)
|
||||||
|
|||||||
@@ -83,5 +83,11 @@ check("connect med vogn: stadig kobl på (ingen vending)", H.resolveAction("atta
|
|||||||
check("vognens parkering: kobl af", H.resolveAction("arrive", true), "detach")
|
check("vognens parkering: kobl af", H.resolveAction("arrive", true), "detach")
|
||||||
check("almindelig markør", H.resolveAction("arrive", false), "arrive")
|
check("almindelig markør", H.resolveAction("arrive", false), "arrive")
|
||||||
check("afkobl forbliver afkobl", H.resolveAction("detach", false), "detach")
|
check("afkobl forbliver afkobl", H.resolveAction("detach", false), "detach")
|
||||||
|
-- hjemtur: hvert puljeredskabs parkering (afkobles der), så traktorens egen parkering
|
||||||
|
local home = H.homeRoute({4}, 2)
|
||||||
|
check("hjem: to trin", #home, 2); check("hjem: redskab først", home[1], 4); check("hjem: traktor sidst", home[2], 2)
|
||||||
|
check("hjem: uden redskab kun traktor", #H.homeRoute({}, 2), 1)
|
||||||
|
check("hjem: samme parkering to gange tæller én", #H.homeRoute({4, 4}, 2), 2)
|
||||||
|
check("hjem: uden traktorparkering", #H.homeRoute({4}, nil), 1)
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
@@ -72,5 +72,12 @@ local infos = {{id = 5}, {id = 3}, {id = 9}, {id = 1}}
|
|||||||
local ordered = P.queueOrder(infos, {[9] = 100, [3] = 50, [1] = 50})
|
local ordered = P.queueOrder(infos, {[9] = 100, [3] = 50, [1] = 50})
|
||||||
check("kø: 1.", ordered[1].id, 1); check("kø: 2.", ordered[2].id, 3); check("kø: 3.", ordered[3].id, 9); check("kø: 4.", ordered[4].id, 5)
|
check("kø: 1.", ordered[1].id, 1); check("kø: 2.", ordered[2].id, 3); check("kø: 3.", ordered[3].id, 9); check("kø: 4.", ordered[4].id, 5)
|
||||||
check("kø: rører ikke input", infos[1].id, 5)
|
check("kø: rører ikke input", infos[1].id, 5)
|
||||||
|
-- på hjemtur: optaget indtil hjemme
|
||||||
|
local tractorObject = {}
|
||||||
|
check("hjemtur: ikke fra start", P.isReturning(tractorObject), false)
|
||||||
|
P.setReturning(tractorObject, true)
|
||||||
|
check("hjemtur: markeret", P.isReturning(tractorObject), true)
|
||||||
|
P.setReturning(tractorObject, false)
|
||||||
|
check("hjemtur: hjemme", P.isReturning(tractorObject), false)
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
Reference in New Issue
Block a user