fix(status): numpad * som tast og log når vinduet ikke kan tegnes

Standardtasten skifter fra venstre Alt + Insert (kolliderer med
FS25_UniversalAutoload) til numpad *. Mangler info-boksens skalering eller
overlays, logges det én gang. Statusvinduet henter "start afvist" fra den
rigtige ESC-fane, så et flow hvis start fejlede vises rødt som i Flows-listen.
This commit is contained in:
2026-09-30 15:28:56 +02:00
parent b33f2a3b01
commit 1c60529dfd
2 changed files with 21 additions and 6 deletions
+19 -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 + Insert). Øjebliksbilledet bygges af modens egne statusfunktioner (samme som fanerne) højst
-- (standard numpad *). Ø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.
@@ -62,10 +62,18 @@ function ADStatusHud.isClient()
end
-- Fanernes egne tekst-/statusfunktioner ligger som metoder på SmartPickupFrame og bruger kun self.i18n:
-- en let "frame" med spillets i18n genbruger dem uden at røre menuen.
-- en let "frame" med spillets i18n genbruger dem uden at røre menuen. "Start afvist" (lastStartFailed, rødt flow)
-- huskes på den rigtige ESC-fane (ADSmartPickup.guiFrame): tabellen deles, så vinduet viser samme farve som
-- Flows-listen (flowLevel rydder en afvisning når flowet kører — det samme som fanen selv gør).
local function frameProxy()
if SmartPickupFrame == nil then return nil end
return setmetatable({i18n = g_i18n, lastStartFailed = {}}, {__index = SmartPickupFrame})
local real = ADSmartPickup ~= nil and ADSmartPickup.guiFrame or nil
local failed = {}
if type(real) == "table" then
if type(real.lastStartFailed) ~= "table" then real.lastStartFailed = {} end
failed = real.lastStartFailed
end
return setmetatable({i18n = g_i18n, lastStartFailed = failed}, {__index = SmartPickupFrame})
end
local function fillTitle(fillType)
@@ -261,6 +269,8 @@ function ADStatusHud.rebuild(adEnv)
local lines = ADStatusView.lines(ADStatusHud.snapshot(adEnv), textOf, ADStatusView.MAX_LINES)
local textSize, marginX, marginY, offsetX = measureUnits()
if textSize == nil then
-- spillets info-boks (skalering) findes ikke: vinduet kan ikke måles og tegnes
logOnce("measure", "gameInfoDisplay mangler eller kan ikke skalere")
ADStatusHud.lines, ADStatusHud.layout = {}, nil
return
end
@@ -402,8 +412,12 @@ end
function ADStatusHud.draw()
if not ADStatusHud.visible or ADStatusHud.layout == nil or #ADStatusHud.lines == 0 then return end
if shouldSkipDraw() then return end
local bg = createOverlays()
if bg == nil then return end
local ok0, bg = pcall(createOverlays)
if not ok0 or bg == nil then
-- uden baggrund tegnes intet (g_overlayManager/HUD.COLOR mangler eller createOverlay fejlede)
logOnce("overlays", ok0 and "g_overlayManager eller HUD.COLOR.BACKGROUND mangler" or bg)
return
end
local ok, err = pcall(render, ADStatusHud.layout, bg)
-- tekststate nulstilles altid, også efter en fejl (andre mods/spillet tegner videre med den)
setTextColor(1, 1, 1, 1)
+2 -1
View File
@@ -72,7 +72,8 @@
</actions>
<inputBinding>
<actionBinding action="SPU_TOGGLE_STATUS">
<binding device="KB_MOUSE_DEFAULT" input="KEY_lalt KEY_insert"/>
<!-- numpad * (Insert bruges af FS25_UniversalAutoload) -->
<binding device="KB_MOUSE_DEFAULT" input="KEY_KP_multiply"/>
</actionBinding>
</inputBinding>
</modDesc>