b3febf0fb3
Don't let every menus handle themselves if they have focus, it should be the menu system role to handle that
87 lines
1.9 KiB
Lua
87 lines
1.9 KiB
Lua
local MenuSystem = Object:extend()
|
|
|
|
local cwd = (...):gsub('%.init$', '') .. "."
|
|
|
|
MenuSystem.Parent = require(cwd .. "parent")
|
|
MenuSystem.ListBox = require(cwd .. "listbox")
|
|
MenuSystem.FlowBox = require(cwd .. "flowbox")
|
|
MenuSystem.Grid = require(cwd .. "grid")
|
|
MenuSystem.TextMenu = require(cwd .. "textmenu")
|
|
|
|
MenuSystem.Widget = require(cwd .. "widgets")
|
|
|
|
|
|
--local VirtualPad = require "modules.virtualpad"
|
|
|
|
function MenuSystem:new()
|
|
self.menus = {}
|
|
self.focusedMenu = ""
|
|
end
|
|
|
|
function MenuSystem:reset()
|
|
self.menus = {}
|
|
end
|
|
|
|
function MenuSystem:addMenu(name, menu)
|
|
self.menus[name] = menu
|
|
end
|
|
|
|
function MenuSystem:update(dt)
|
|
self:removeDestroyedMenus()
|
|
for k,v in pairs(self.menus) do
|
|
v:update(dt)
|
|
v:updateWidgets(dt)
|
|
end
|
|
|
|
if self.menus[self.focusedMenu] ~= nil then
|
|
for k,v in pairs(self.keys) do
|
|
if self.keys[k].isPressed then
|
|
self.menus[self.focusedMenu]:keyreleased(k)
|
|
end
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
function MenuSystem:removeDestroyedMenus()
|
|
-- On retire les entitées marquées comme supprimées
|
|
for k,v in pairs(self.menus) do
|
|
if (v.isDestroyed == true) then
|
|
self.menus[k] = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
function MenuSystem:keyreleased(key, code)
|
|
-- TODO:depreciated function
|
|
end
|
|
|
|
function MenuSystem:mousemoved(x, y, dx, dy)
|
|
for k,v in pairs(self.menus) do
|
|
if v.isActive then
|
|
if (x > v.x) and (x < v.x + v.w) and (y > v.y) and (y < v.y + v.h) then
|
|
v:mousemoved(x - v.x, y - v.y)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function MenuSystem:mousepressed( x, y, button, istouch )
|
|
for k,v in pairs(self.menus) do
|
|
if v.isActive then
|
|
if (x > v.x) and (x < v.x + v.w) and (y > v.y) and (y < v.y + v.h) then
|
|
v:mousepressed(x - v.x, y - v.y, button, istouch )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function MenuSystem:draw(dt) -- On dessine les entitées
|
|
for k,v in pairs(self.menus) do
|
|
if (v.isVisible) then
|
|
v:draw(dt)
|
|
end
|
|
end
|
|
end
|
|
|
|
return MenuSystem
|