feat(pulje): spil-adapter — frakoblede redskaber med parkering+Connect og ledige solo-traktorer med hk
This commit is contained in:
@@ -133,3 +133,81 @@ function ADPool.blocked(nowMs)
|
|||||||
end
|
end
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- ---- spil ----
|
||||||
|
|
||||||
|
local function parkMarker(adEnv, vehicle)
|
||||||
|
local index = vehicle.advd ~= nil and vehicle.advd.parkDestination or nil
|
||||||
|
if type(index) ~= "number" or index < 1 then return nil end
|
||||||
|
return adEnv.ADGraphManager:getMapMarkerById(index)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function positionOf(vehicle)
|
||||||
|
local x, _, z = getWorldTranslation(vehicle.rootNode)
|
||||||
|
return x, z
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Butiksdata: redskabets krævede effekt (hk). specs indlæses først, når butikken har vist varen.
|
||||||
|
local function neededHpOf(vehicle)
|
||||||
|
if g_storeManager == nil or vehicle.configFileName == nil then return nil end
|
||||||
|
local item = g_storeManager:getItemByXMLFilename(vehicle.configFileName)
|
||||||
|
if item == nil then return nil end
|
||||||
|
if item.specs == nil and StoreItemUtil ~= nil and StoreItemUtil.loadSpecsFromXML ~= nil then
|
||||||
|
pcall(StoreItemUtil.loadSpecsFromXML, item)
|
||||||
|
end
|
||||||
|
return item.specs ~= nil and ADPool.numberOf(item.specs.neededPower) or nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Traktorens effekt i hk: motorens topeffekt (kW) omregnet; ellers butiksdata.
|
||||||
|
local function tractorHpOf(vehicle)
|
||||||
|
local motor = vehicle.spec_motorized ~= nil and vehicle.spec_motorized.motor or nil
|
||||||
|
local kw = motor ~= nil and motor.peakMotorPower or nil
|
||||||
|
if type(kw) == "number" and kw > 0 then return kw * 1.35962 end
|
||||||
|
if g_storeManager == nil or vehicle.configFileName == nil then return nil end
|
||||||
|
local item = g_storeManager:getItemByXMLFilename(vehicle.configFileName)
|
||||||
|
return item ~= nil and item.specs ~= nil and ADPool.numberOf(item.specs.power) or nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local function isAttached(vehicle)
|
||||||
|
return vehicle.getAttacherVehicle ~= nil and vehicle:getAttacherVehicle() ~= nil
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Puljeredskaber (frakoblet, parkering "X", markør "Connect X") og puljetraktorer.
|
||||||
|
-- isBusy(vehicle): markarbejdets optaget-regel (opgave, AD/CP kører, lånt af marksilo, på hjemtur).
|
||||||
|
function ADPool.collect(adEnv, isBusy)
|
||||||
|
local markers = adEnv.ADGraphManager:getMapMarkers()
|
||||||
|
local farmId = g_currentMission:getFarmId()
|
||||||
|
local implements, tractors = {}, {}
|
||||||
|
-- spillets egen liste: frakoblede redskaber er ikke nødvendigvis i AutoDrive's køretøjsliste
|
||||||
|
for _, vehicle in pairs(g_currentMission.vehicleSystem.vehicles) do
|
||||||
|
local owned = vehicle.getOwnerFarmId ~= nil and vehicle:getOwnerFarmId() == farmId
|
||||||
|
if owned and vehicle.spec_motorized == nil and vehicle.spec_attachable ~= nil and not isAttached(vehicle) then
|
||||||
|
local park = parkMarker(adEnv, vehicle)
|
||||||
|
local connect = park ~= nil and ADPool.connectFor(park.name, markers) or nil
|
||||||
|
local specs = connect ~= nil and ADCpBridge.getSpecs(vehicle) or nil
|
||||||
|
local role = specs ~= nil and ADPool.roleOf(specs) or nil
|
||||||
|
if role ~= nil then
|
||||||
|
local x, z = positionOf(vehicle)
|
||||||
|
table.insert(implements, {
|
||||||
|
id = ADRunsController.getVehicleId(vehicle), vehicle = vehicle, name = ADRuns.vehicleLabel(vehicle),
|
||||||
|
role = role, roles = specs.sprayRoles, x = x, z = z, width = ADCpBridge.getWorkWidth(vehicle),
|
||||||
|
neededHp = neededHpOf(vehicle), connectId = connect.id, parkId = park.id,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local state = ADFieldJobs.state
|
||||||
|
for _, vehicle in ipairs(ADRunsController.getFarmVehicles(adEnv)) do
|
||||||
|
local id = ADRunsController.getVehicleId(vehicle)
|
||||||
|
local park = parkMarker(adEnv, vehicle)
|
||||||
|
local controlled = vehicle.getIsControlled ~= nil and vehicle:getIsControlled()
|
||||||
|
if id ~= nil and park ~= nil and vehicle.spec_attacherJoints ~= nil and #ADHitch.rearImplementsOf(vehicle) == 0
|
||||||
|
and ADRunsController.getRunForVehicle(vehicle) == nil and not controlled and not isBusy(vehicle)
|
||||||
|
and not ADPool.isReturning(vehicle) and ADFieldFleet.isEnabled(state.fleetMode, state.fleet, id) then
|
||||||
|
local x, z = positionOf(vehicle)
|
||||||
|
table.insert(tractors, {id = id, vehicle = vehicle, name = ADRuns.vehicleLabel(vehicle), x = x, z = z,
|
||||||
|
hp = tractorHpOf(vehicle), parkId = park.id})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return implements, tractors
|
||||||
|
end
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
<sourceFile filename="adFieldSilos.lua"/>
|
<sourceFile filename="adFieldSilos.lua"/>
|
||||||
<sourceFile filename="adCpResume.lua"/>
|
<sourceFile filename="adCpResume.lua"/>
|
||||||
<sourceFile filename="adHitch.lua"/>
|
<sourceFile filename="adHitch.lua"/>
|
||||||
|
<sourceFile filename="adPool.lua"/>
|
||||||
<sourceFile filename="adFieldJobs.lua"/>
|
<sourceFile filename="adFieldJobs.lua"/>
|
||||||
<sourceFile filename="adMonthView.lua"/>
|
<sourceFile filename="adMonthView.lua"/>
|
||||||
<sourceFile filename="adProfiler.lua"/>
|
<sourceFile filename="adProfiler.lua"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user