mirror of https://github.com/mgba-emu/mgba.git
Res: Add demo input display script
This commit is contained in:
parent
7950279a09
commit
0e52f7054f
|
@ -0,0 +1,122 @@
|
|||
input_display = {
|
||||
anchor = "top",
|
||||
offset = {
|
||||
x = 0,
|
||||
y = 0,
|
||||
}
|
||||
}
|
||||
|
||||
local state = {
|
||||
drawButton = {
|
||||
[0] = function(state) -- A
|
||||
state.painter:drawCircle(27, 6, 4)
|
||||
end,
|
||||
[1] = function(state) -- B
|
||||
state.painter:drawCircle(23, 8, 4)
|
||||
end,
|
||||
[2] = function(state) -- Select
|
||||
state.painter:drawCircle(13, 11, 3)
|
||||
end,
|
||||
[3] = function(state) -- Start
|
||||
state.painter:drawCircle(18, 11, 3)
|
||||
end,
|
||||
[4] = function(state) -- Right
|
||||
state.painter:drawRectangle(9, 7, 4, 3)
|
||||
end,
|
||||
[5] = function(state) -- Left
|
||||
state.painter:drawRectangle(2, 7, 4, 3)
|
||||
end,
|
||||
[6] = function(state) -- Up
|
||||
state.painter:drawRectangle(6, 3, 3, 4)
|
||||
end,
|
||||
[7] = function(state) -- Down
|
||||
state.painter:drawRectangle(6, 10, 3, 4)
|
||||
end,
|
||||
[8] = function(state) -- R
|
||||
state.painter:drawRectangle(28, 0, 4, 3)
|
||||
end,
|
||||
[9] = function(state) -- L
|
||||
state.painter:drawRectangle(0, 0, 4, 3)
|
||||
end
|
||||
},
|
||||
maxKey = {
|
||||
[C.PLATFORM.GBA] = 9,
|
||||
[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()
|
||||
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()
|
||||
local endX = canvas:screenWidth() - 32
|
||||
local endY = canvas:screenHeight() - 16
|
||||
|
||||
local anchors = {
|
||||
topLeft = {
|
||||
x = 0,
|
||||
y = 0
|
||||
},
|
||||
top = {
|
||||
x = endX / 2,
|
||||
y = 0
|
||||
},
|
||||
topRight = {
|
||||
x = endX,
|
||||
y = 0
|
||||
},
|
||||
left = {
|
||||
x = 0,
|
||||
y = endY / 2
|
||||
},
|
||||
center = {
|
||||
x = endX / 2,
|
||||
y = endY / 2
|
||||
},
|
||||
right = {
|
||||
x = endX,
|
||||
y = endY / 2
|
||||
},
|
||||
bottomLeft = {
|
||||
x = 0,
|
||||
y = endY
|
||||
},
|
||||
bottom = {
|
||||
x = endX / 2,
|
||||
y = endY
|
||||
},
|
||||
bottomRight = {
|
||||
x = endX,
|
||||
y = endY
|
||||
},
|
||||
}
|
||||
|
||||
local pos = anchors[input_display.anchor];
|
||||
pos.x = pos.x + input_display.offset.x;
|
||||
pos.y = pos.y + input_display.offset.y;
|
||||
|
||||
state.overlay:setPosition(pos.x, pos.y);
|
||||
state.painter:setFillColor(0x40808080)
|
||||
state.painter:drawRectangle(0, 0, 32, 16)
|
||||
state.overlay:update()
|
||||
end
|
||||
|
||||
state.reset()
|
||||
callbacks:add("frame", state.update)
|
||||
callbacks:add("start", state.reset)
|
Loading…
Reference in New Issue