64 lines
1.7 KiB
Lua
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
|