86 lines
2.2 KiB
Lua
86 lines
2.2 KiB
Lua
-- Escena 'titol' — menu principal.
|
|
--
|
|
-- Tot esta basat en delta time: parpelleig de cursor, animacio del
|
|
-- subtitol, etc. La llista d'opcions es extensible: nomes cal afegir
|
|
-- una entrada amb un text i una funcio.
|
|
|
|
local M = {}
|
|
|
|
local TITOL = "PEPE EL PINTOR DX"
|
|
local SUBTITOL = "port lliure de PINTOR3 (Sergi Valor, 1999)"
|
|
local PERIODE_CURSOR = 0.35
|
|
|
|
local manager, input
|
|
local temps = 0
|
|
local cursor = 1
|
|
local opcions = {}
|
|
|
|
local function fes_opcions()
|
|
opcions = {
|
|
{
|
|
text = "COMENCAR PARTIDA",
|
|
accio = function() manager.canvia("joc") end,
|
|
},
|
|
-- A futur: CONTROLS, CREDITS, OPCIONS, EIXIR...
|
|
}
|
|
end
|
|
|
|
function M.entra(servicis, _args)
|
|
manager = servicis.manager
|
|
input = servicis.input
|
|
temps = 0
|
|
cursor = 1
|
|
fes_opcions()
|
|
end
|
|
|
|
function M.update(dt)
|
|
temps = temps + dt
|
|
|
|
if input.acaba_premuda("amunt") then
|
|
cursor = cursor - 1
|
|
if cursor < 1 then cursor = #opcions end
|
|
end
|
|
if input.acaba_premuda("avall") then
|
|
cursor = cursor + 1
|
|
if cursor > #opcions then cursor = 1 end
|
|
end
|
|
if input.acaba_premuda("accept") then
|
|
local op = opcions[cursor]
|
|
if op and op.accio then op.accio() end
|
|
end
|
|
end
|
|
|
|
local function centra(text, y, ink, paper)
|
|
local x = math.floor((40 - #text) / 2)
|
|
color(ink, paper)
|
|
print(text, x, y)
|
|
end
|
|
|
|
function M.draw()
|
|
color(COLOR_WHITE, COLOR_BLACK)
|
|
cls()
|
|
|
|
-- Marc decoratiu — barres horitzontals de pintura.
|
|
color(COLOR_LIGHT_RED, COLOR_BLACK)
|
|
print(string.rep(chr(220), 40), 0, 1)
|
|
print(string.rep(chr(223), 40), 0, 27)
|
|
|
|
centra(TITOL, 6, COLOR_YELLOW, COLOR_BLACK)
|
|
centra(SUBTITOL, 8, COLOR_LIGHT_GRAY, COLOR_BLACK)
|
|
|
|
-- Menu d'opcions
|
|
local y0 = 14
|
|
for i, op in ipairs(opcions) do
|
|
local actiu = (i == cursor)
|
|
local visible_cursor = math.floor(temps / PERIODE_CURSOR) % 2 == 0
|
|
local marca = (actiu and visible_cursor) and chr(16) or " "
|
|
local text = marca .. " " .. op.text
|
|
local ink = actiu and COLOR_LIGHT_GREEN or COLOR_LIGHT_GRAY
|
|
centra(text, y0 + (i - 1) * 2, ink, COLOR_BLACK)
|
|
end
|
|
|
|
centra("amunt/avall + enter", 24, COLOR_DARK_GRAY, COLOR_BLACK)
|
|
end
|
|
|
|
return M
|