Scripting: Allow display input script to work even if overlay does not work initially

This commit is contained in:
Vicki Pfau 2025-04-27 22:03:06 -07:00
parent 90057703b5
commit 11ebe11c8e

View File

@ -44,27 +44,25 @@ local state = {
[C.PLATFORM.GB] = 7, [C.PLATFORM.GB] = 7,
} }
} }
state.overlay = canvas:newLayer(32, 16)
state.painter = image.newPainter(state.overlay.image)
state.painter:setBlend(false)
state.painter:setFill(true)
function state.update() function state.create()
local keys = util.expandBitmask(emu:getKeys()) if state.overlay ~= nil then
local maxKey = state.maxKey[emu:platform()] return true
for key = 0, maxKey do
if emu:getKey(key) ~= 0 then
state.painter:setFillColor(0x80FFFFFF)
else
state.painter:setFillColor(0x40404040)
end
state.drawButton[key](state)
end end
state.overlay:update() if canvas == nil then
return false
end
state.overlay = canvas:newLayer(32, 16)
if state.overlay == nil then
return false
end
state.painter = image.newPainter(state.overlay.image)
state.painter:setBlend(false)
state.painter:setFill(true)
return true
end end
function state.reset() function state.update()
local endX = canvas:screenWidth() - 32 local endX = canvas:screenWidth() - 32
local endY = canvas:screenHeight() - 16 local endY = canvas:screenHeight() - 16
@ -112,11 +110,32 @@ function state.reset()
pos.y = pos.y + input_display.offset.y; pos.y = pos.y + input_display.offset.y;
state.overlay:setPosition(pos.x, pos.y); state.overlay:setPosition(pos.x, pos.y);
local keys = util.expandBitmask(emu:getKeys())
local maxKey = state.maxKey[emu:platform()]
for key = 0, maxKey do
if emu:getKey(key) ~= 0 then
state.painter:setFillColor(0x80FFFFFF)
else
state.painter:setFillColor(0x40404040)
end
state.drawButton[key](state)
end
state.overlay:update()
end
function state.reset()
if not state.create() then
return
end
state.painter:setFillColor(0x40808080) state.painter:setFillColor(0x40808080)
state.painter:drawRectangle(0, 0, 32, 16) state.painter:drawRectangle(0, 0, 32, 16)
state.overlay:update() state.overlay:update()
end end
input_display.state = state
state.reset() state.reset()
callbacks:add("frame", state.update) callbacks:add("frame", state.update)
callbacks:add("start", state.reset) callbacks:add("start", state.reset)