diff --git a/FS25_ADSmartPickup/adStatusHud.lua b/FS25_ADSmartPickup/adStatusHud.lua index 5e9ee3e..f369062 100644 --- a/FS25_ADSmartPickup/adStatusHud.lua +++ b/FS25_ADSmartPickup/adStatusHud.lua @@ -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) diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 5d1ae11..d537e14 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -72,7 +72,8 @@ - + +