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:
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user