diff --git a/FS25_ADSmartPickup/adPool.lua b/FS25_ADSmartPickup/adPool.lua index 3aae9b9..d4bd5af 100644 --- a/FS25_ADSmartPickup/adPool.lua +++ b/FS25_ADSmartPickup/adPool.lua @@ -133,3 +133,81 @@ function ADPool.blocked(nowMs) end return result 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 diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 000a100..31b8edd 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -47,6 +47,7 @@ +