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 )