-- 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