more modular menu
This commit is contained in:
parent
d091f3a6bc
commit
7df0478890
6 changed files with 178 additions and 117 deletions
24
menu/common.lua
Normal file
24
menu/common.lua
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
require 'point'
|
||||
require 'button'
|
||||
|
||||
local buttonTopPos = Point:new( 240, 160 )
|
||||
local buttonBotPos = Point:new( 240, 280 )
|
||||
local buttonSize = Point:new( 320, 80 )
|
||||
local titlePos = Point:new( 240, 80 )
|
||||
|
||||
return {
|
||||
buttonTopPos = buttonTopPos,
|
||||
buttonBotPos = buttonBotPos,
|
||||
buttonSize = buttonSize,
|
||||
titlePos = titlePos,
|
||||
exitToMenuButton = Button:new(
|
||||
buttonBotPos,
|
||||
buttonSize,
|
||||
'Return to menu',
|
||||
nil,
|
||||
nil,
|
||||
function()
|
||||
Menu.current_state = MenuStateIndex.start
|
||||
end
|
||||
)
|
||||
}
|
||||
29
menu/completed.lua
Normal file
29
menu/completed.lua
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
require 'menu.state'
|
||||
require 'button'
|
||||
require 'text'
|
||||
|
||||
local common = require 'menu.common'
|
||||
|
||||
local nextLevelButton = Button:new(
|
||||
common.buttonTopPos,
|
||||
common.buttonSize,
|
||||
'Next level',
|
||||
nil,
|
||||
nil,
|
||||
function()
|
||||
GameGrid = LevelHandler:next()
|
||||
Menu.updateCellSize()
|
||||
Menu.current_state = MenuStateIndex.hidden
|
||||
end
|
||||
)
|
||||
|
||||
local title = Text:new(
|
||||
common.titlePos,
|
||||
common.buttonSize,
|
||||
'Level completed!'
|
||||
)
|
||||
|
||||
return MenuState:new(
|
||||
{ nextLevelButton, common.exitToMenuButton },
|
||||
{ title }
|
||||
)
|
||||
27
menu/pause.lua
Normal file
27
menu/pause.lua
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
require 'menu.state'
|
||||
require 'button'
|
||||
require 'text'
|
||||
|
||||
local common = require 'menu.common'
|
||||
|
||||
local backToGameButton = Button:new(
|
||||
common.buttonTopPos,
|
||||
common.buttonSize,
|
||||
'Continue',
|
||||
nil,
|
||||
nil,
|
||||
function()
|
||||
Menu.current_state = MenuStateIndex.hidden
|
||||
end
|
||||
)
|
||||
|
||||
local title = Text:new(
|
||||
common.titlePos,
|
||||
common.buttonSize,
|
||||
'Paused'
|
||||
)
|
||||
|
||||
return MenuState:new(
|
||||
{ backToGameButton, common.exitToMenuButton },
|
||||
{ title }
|
||||
)
|
||||
40
menu/start.lua
Normal file
40
menu/start.lua
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
require 'menu.state'
|
||||
require 'button'
|
||||
require 'text'
|
||||
|
||||
local common = require 'menu.common'
|
||||
|
||||
local startButton = Button:new(
|
||||
common.buttonTopPos,
|
||||
common.buttonSize,
|
||||
'Start',
|
||||
nil,
|
||||
nil,
|
||||
function()
|
||||
Menu.current_state = MenuStateIndex.hidden
|
||||
GameGrid = LevelHandler:first()
|
||||
Menu.updateCellSize()
|
||||
end
|
||||
)
|
||||
|
||||
local exitGameButton = Button:new(
|
||||
common.buttonBotPos,
|
||||
common.buttonSize,
|
||||
'Exit',
|
||||
nil,
|
||||
nil,
|
||||
function()
|
||||
love.event.quit()
|
||||
end
|
||||
)
|
||||
|
||||
local title = Text:new(
|
||||
common.titlePos,
|
||||
common.buttonSize,
|
||||
'Lines'
|
||||
)
|
||||
|
||||
return MenuState:new(
|
||||
{ startButton, exitGameButton },
|
||||
{ title }
|
||||
)
|
||||
53
menu/state.lua
Normal file
53
menu/state.lua
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
-- Menu state class
|
||||
---@class MenuState
|
||||
---@field buttons Button[]
|
||||
---@field text Text[]
|
||||
MenuState = {
|
||||
buttons = {},
|
||||
text = {}
|
||||
}
|
||||
|
||||
-- Factory function
|
||||
---@param buttons Button[] | nil
|
||||
---@param text Text[] | nil
|
||||
---@return MenuState
|
||||
function MenuState:new( buttons, text )
|
||||
local state = {
|
||||
buttons = buttons or MenuState.buttons,
|
||||
text = text or MenuState.text
|
||||
}
|
||||
|
||||
setmetatable( state, { __index = self } )
|
||||
|
||||
return state
|
||||
end
|
||||
|
||||
-- Draw buttons
|
||||
function MenuState:draw()
|
||||
for _, button in ipairs(self.buttons) do
|
||||
button:draw()
|
||||
end
|
||||
for _, txt in ipairs(self.text) do
|
||||
txt:draw()
|
||||
end
|
||||
end
|
||||
|
||||
-- Update buttons
|
||||
---@param dt number
|
||||
---@param point Point
|
||||
---@param pressed boolean
|
||||
function MenuState:update( dt, point, pressed )
|
||||
for _, button in pairs(self.buttons) do
|
||||
button:update( dt, point, pressed )
|
||||
end
|
||||
end
|
||||
|
||||
---@enum MenuStateIndex
|
||||
MenuStateIndex = {
|
||||
start = 'start',
|
||||
pause = 'pause',
|
||||
levels = 'levels',
|
||||
hidden = 'hidden',
|
||||
completed = 'completed'
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue