--Teclado creado por Jorge_97
 
teclado_img={}

rect={}

for i=1,3 do
	rect[i]={}
end


rect[1][1]={x=3,y=112,w=36,h=33,l={"Q","q",1}}
rect[1][2]={x=48,y=112,w=36,h=33,l={"W","w",2}}
rect[1][3]={x=91,y=112,w=36,h=33,l={"E","e",3}}
rect[1][4]={x=135,y=112,w=36,h=33,l={"R","r",4}}
rect[1][5]={x=179,y=112,w=36,h=33,l={"T","t",5}}
rect[1][6]={x=222,y=112,w=36,h=33,l={"Y","y",6}}
rect[1][7]={x=266,y=112,w=36,h=33,l={"U","u",7}}
rect[1][8]={x=309,y=112,w=36,h=33,l={"I","i",8}}
rect[1][9]={x=353,y=112,w=36,h=33,l={"O","o",9}}
rect[1][10]={x=397,y=112,w=36,h=33,l={"P","p",0}}


rect[2][1]={x=22,y=153,w=35,h=33,l={"A","a","-"}}
rect[2][2]={x=65,y=153,w=35,h=33,l={"S","s","+"}}
rect[2][3]={x=109,y=153,w=35,h=33,l={"D","d","("}}
rect[2][4]={x=152,y=153,w=35,h=33,l={"F","f",")"}}
rect[2][5]={x=195,y=153,w=35,h=33,l={"G","g","*"}}
rect[2][6]={x=238,y=153,w=35,h=33,l={"H","h","["}}
rect[2][7]={x=281,y=153,w=35,h=33,l={"J","j","]"}}
rect[2][8]={x=324,y=153,w=35,h=33,l={"K","k","%"}}
rect[2][9]={x=367,y=153,w=35,h=33,l={"L","l","#"}}
rect[2][10]={x=410,y=153,w=35,h=33,l={"Ñ","ñ","@"}}


rect[3][1]={x=48,y=194,w=34,h=33,l={"Z","z","<"}}
rect[3][2]={x=91,y=194,w=34,h=33,l={"X","x",">"}}
rect[3][3]={x=132,y=194,w=34,h=33,l={"C","c","¡"}}
rect[3][4]={x=175,y=194,w=34,h=33,l={"V","v","?"}}
rect[3][5]={x=217,y=194,w=34,h=33,l={"B","b","="}}
rect[3][6]={x=260,y=194,w=34,h=33,l={"N","n","{"}}
rect[3][7]={x=302,y=194,w=34,h=33,l={"M","m","}"}}
rect[3][8]={x=345,y=194,w=34,h=33,l={",",",",";"}}
rect[3][9]={x=387,y=194,w=34,h=33,l={".",".",":"}}


tec_a={}

tec_a[1]={x=68,y=234,w=55,h=32}
tec_a[2]={x=132,y=234,w=203,h=32}
tec_a[3]={x=345,y=234,w=87,h=32}
tec_a[4]={x=440,y=113,w=35,h=32}

function teclado(string_format,title_teclado,character_max,initial)

--El tipo de cáracter, puede ser Letra(MAYÚSCULA, Minúscula o signo) o Numérico 
letter_type=1
--Variable que indica si el botón está mantenido...
boton_mantenido=0
--La variable donde se almacena el texto que escribes
txt_generado=initial
-- Contador que sirve para el parpadeo de el puntero de texto
system_tempo=timer.new()
system_tempo:start()
--Variable que indica en que letra estas situado
rect_actual=1
--Variable que impide que puedas poner mas de un punto en el teclado numérico
character_point=false



for i=1,3 do
	teclado_img[i]=image.load("OTHER/teclado"..i..".png")
end


while true do
controls.read()
teclado_img[letter_type]:blit(0,0)

posx=0
posy=0

for i=1,4 do
	if col(p,tec_a[i]) then draw.fillrect(tec_a[i].x,tec_a[i].y,tec_a[i].w,tec_a[i].h,blanco_t) end
end

if controls.press("cross") then
	if col(p,tec_a[1]) then txt_generado="" break end
	if col(p,tec_a[2]) then
		if #txt_generado<character_max then 
			if string_format==1 then 
				txt_generado = txt_generado.." "
			elseif string_format==2 and character_point==false then
				txt_generado = txt_generado.."."
				character_point=true
			end
		end
	end
	if col(p,tec_a[3]) then break end
	if col(p,tec_a[4]) then
		if string.sub(txt_generado,txt_generado:len())=="." then character_point=false end
		txt_generado = string.sub(txt_generado,1,txt_generado:len()-1) 
	end
end

for y=1,3 do
	for x=1,#rect[y] do
		if col(p,rect[y][x]) then
			posx=x
			posy=y
		end
	end
end

if posx!=0 and posy!=0 then
	draw.fillrect(rect[posy][posx].x,rect[posy][posx].y,rect[posy][posx].w,rect[posy][posx].h,blanco_t)
	--Función para escribir
	if controls.press("cross") and screen.textwidth(txt_generado,0.8)<445 and #txt_generado<character_max then
		txt_generado=txt_generado..rect[posy][posx].l[letter_type]
	end
end

--Función para dejar un espacio o poner un punto
if controls.press("triangle") and #txt_generado<character_max then 
	if string_format==1 then 
		txt_generado = txt_generado.." "
	elseif string_format==2 and character_point==false then
		txt_generado = txt_generado.."."
		character_point=true
	end
end

--Función para borrar
if controls.press("square") then 
	if string.sub(txt_generado,txt_generado:len())=="." then character_point=false end
	txt_generado = string.sub(txt_generado,1,txt_generado:len()-1) 
end
if controls.square() then boton_mantenido=boton_mantenido+1 end
if boton_mantenido>30 then txt_generado="" end
if controls.release("square") then boton_mantenido=0 end

--Mostramos el texto que llevamos escrito
screen.print(13,72,txt_generado,0.8,blanco,0)

--Paradeo del puntero
if system_tempo:time()>1000 then system_tempo:reset() end
if system_tempo:time()>500 then
	draw.fillrect(85+screen.textwidth(txt_generado,0.7),65,1,10,negro)
end
screen.print(80,65,txt_generado,0.7,negro,0)


--Movimiento de cursor
if controls.left() then p.x=p.x-3 elseif controls.right() then p.x=p.x+3 end
if controls.up() then p.y=p.y-3 elseif controls.down() then p.y=p.y+3 end


--Dos formatos: Teclado Numerico y teclado de Letras y Signos
if string_format==1 then
	if controls.press("select") then letter_type=letter_type+1 end
	if letter_type>3 then letter_type=1 end
else letter_type=3 end

p.i:blit(p.x,p.y)
--Cerramos el Teclado 
if controls.release("start") then break end
screen.flip()
end

--Liberamos

for i=1,3 do
	if type(teclado_img[i])=="userdata" then teclado_img[i]:free() teclado_img[i]=nil end
end

--Devolverá String o Number dependiendo del formato elegido
if string_format==2 and tonumber(txt_generado)==nil then txt_generado=0 end
if string_format==2 then return tonumber(txt_generado) else return txt_generado end

end
