Files
pepe-el-pintor-ascii/pepe_pintor_dx/lib/input.lua
T

64 lines
1.7 KiB
Lua

-- Input modern — wrappers per btn/btnp amb un mapejat unic d'accions.
--
-- Cada accio te una llista de tecles (perque l'usuari puga jugar amb
-- fletxes o amb O P Q A indistintament). En cada frame guardem l'estat
-- 'held' (mante premut) i 'pressed' (acaba de ser premut). Aixi les
-- escenes no han de saber res de KEY_*.
local M = {}
M.accions = {
amunt = { KEY_UP, KEY_Q },
avall = { KEY_DOWN, KEY_A },
esq = { KEY_LEFT, KEY_O },
dreta = { KEY_RIGHT, KEY_P },
accept = { KEY_RETURN, KEY_SPACE, KEY_KP_ENTER },
cancel = { KEY_ESCAPE },
}
M.held = {}
M.pressed = {}
local function qualsevol_btn(tecles)
for i = 1, #tecles do
if btn(tecles[i]) then return true end
end
return false
end
local function qualsevol_btnp(tecles)
for i = 1, #tecles do
if btnp(tecles[i]) then return true end
end
return false
end
function M.reset()
for nom, _ in pairs(M.accions) do
M.held[nom] = false
M.pressed[nom] = false
end
end
function M.tick()
for nom, tecles in pairs(M.accions) do
M.held[nom] = qualsevol_btn(tecles)
M.pressed[nom] = qualsevol_btnp(tecles)
end
end
-- Helpers per a les escenes — mes legibles que llegir taules directament.
function M.es_mante(accio) return M.held[accio] == true end
function M.acaba_premuda(accio) return M.pressed[accio] == true end
-- Per a la pantalla titol/logo: «qualsevol tecla» per avançar.
local TECLES_AVANCAR = { KEY_RETURN, KEY_SPACE, KEY_KP_ENTER,
KEY_O, KEY_P, KEY_Q, KEY_A,
KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT }
function M.qualsevol_tecla()
return qualsevol_btnp(TECLES_AVANCAR)
end
return M