- Classe mapa pot guardar i carregar
- [WIP] Editor bàsic - Classe textbox
This commit is contained in:
@@ -1,7 +1,62 @@
|
||||
function editor_init()
|
||||
set_update(editor_update)
|
||||
end
|
||||
editor={
|
||||
paused=true,
|
||||
cam={x=0,y=0},
|
||||
selected_tile=3,
|
||||
|
||||
function editor_update()
|
||||
|
||||
end
|
||||
init=function()
|
||||
set_update(editor.update)
|
||||
editor.show_menu()
|
||||
end,
|
||||
|
||||
show_menu=function()
|
||||
menu.show({ {"NEW MAP", editor.new},
|
||||
{"LOAD MAP", function() textbox.show("FILENAME TO LOAD:",editor.load, mapa.name) end},
|
||||
{"SAVE MAP", function() if mapa.name~=nil then editor.save(mapa.name) else textbox.show("FILENAME TO SAVE:",editor.save, mapa.name) end end},
|
||||
-- {"BACK TO EDITOR", function() editor.paused=false end},
|
||||
{"EXIT", main_init},
|
||||
-- {"ENNER LLOR NEIM", function() textbox.show("PELANDRUSC!") end}
|
||||
}, function()editor.paused=false end)
|
||||
end,
|
||||
|
||||
update=function()
|
||||
cls()
|
||||
camera(editor.cam.x, editor.cam.y)
|
||||
map(0,0,0,0,mapa.w, mapa.h)
|
||||
|
||||
local mx,my=mousex()+editor.cam.x,mousey()+editor.cam.y
|
||||
local tx,ty=mx>>3,my>>3
|
||||
local rx,ry=tx<<3,ty<<3
|
||||
rect(rx-1, ry-1, rx+8, ry+8, 10)
|
||||
camera(0,0)
|
||||
|
||||
if not editor.paused then
|
||||
if mbtn(1) then
|
||||
mset(tx,ty,editor.selected_tile)
|
||||
end
|
||||
|
||||
if btnp(KEY_RIGHT) then editor.cam.x=editor.cam.x+8 end
|
||||
if btnp(KEY_LEFT) then editor.cam.x=editor.cam.x-8 end
|
||||
if btnp(KEY_UP) then editor.cam.y=editor.cam.y-8 end
|
||||
if btnp(KEY_DOWN) then editor.cam.y=editor.cam.y+8 end
|
||||
if btnp(KEY_ESCAPE) then
|
||||
editor.paused=true
|
||||
editor.show_menu()
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
new=function()
|
||||
mapa.new(128,128)
|
||||
editor.paused=false
|
||||
end,
|
||||
|
||||
save=function(filename)
|
||||
mapa.save(filename)
|
||||
editor.paused=false
|
||||
end,
|
||||
|
||||
load=function(filename)
|
||||
mapa.load(filename)
|
||||
editor.paused=false
|
||||
end
|
||||
}
|
||||
|
||||
@@ -3,4 +3,4 @@ config=ja2
|
||||
width=160
|
||||
height=144
|
||||
zoom=5
|
||||
files=mapa.lua,editor.lua,menu.lua,main.lua
|
||||
files=mapa.lua,editor.lua,textbox.lua,menu.lua,main.lua
|
||||
|
||||
@@ -7,9 +7,18 @@ function _init()
|
||||
local pal=loadpal("tiles.gif")
|
||||
setpal(pal)
|
||||
|
||||
main_init()
|
||||
end
|
||||
|
||||
function _update()
|
||||
update()
|
||||
end
|
||||
|
||||
|
||||
function main_init()
|
||||
set_update(menu_update)
|
||||
second_menu = {{"PEIV", function() end},{"TORNAR",show_main_menu}}
|
||||
main_menu = { {"EDITOR", editor_init}, {"EIXIR", quit}, {"TEST", function() menu.show(second_menu) end } }
|
||||
main_menu = { {"EDITOR", editor.init}, {"EIXIR", quit}, {"TEST", function() menu.show(second_menu) end } }
|
||||
show_main_menu()
|
||||
end
|
||||
|
||||
@@ -21,10 +30,6 @@ function set_update(new_update)
|
||||
update=new_update
|
||||
end
|
||||
|
||||
function _update()
|
||||
update()
|
||||
end
|
||||
|
||||
function menu_update()
|
||||
cls()
|
||||
color(1)
|
||||
|
||||
@@ -1,19 +1,56 @@
|
||||
mapa={
|
||||
name=nil,
|
||||
w=128,
|
||||
h=128,
|
||||
surface=nil,
|
||||
|
||||
new = function(w,h)
|
||||
mapa.name=nil
|
||||
mapa.w,mapa.h=w,h
|
||||
if mapa.surface~=nil then freesurf(mapa.surface) end
|
||||
mapa.surface=newsurf(w,h)
|
||||
setmap(mapa.surface)
|
||||
for y=0,127 do
|
||||
for x=0,127 do
|
||||
mset(x,y,0)
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
load = function(filename)
|
||||
|
||||
file = io.open("data/"..filename, "r")
|
||||
if file then
|
||||
io.input(file)
|
||||
mapa.w = io.read()
|
||||
mapa.h = io.read()
|
||||
mapa.new(mapa.w, mapa.h)
|
||||
mapa.name=filename
|
||||
for y=0,mapa.h-1 do
|
||||
local line = io.read()
|
||||
local x=0
|
||||
for m in string.gmatch(line, "%d+") do
|
||||
mset(x,y,m)
|
||||
x=x+1
|
||||
end
|
||||
end
|
||||
io.close(file)
|
||||
end
|
||||
end,
|
||||
|
||||
save = function(filename)
|
||||
mapa.name=filename
|
||||
if file then
|
||||
file = io.open("data/"..filename, "w")
|
||||
io.output(file)
|
||||
io.write(mapa.w.."\n")
|
||||
io.write(mapa.h.."\n")
|
||||
for y=0,mapa.h-1 do
|
||||
for x=0,mapa.w-1 do
|
||||
io.write(mget(x,y)..",")
|
||||
end
|
||||
io.write("\n")
|
||||
end
|
||||
io.close(file)
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -2,19 +2,25 @@ menu = {
|
||||
options=nil,
|
||||
old_update=nil,
|
||||
selected=1,
|
||||
return_function=nil,
|
||||
|
||||
show=function(op)
|
||||
show=function(op, retfun)
|
||||
menu.options=op
|
||||
menu.old_update=update
|
||||
update=menu.update
|
||||
menu.selected=1
|
||||
menu.return_function=retfun
|
||||
end,
|
||||
|
||||
update=function()
|
||||
menu.old_update()
|
||||
|
||||
rectfill(10,20, 150, 34+#menu.options*10,6)
|
||||
rect(10,20, 150, 34+#menu.options*10,8)
|
||||
|
||||
for i,v in ipairs(menu.options) do
|
||||
color(4) if menu.selected==i then color(15) prnt(">",10,20+i*10) end
|
||||
prnt(v[1],14,20+i*10)
|
||||
color(4) if menu.selected==i then color(15) prnt(">",20,20+i*10) end
|
||||
prnt(v[1],24,20+i*10)
|
||||
end
|
||||
|
||||
if btnp(KEY_DOWN) then menu.selected=menu.selected+1 end
|
||||
@@ -26,6 +32,13 @@ menu = {
|
||||
update=menu.old_update
|
||||
menu.options[menu.selected][2]()
|
||||
end
|
||||
|
||||
|
||||
if btnp(KEY_ESCAPE) then
|
||||
if menu.return_function then
|
||||
update=menu.old_update
|
||||
menu.return_function()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
}
|
||||
|
||||
41
data/textbox.lua
Normal file
41
data/textbox.lua
Normal file
@@ -0,0 +1,41 @@
|
||||
keyvalues="000abcdefghijklmnopqrstuvwxyz1234567890"
|
||||
textbox={
|
||||
value=nil,
|
||||
title=nil,
|
||||
old_update=nil,
|
||||
return_function=nil,
|
||||
|
||||
show=function(title, retfun, default_value)
|
||||
textbox.title=title
|
||||
textbox.value=default_value
|
||||
textbox.old_update=update
|
||||
update=textbox.update
|
||||
textbox.return_function=retfun
|
||||
if textbox.value==nil then textbox.value="" end
|
||||
end,
|
||||
|
||||
update=function()
|
||||
rectfill(20,50, 140, 90,6)
|
||||
rect(20,50, 140, 90,8)
|
||||
if textbox.title then prnt(textbox.title,30,55) end
|
||||
rect(40,70, 120, 80,8)
|
||||
if textbox.value then
|
||||
prnt(textbox.value,43,73)
|
||||
if (flr(time()*4)%2)==0 then
|
||||
prnt("_",43+#textbox.value*4,73)
|
||||
end
|
||||
end
|
||||
|
||||
local tecla=btnp()
|
||||
if tecla>=4 and tecla<=39 then
|
||||
textbox.value=textbox.value..string.sub(keyvalues,tecla,tecla)
|
||||
elseif tecla==KEY_PERIOD then
|
||||
textbox.value=textbox.value.."."
|
||||
elseif tecla==KEY_BACKSPACE then
|
||||
textbox.value=string.sub(textbox.value,1,-2)
|
||||
elseif tecla==KEY_RETURN then
|
||||
update=textbox.old_update
|
||||
textbox.return_function(textbox.value)
|
||||
end
|
||||
end
|
||||
}
|
||||
Reference in New Issue
Block a user