feat(kobling): rummelig koblingsrækkevidde (3 m) og bakning de sidste 3-8 m hen til vognens trækøje ved Connect-markører; lagervisning: bredere mængde-/rate-kolonner så teksten ikke klippes (v1.53.0.0)
This commit is contained in:
@@ -27,6 +27,8 @@ ADHitch.ACT_TIMEOUT_MS = 8000 -- så længe forsøges kobling efter ankomst
|
||||
ADHitch.DETACH_TIMEOUT_MS = 20000 -- afkobling: redskabet skal måske foldes ud først (plov: "unfold the tool")
|
||||
ADHitch.TICK_MS = 250
|
||||
ADHitch.ROUTE_WAIT_MS = 10000 -- pause ved almindelige markører midt i en tur
|
||||
ADHitch.ROOMY_ATTACH_DISTANCE = 3 -- m: koblingsrækkevidde når spillets egen ikke rækker
|
||||
ADHitch.CREPT_EXTRA_DISTANCE = 8 -- m: ekstra ankomstafstand når traktoren har bakket hen til vognen
|
||||
|
||||
-- ---- ren logik ----
|
||||
|
||||
@@ -91,9 +93,13 @@ function ADHitch.findMarker(markers, name)
|
||||
return nil
|
||||
end
|
||||
|
||||
-- state = {adActive, distance, speed}
|
||||
-- state = {adActive, distance, speed, arriveDistance?} (arriveDistance: udvidet, når traktoren har bakket hen til vognen)
|
||||
local function arriveDistanceOf(state)
|
||||
return state.arriveDistance or ADHitch.ARRIVE_DISTANCE
|
||||
end
|
||||
|
||||
function ADHitch.hasArrived(state)
|
||||
return not state.adActive and state.distance <= ADHitch.ARRIVE_DISTANCE and state.speed <= ADHitch.STILL_SPEED
|
||||
return not state.adActive and state.distance <= arriveDistanceOf(state) and state.speed <= ADHitch.STILL_SPEED
|
||||
end
|
||||
|
||||
function ADHitch.newJob(markerId, markerName, action)
|
||||
@@ -110,7 +116,7 @@ function ADHitch.step(job, state, dt, succeeded)
|
||||
job.seenActive = true
|
||||
elseif ADHitch.hasArrived(state) then
|
||||
job.state = "acting"
|
||||
elseif state.distance > ADHitch.ARRIVE_DISTANCE and (job.seenActive or job.elapsed >= ADHitch.START_GRACE_MS) then
|
||||
elseif state.distance > arriveDistanceOf(state) and (job.seenActive or job.elapsed >= ADHitch.START_GRACE_MS) then
|
||||
job.state, job.reason = "failed", "stoppedAway"
|
||||
end
|
||||
elseif job.state == "acting" then
|
||||
@@ -181,9 +187,14 @@ function ADHitch.tryAttach(vehicle)
|
||||
if spec == nil or AttacherJoints == nil or AttacherJoints.updateVehiclesInAttachRange == nil then
|
||||
return false, "noJoints"
|
||||
end
|
||||
-- spillets egen rækkevidde først, så en rummeligere (spillet retter selv vognen ind ved koblingen)
|
||||
AttacherJoints.updateVehiclesInAttachRange(vehicle, AttacherJoints.MAX_ATTACH_DISTANCE_SQ,
|
||||
AttacherJoints.MAX_ATTACH_ANGLE, true)
|
||||
local info = spec.attachableInfo
|
||||
if (info == nil or info.attachable == nil) and ADHitch.ROOMY_ATTACH_DISTANCE ^ 2 > AttacherJoints.MAX_ATTACH_DISTANCE_SQ then
|
||||
AttacherJoints.updateVehiclesInAttachRange(vehicle, ADHitch.ROOMY_ATTACH_DISTANCE ^ 2, AttacherJoints.MAX_ATTACH_ANGLE, true)
|
||||
info = spec.attachableInfo
|
||||
end
|
||||
if info == nil or info.attachable == nil then return false, "noAttachable" end
|
||||
local attacher = info.attacherVehicle or vehicle
|
||||
local farmId = vehicle.getActiveFarm ~= nil and vehicle:getActiveFarm() or vehicle:getOwnerFarmId()
|
||||
@@ -272,6 +283,13 @@ local function start(adEnv, vehicle, markerId, action, onDone)
|
||||
return job
|
||||
end
|
||||
|
||||
-- Kørende kobl-på-job for traktoren (til bakningen de sidste meter), ellers nil.
|
||||
function ADHitch.pendingAttach(vehicle)
|
||||
local job = jobs[vehicle]
|
||||
if job ~= nil and job.action == "attach" and job.state == "driving" then return job end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Afbryd et hente-/koble-job (Stop alt, høsten slut, spilleren overtager): intet kobles på bagefter, og
|
||||
-- onDone kaldes ikke. -> true hvis der var et job.
|
||||
function ADHitch.cancel(vehicle)
|
||||
@@ -410,7 +428,9 @@ function ADHitch.tick(adEnv, dt)
|
||||
succeeded, detail = ACTIONS[job.action](vehicle)
|
||||
if not succeeded then job.lastReason = detail end
|
||||
end
|
||||
ADHitch.step(job, vehicleState(adEnv, vehicle, job.markerId), elapsed, succeeded)
|
||||
local state = vehicleState(adEnv, vehicle, job.markerId)
|
||||
if job.crept then state.arriveDistance = ADHitch.ARRIVE_DISTANCE + ADHitch.CREPT_EXTRA_DISTANCE end
|
||||
ADHitch.step(job, state, elapsed, succeeded)
|
||||
if job.state == "done" then
|
||||
finish(vehicle, job, true, detail)
|
||||
elseif job.state == "failed" then
|
||||
|
||||
Reference in New Issue
Block a user