From c1c022abb8ab55013414379e0a82e21618ea97a5 Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Wed, 11 Mar 2026 12:52:35 +0100 Subject: [PATCH] =?UTF-8?q?-=20[FIX]=20app.push()=20i=20app.pop()=20trebal?= =?UTF-8?q?laven=20sobre=20mini.update,=20en=20compte=20de=20sobre=20app.u?= =?UTF-8?q?pdate=20-=20[FIX]=20tweening.update()=20ara=20es=20crida=20a=20?= =?UTF-8?q?nivell=20de=20aplicaci=C3=B3=20-=20[NEW]=20tilepicker=20i=20ite?= =?UTF-8?q?mpicker=20adequats=20al=20nou=20disseny/sistema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/app.lua | 6 ++-- data/editor.lua | 93 ++++++++++++++++++++++++++++++++++++++++++++----- data/game.lua | 1 - data/main.lua | 1 + 4 files changed, 89 insertions(+), 12 deletions(-) diff --git a/data/app.lua b/data/app.lua index 46e0f2b..6058056 100644 --- a/data/app.lua +++ b/data/app.lua @@ -4,13 +4,13 @@ app = { stack = {}, push = function(func) - table.insert(app.stack, mini.update) - mini.update = func + table.insert(app.stack, app.update) + app.update = func end, pop = function() if #app.stack > 0 then - mini.update = table.remove(app.stack) + app.update = table.remove(app.stack) end end, } \ No newline at end of file diff --git a/data/editor.lua b/data/editor.lua index dfe7eb8..e3403c7 100644 --- a/data/editor.lua +++ b/data/editor.lua @@ -23,7 +23,6 @@ editor = { end, update = function() - tweening.update(sys.delta()) if sys.beat() then editor.ants = (editor.ants<<12) | (editor.ants>>4) end @@ -263,16 +262,48 @@ editor = { end, tilepicker = { + surf_back = nil, + pos_y = 24, show = function() + if editor.tilepicker.surf_back == nil then editor.tilepicker.surf_back = surf.new(160,104) end + surf.source(0) + surf.target(editor.tilepicker.surf_back) + view.origin(0,0) + view.clip() + draw.surf(0,0,160,104,0,0) app.push(editor.tilepicker.update_tiles) + tweening.add(104,24,0.25,easing.easeOutCubic,function(value,n,finished)editor.tilepicker.pos_y=value end) + end, + + close = function() + tweening.add(24,104,0.25,easing.easeInCubic,function(value,n,finished)editor.tilepicker.pos_y=value if finished then app.pop() end end) end, update_tiles = function() + surf.source(editor.tilepicker.surf_back) + surf.target(0) view.origin(0,0) view.clip() + draw.surf(0,0,160,104,0,0) + + view.origin(8,editor.tilepicker.pos_y) + draw.rrect(0,-1,144,84,3,17) + draw.rrectf(0,0,144,84,3,20) + draw.text("CHOOSE TILES:",8,2,17) + + view.origin(16,editor.tilepicker.pos_y+8) + + -- Pintar fondo quadrejat, per si la capa background està oculta + for y=0,56,8 do + for x=0,120,8 do + local color = (((x+y)//8)%2==0) and 23 or 16 + draw.rectf(x, y, 8, 8, color); + end + end + surf.source(surf_tiles) - surf.cls(1) + --surf.cls(1) draw.surf(0,0,128,128,0,0) local mx, my = mouse.pos() @@ -289,32 +320,57 @@ editor = { editor.brush.tiles={} editor.brush.tiles[1]=ty*16+tx end - app.pop() + editor.tilepicker.close() end if key.press(key.TAB) or key.press(key.ESCAPE) then - app.pop() + editor.tilepicker.close() end end }, itempicker = { + surf_back = nil, + pos_y = 24, + scroll = 0, show = function() + if editor.itempicker.surf_back == nil then editor.itempicker.surf_back = surf.new(160,104) end + surf.source(0) + surf.target(editor.itempicker.surf_back) + view.origin(0,0) + view.clip() + draw.surf(0,0,160,104,0,0) app.push(editor.itempicker.update_items) + tweening.add(104,24,0.25,easing.easeOutCubic,function(value,n,finished)editor.itempicker.pos_y=value end) + end, + + close = function() + tweening.add(24,104,0.25,easing.easeInCubic,function(value,n,finished)editor.itempicker.pos_y=value if finished then app.pop() end end) end, update_items = function() + surf.source(editor.itempicker.surf_back) + surf.target(0) view.origin(0,0) view.clip() + draw.surf(0,0,160,104,0,0) + + view.origin(8,editor.itempicker.pos_y) + draw.rrect(0,-1,144,84,3,17) + draw.rrectf(0,0,144,84,3,20) + draw.text("CHOOSE ITEM:",8,2,17) + + view.origin(16,editor.itempicker.pos_y+8-editor.itempicker.scroll) + view.clip(16,editor.itempicker.pos_y+8,128,64) + surf.source(surf_sprites) - surf.cls(1) local mx, my = mouse.pos() local x,y = 0,0 for i,k in pairs(items) do local w = math.max(k.visual.w, #k.label*4) - if x+w > 160 then + if x+w > 128 then y=y+32 x=0 end @@ -325,15 +381,36 @@ editor = { draw.rect(x+ox, y+7, k.visual.w, k.visual.h, 28) if mouse.press(mouse.LEFT) then editor.item_selected = i - app.pop() + editor.itempicker.close() end end x=x+w+4 end + y=y+32 + local lift_h = math.floor(4096/y) + local lift_y = math.floor(((64-lift_h)*editor.itempicker.scroll)/(y-64)) + + view.origin(16,editor.itempicker.pos_y+8) + view.clip() + + draw.rrectf(124,0,5,64,1,17) + draw.rrectf(124,lift_y,5,lift_h,1,2) + + local mw = mouse.wheel() + editor.itempicker.scroll = editor.itempicker.scroll - mw*8 if key.press(key.TAB) or key.press(key.ESCAPE) then - app.pop() + editor.itempicker.close() + elseif key.press(key.UP) then + editor.itempicker.scroll = editor.itempicker.scroll - 16 + elseif key.press(key.DOWN) then + editor.itempicker.scroll = editor.itempicker.scroll + 16 end + + if editor.itempicker.scroll < 0 then editor.itempicker.scroll = 0 end + if editor.itempicker.scroll > y-64 then editor.itempicker.scroll = y-64 end + + draw.text(tostring(editor.itempicker.scroll),20,20,1) end } } \ No newline at end of file diff --git a/data/game.lua b/data/game.lua index 0cf1562..fc5905d 100644 --- a/data/game.lua +++ b/data/game.lua @@ -37,7 +37,6 @@ game = { end, update = function() - tweening.update(sys.delta()) game.water_counter = game.water_counter + 0.05 if game.fade>0 then diff --git a/data/main.lua b/data/main.lua index 2b26f65..f27f516 100644 --- a/data/main.lua +++ b/data/main.lua @@ -30,6 +30,7 @@ function mini.init() end function mini.update() + tweening.update(sys.delta()) app.update() end