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] 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 )