feat(pulje): marker der venter på en maskine betjenes længst-ventende først
This commit is contained in:
@@ -374,6 +374,9 @@ end
|
|||||||
-- Seneste beslutning pr. mark (GUI viser pleje-behov og grunde).
|
-- Seneste beslutning pr. mark (GUI viser pleje-behov og grunde).
|
||||||
ADFieldJobs.lastDecision = {}
|
ADFieldJobs.lastDecision = {}
|
||||||
|
|
||||||
|
-- Hvornår en mark begyndte at vente på en maskine (kø: længst ventende får næste ledige traktor).
|
||||||
|
ADFieldJobs.waitingSince = {}
|
||||||
|
|
||||||
local function stepField(adEnv, info, env)
|
local function stepField(adEnv, info, env)
|
||||||
local current = ADFieldJobs.getField(info.id)
|
local current = ADFieldJobs.getField(info.id)
|
||||||
local field = ADFieldModel.onReadiness(current, info.readyRatio or 0)
|
local field = ADFieldModel.onReadiness(current, info.readyRatio or 0)
|
||||||
@@ -406,6 +409,7 @@ local function stepField(adEnv, info, env)
|
|||||||
end
|
end
|
||||||
local nextField = ADFieldModel.advance(field, info.needs)
|
local nextField = ADFieldModel.advance(field, info.needs)
|
||||||
ADFieldJobs.setField(nextField)
|
ADFieldJobs.setField(nextField)
|
||||||
|
ADFieldJobs.waitingSince[info.id] = nil
|
||||||
ADFieldJobs.forgetFinished(info.id)
|
ADFieldJobs.forgetFinished(info.id)
|
||||||
ADFieldWork.windDownHelpers(adEnv, info.id, field.stage)
|
ADFieldWork.windDownHelpers(adEnv, info.id, field.stage)
|
||||||
ADFieldJobs.log(info.id, "%s -> %s", field.stage, nextField.stage)
|
ADFieldJobs.log(info.id, "%s -> %s", field.stage, nextField.stage)
|
||||||
@@ -423,7 +427,12 @@ local function stepField(adEnv, info, env)
|
|||||||
if not ADFieldJobs.mayDispatch(ADFieldJobs.now, ADFieldJobs.lastDispatchAt) then return end
|
if not ADFieldJobs.mayDispatch(ADFieldJobs.now, ADFieldJobs.lastDispatchAt) then return end
|
||||||
local before = ADFieldJobs.assignmentCount()
|
local before = ADFieldJobs.assignmentCount()
|
||||||
ADFieldWork.dispatch(adEnv, field, info, decision)
|
ADFieldWork.dispatch(adEnv, field, info, decision)
|
||||||
if ADFieldJobs.assignmentCount() > before then ADFieldJobs.lastDispatchAt = ADFieldJobs.now end
|
if ADFieldJobs.assignmentCount() > before then
|
||||||
|
ADFieldJobs.lastDispatchAt = ADFieldJobs.now
|
||||||
|
ADFieldJobs.waitingSince[info.id] = nil
|
||||||
|
elseif ADFieldJobs.waitingSince[info.id] == nil then
|
||||||
|
ADFieldJobs.waitingSince[info.id] = ADFieldJobs.now
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -483,7 +492,9 @@ function ADFieldJobs.tick(adEnv, dt)
|
|||||||
local env = ADFieldJobs.environment()
|
local env = ADFieldJobs.environment()
|
||||||
local slice = ADFieldJobs.tickCount % ADFieldJobs.PASSIVE_SLICES
|
local slice = ADFieldJobs.tickCount % ADFieldJobs.PASSIVE_SLICES
|
||||||
local stepped = 0
|
local stepped = 0
|
||||||
for index, info in ipairs(ADFields.list()) do
|
local infos = ADFields.list()
|
||||||
|
if ADPool ~= nil then infos = ADPool.queueOrder(infos, ADFieldJobs.waitingSince) end
|
||||||
|
for index, info in ipairs(infos) do
|
||||||
-- passive marker (der sker intet uden brugeren) vurderes kun i deres tiendedel af sekunderne
|
-- passive marker (der sker intet uden brugeren) vurderes kun i deres tiendedel af sekunderne
|
||||||
if not ADFieldModel.isPassive(ADFieldJobs.getField(info.id)) or index % ADFieldJobs.PASSIVE_SLICES == slice then
|
if not ADFieldModel.isPassive(ADFieldJobs.getField(info.id)) or index % ADFieldJobs.PASSIVE_SLICES == slice then
|
||||||
stepped = stepped + 1
|
stepped = stepped + 1
|
||||||
|
|||||||
Reference in New Issue
Block a user