120 lines
2.4 KiB
Lua
120 lines
2.4 KiB
Lua
|
local Rect = require "birb.objects.2D.rect"
|
||
|
|
||
|
local GuiElement = Rect:extend()
|
||
|
|
||
|
function GuiElement:new(name, x, y, w, h)
|
||
|
GuiElement.super.new(self, x, y, w, h)
|
||
|
self.name = name
|
||
|
|
||
|
self.isDestroyed = false
|
||
|
self.isVisible = true
|
||
|
self.isActive = true
|
||
|
self.isLocked = false
|
||
|
self.isAlwaysVisible = false
|
||
|
|
||
|
self.depth = 0
|
||
|
|
||
|
self:register()
|
||
|
end
|
||
|
|
||
|
function GuiElement:getGui()
|
||
|
local scene = core.scenemanager.currentScene
|
||
|
return scene.menusystem
|
||
|
end
|
||
|
|
||
|
function GuiElement:register()
|
||
|
local gui = self:getGui()
|
||
|
gui:addMenu(self.name, self)
|
||
|
end
|
||
|
|
||
|
function GuiElement:destroy()
|
||
|
self.destroyed = true
|
||
|
end
|
||
|
|
||
|
-- VISIBILITY/ACTIVITY
|
||
|
-- Handle drawing and how we interact with
|
||
|
|
||
|
function GuiElement:setDepth(depth)
|
||
|
self.depth = depth or 0
|
||
|
end
|
||
|
|
||
|
function GuiElement:setVisibility(visibility)
|
||
|
if self.isLocked == false and self.isAlwaysVisible == false then
|
||
|
self.isVisible = visibility
|
||
|
else
|
||
|
-- if the element is locked (thus is always active), it should also
|
||
|
-- be always visible.
|
||
|
self.isVisible = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function GuiElement:setActivity(activity)
|
||
|
if self.isLocked == false then
|
||
|
self.isActive = activity
|
||
|
else
|
||
|
self.isActive = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function GuiElement:lock(lock)
|
||
|
self.isLocked = lock
|
||
|
end
|
||
|
|
||
|
function GuiElement:lockVisibility(lock)
|
||
|
self.isAlwaysVisible = lock
|
||
|
end
|
||
|
|
||
|
function GuiElement:getFocus()
|
||
|
local gui = self:getGui()
|
||
|
gui.focusedMenu = self.name
|
||
|
end
|
||
|
|
||
|
function GuiElement:haveFocus()
|
||
|
local gui = self:getGui()
|
||
|
return (gui.focusedMenu == self.name)
|
||
|
end
|
||
|
|
||
|
-- UPDATE FUNCTIONS
|
||
|
-- Update the menu every game update
|
||
|
|
||
|
-- External update function
|
||
|
function GuiElement:updateElement(dt)
|
||
|
self:update(dt)
|
||
|
end
|
||
|
|
||
|
-- Internal update function
|
||
|
function GuiElement:update(dt)
|
||
|
-- Cette fonction ne contient rien par défaut
|
||
|
end
|
||
|
|
||
|
-- DRAW FUNCTIONS
|
||
|
-- Draw the menu and its content
|
||
|
|
||
|
function GuiElement:drawElement()
|
||
|
self:draw()
|
||
|
end
|
||
|
|
||
|
function GuiElement:draw()
|
||
|
-- nothing here
|
||
|
end
|
||
|
|
||
|
-- KEYBOARD FUNCTIONS
|
||
|
-- Handle key press
|
||
|
|
||
|
function GuiElement:keyreleased(key)
|
||
|
-- Cette fonction ne contient rien par défaut
|
||
|
end
|
||
|
|
||
|
-- MOUSE FUNCTIONS
|
||
|
-- Handle pointers (clic/touch)
|
||
|
|
||
|
function GuiElement:mousemoved(x, y)
|
||
|
-- Cette fonction ne contient rien par défaut
|
||
|
end
|
||
|
|
||
|
function GuiElement:mousepressed(x, y, button, istouch)
|
||
|
-- Cette fonction ne contient rien par défaut
|
||
|
end
|
||
|
|
||
|
return GuiElement
|