sonic-bluestreak/sonic-boost.love/core/modules/menusystem/parent.lua

169 lines
3.4 KiB
Lua
Raw Normal View History

local Menu = Object:extend()
function Menu:new(controller, name, x, y, w, h)
self.controller = controller
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:setWidgetSize()
self.isDestroyed = false
self.haveFocus = false
self.isVisible = true
self.isActive = true
self.sound = {}
self.sound.asset = nil
self.sound.active = false
self.canvas = {}
self.canvas.texture = nil
self.canvas.needRedraw = true
self:register()
end
function Menu:register()
self.controller: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()
if self.canvas.needRedraw == true then
2019-02-10 20:00:48 +01:00
core.screen:cease()
self:drawCanvas()
self.canvas.needRedraw = false
2019-02-10 20:00:48 +01:00
core.screen:apply()
end
love.graphics.draw(self.canvas.texture, self.x, self.y)
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
self.canvas.needRedraw = true
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