b3febf0fb3
Don't let every menus handle themselves if they have focus, it should be the menu system role to handle that
163 lines
3.2 KiB
Lua
163 lines
3.2 KiB
Lua
local Menu = Object:extend()
|
|
|
|
function Menu:new(menusystem, name, x, y, w, h)
|
|
self.menusystem = menusystem
|
|
self.name = name
|
|
|
|
self.x = x
|
|
self.y = y
|
|
self.w = w
|
|
self.h = h
|
|
|
|
self.widget = {}
|
|
self.widget.list = {}
|
|
self.widget.selected = 0
|
|
self.widget.selectedPrevious = 0
|
|
self.widget.cancel = 0
|
|
self:updateWidgetSize()
|
|
|
|
self.isDestroyed = false
|
|
self.isVisible = true
|
|
self.isActive = true
|
|
|
|
self.sound = {}
|
|
self.sound.asset = nil
|
|
self.sound.active = false
|
|
|
|
self:register()
|
|
end
|
|
|
|
function Menu:getFocus()
|
|
self.menusystem.focusedMenu = self.name
|
|
end
|
|
|
|
function Menu:haveFocus()
|
|
return (self.menusystem.focusedMenu == self.name)
|
|
end
|
|
|
|
function Menu:register()
|
|
self.menusystem:addMenu(self.name, self)
|
|
end
|
|
|
|
function Menu:setCancelWidget(id)
|
|
self.widget.cancel = #self.widget.list
|
|
end
|
|
|
|
function Menu:updateWidgetSize()
|
|
self.widget.h = 0
|
|
self.widget.w = 0
|
|
end
|
|
|
|
function Menu:getWidgetSize(id)
|
|
return self.widget.h, self.widget.w
|
|
end
|
|
|
|
function Menu:cancelAction()
|
|
if (self.widget.cancel ~= 0) then
|
|
self.widget.list[self.widget.cancel]:action()
|
|
end
|
|
end
|
|
|
|
function Menu:update(dt)
|
|
-- Cette fonction ne contient rien par défaut
|
|
end
|
|
|
|
function Menu:clear()
|
|
self.widget.list = {}
|
|
self.widget.cancel = 0
|
|
end
|
|
|
|
function Menu:resize(x,y,w,h)
|
|
self.x = x
|
|
self.y = y
|
|
self.w = w
|
|
self.h = h
|
|
|
|
self:updateWidgetSize()
|
|
end
|
|
|
|
function Menu:destroy()
|
|
self.destroyed = true
|
|
end
|
|
|
|
function Menu:draw()
|
|
-- nothing here
|
|
end
|
|
|
|
function Menu:drawCanvas()
|
|
|
|
end
|
|
|
|
function Menu:keyreleased(key)
|
|
-- Cette fonction ne contient rien par défaut
|
|
end
|
|
|
|
function Menu:mousemoved(x, y)
|
|
-- Cette fonction ne contient rien par défaut
|
|
end
|
|
|
|
function Menu:mousepressed( x, y, button, istouch )
|
|
-- Cette fonction ne contient rien par défaut
|
|
end
|
|
|
|
function Menu:addWidget(newwidget)
|
|
if #self.widget.list == 0 then
|
|
self.widget.selected = 1
|
|
end
|
|
table.insert(self.widget.list, newwidget)
|
|
end
|
|
|
|
function Menu:updateWidgets(dt)
|
|
self:removeDestroyedWidgets()
|
|
for i,v in ipairs(self.widget.list) do
|
|
v.id = i
|
|
v:update(dt)
|
|
end
|
|
end
|
|
|
|
function Menu:removeDestroyedWidgets() -- On retire les widgets marquées comme supprimées
|
|
for i,v in ipairs(self.widget.list) do
|
|
if (v.destroyed == true) then
|
|
table.remove(self.widget.list, i)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Menu:setCursor(cursorid)
|
|
self.widget.selected = cursorid --math.max(1, math.min(cursorid, #self.widget.list))
|
|
end
|
|
|
|
function Menu:moveCursor(new_selected)
|
|
self:playSelectSound()
|
|
if new_selected < 1 then
|
|
self.widget.selected = #self.widget.list + new_selected
|
|
else
|
|
if new_selected > #self.widget.list then
|
|
self.widget.selected = new_selected - #self.widget.list
|
|
else
|
|
self.widget.selected = new_selected
|
|
end
|
|
end
|
|
end
|
|
|
|
function Menu:setSound(soundasset)
|
|
self.sound.active = true
|
|
self.sound.asset = soundasset
|
|
end
|
|
|
|
function Menu:playSelectSound()
|
|
if self.sound.active == true then
|
|
self.sound.asset:setVolume(game.options.data.audio.sfx / 100)
|
|
love.audio.play( self.sound.asset )
|
|
end
|
|
end
|
|
|
|
function Menu:resetView()
|
|
-- ne sert à rien ici, c'est juste pour éviter des crash
|
|
end
|
|
|
|
function Menu:moveView()
|
|
-- ne sert à rien ici, c'est juste pour éviter des crash
|
|
end
|
|
|
|
return Menu
|