From fd1e314ec96775e73dfcccf4f222c539ce554bb4 Mon Sep 17 00:00:00 2001 From: 2ndbeam <2ndbeam@disroot.org> Date: Thu, 23 Oct 2025 16:32:27 +0300 Subject: [PATCH 1/2] Added indexed function --- levelhandler.lua | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/levelhandler.lua b/levelhandler.lua index ed7b874..8c5931c 100644 --- a/levelhandler.lua +++ b/levelhandler.lua @@ -6,7 +6,7 @@ require 'makegrid' ---@field current integer LevelHandler = { levels = { - 'test3', 'test2', 'test' + 'test2', 'test', 'test3' }, current = 1, } @@ -18,13 +18,22 @@ function LevelHandler:next() if self.current > #self.levels then self.current = 1 end - local levelPath = string.format('levels/%s', self.levels[self.current]) + local levelPath = 'levels/' .. self.levels[self.current] return MakeGrid( require( levelPath ) ) end -- Returns first level ---@return Grid function LevelHandler:first() - local levelPath = string.format('levels/%s', self.levels[1]) + local levelPath = 'levels/' .. self.levels[1] + return MakeGrid( require( levelPath ) ) +end + +-- Returns level by its index in table +---@param i number +---@return Grid +function LevelHandler:indexed(i) + self.current = i + local levelPath = 'levels/' .. self.levels[self.current] return MakeGrid( require( levelPath ) ) end From e04b8e523ebdb5b7564f8f42653f61fb57370259 Mon Sep 17 00:00:00 2001 From: 2ndbeam <2ndbeam@disroot.org> Date: Thu, 23 Oct 2025 16:32:58 +0300 Subject: [PATCH 2/2] Added levels menu --- menu.lua | 5 +---- menu/levels.lua | 47 +++++++++++++++++++++++++++++++++++++++++++++++ menu/start.lua | 4 +--- 3 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 menu/levels.lua diff --git a/menu.lua b/menu.lua index fda11e6..8906354 100644 --- a/menu.lua +++ b/menu.lua @@ -2,9 +2,6 @@ require 'config' require 'button' require 'menu.state' - - - -- Menu handler ---@class Menu ---@field states MenuState[] @@ -16,7 +13,7 @@ Menu = { -- Pause menu [MenuStateIndex.pause] = require 'menu.pause', -- Level selector - [MenuStateIndex.levels] = MenuState:new(), + [MenuStateIndex.levels] = require 'menu.levels', -- Level completed menu [MenuStateIndex.completed] = require 'menu.completed', -- Empty state diff --git a/menu/levels.lua b/menu/levels.lua new file mode 100644 index 0000000..463566e --- /dev/null +++ b/menu/levels.lua @@ -0,0 +1,47 @@ +require 'menu.state' +require 'button' +require 'text' + +local common = require 'menu.common' + +local size, margin = 60, 30 +local levelSize = Point:new( size, size ) +local yOffset = 160 + +local levelsPerLine = 8 +local levelCount = #LevelHandler.levels + +local buttons = {} + +for i=1,levelCount do + local x = (size + margin) * (i % levelsPerLine) + local y = (size + margin) * math.floor(i / levelsPerLine) + yOffset + local button = Button:new( + Point:new(x, y), + levelSize, + tostring(i), + nil, + nil, + function() + GameGrid = LevelHandler:indexed(i) + Menu.updateCellSize() + Menu.current_state = MenuStateIndex.hidden + end + ) + table.insert(buttons, button) +end + +local exitToMenuButton = Button:new( + Point:new( 240, 40 ), + common.buttonSize, + 'Return to menu', + nil, + nil, + function() + Menu.current_state = MenuStateIndex.start + end + ) + +table.insert(buttons, exitToMenuButton) + +return MenuState:new(buttons) diff --git a/menu/start.lua b/menu/start.lua index 8693b68..8630976 100644 --- a/menu/start.lua +++ b/menu/start.lua @@ -16,9 +16,7 @@ local startButton = Button:new( nil, nil, function() - Menu.current_state = MenuStateIndex.hidden - GameGrid = LevelHandler:first() - Menu.updateCellSize() + Menu.current_state = MenuStateIndex.levels end )