fix(status): farve som Flows-listen, solgte køretøjer skjules og tasten er Alt+Insert

- En flow-traktors linje følger flowets niveau (venter/fejl) som Flows-listen.
- Solgte/slettede køretøjer (isDeleted, ingen/død rootNode) vises ikke under
  stået stille.
- Standardtasten er venstre Alt + Insert (S er spillets gå/bremse-akse).
This commit is contained in:
2026-09-30 15:08:33 +02:00
parent 979b7f72d5
commit 9fde03f950
5 changed files with 21 additions and 11 deletions
+13 -5
View File
@@ -1,6 +1,6 @@
-- AD Status Hud
-- Statusvinduet på skærmen (i stil med Simple Inspector): slås til/fra med input-handlingen SPU_TOGGLE_STATUS
-- (standard venstre Alt + S). Øjebliksbilledet bygges af modens egne statusfunktioner (samme som fanerne) højst
-- (standard venstre Alt + Insert). Øjebliksbilledet bygges af modens egne statusfunktioner (samme som fanerne) højst
-- hvert sekund i update() og kun mens vinduet er tændt; draw() tegner kun de cachede linjer og bredder.
-- Synligheden gemmes pr. bruger i modSettings/FS25_ADSmartPickup/status.xml (standard skjult).
-- Kører kun på en klient (ikke dedikeret server). Alle spilkald er beskyttet; fejl logges én gang pr. nøgle.
@@ -135,7 +135,8 @@ function ADStatusHud.flowEntries(adEnv, proxy)
local vehicle = byId[vehicleId]
if vehicle ~= nil then
local action, level = vehicleAction(adEnv, vehicle)
if runLevel == "error" then level = "error" end
-- farven følger flowets niveau som Flows-listen (venter/fejl), ellers traktorens egen handling
if runLevel == "error" or runLevel == "waiting" then level = runLevel end
table.insert(entries, {vehicle = tostring(ADRuns.vehicleLabel(vehicle)), action = action,
fillPercent = guarded("fillPercent", fillPercent, adEnv, vehicle), level = level})
end
@@ -188,6 +189,13 @@ function ADStatusHud.chainEntries(proxy)
return result
end
-- Solgt/slettet køretøj (ADStuckDiag kan holde det et øjeblik efter salget).
local function isGone(vehicle)
if vehicle == nil or vehicle.isDeleted then return true end
if vehicle.rootNode == nil then return true end
return entityExists ~= nil and not entityExists(vehicle.rootNode)
end
-- Gårdens køretøjer der har stået stille over grænsen, uden at Smart Pickup selv holder dem (Wait/udkørsel).
function ADStatusHud.stuckEntries()
local entries = {}
@@ -195,9 +203,9 @@ function ADStatusHud.stuckEntries()
local farmId = g_currentMission ~= nil and g_currentMission.getFarmId ~= nil and g_currentMission:getFarmId() or nil
for _, still in ipairs(ADStuckDiag.stillVehicles(ADStatusHud.STUCK_WARN_MS)) do
local vehicle = still.vehicle
local owned = farmId == nil or (vehicle.getOwnerFarmId ~= nil and vehicle:getOwnerFarmId() == farmId)
local held = (ADUnloadWait ~= nil and ADUnloadWait.getWaitFor ~= nil and ADUnloadWait.getWaitFor(vehicle) ~= nil)
or (ADOutbound ~= nil and ADOutbound.getHoldFor ~= nil and ADOutbound.getHoldFor(vehicle) ~= nil)
local owned = not isGone(vehicle) and (farmId == nil or (vehicle.getOwnerFarmId ~= nil and vehicle:getOwnerFarmId() == farmId))
local held = owned and ((ADUnloadWait ~= nil and ADUnloadWait.getWaitFor ~= nil and ADUnloadWait.getWaitFor(vehicle) ~= nil)
or (ADOutbound ~= nil and ADOutbound.getHoldFor ~= nil and ADOutbound.getHoldFor(vehicle) ~= nil))
if owned and not held then
table.insert(entries, {text = string.format(textOf("spu_status_stuck"), tostring(ADRuns.vehicleLabel(vehicle)),
math.floor(still.ms / 60000)), level = "error"})
+1 -1
View File
@@ -72,7 +72,7 @@
</actions>
<inputBinding>
<actionBinding action="SPU_TOGGLE_STATUS">
<binding device="KB_MOUSE_DEFAULT" input="KEY_lalt KEY_s"/>
<binding device="KB_MOUSE_DEFAULT" input="KEY_lalt KEY_insert"/>
</actionBinding>
</inputBinding>
</modDesc>