Compare commits

..

2 commits

Author SHA1 Message Date
e04b8e523e Added levels menu 2025-10-23 16:32:58 +03:00
fd1e314ec9 Added indexed function 2025-10-23 16:32:27 +03:00
4 changed files with 61 additions and 10 deletions

View file

@ -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

View file

@ -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

47
menu/levels.lua Normal file
View file

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

View file

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