103 lines
3.2 KiB
Lua
103 lines
3.2 KiB
Lua
local ListBox = require "birb.modules.menusystem.listbox"
|
|
local Widget = require "birb.modules.menusystem.widgets"
|
|
|
|
local menu = {}
|
|
menu.CustomMenu = ListBox:extend()
|
|
menu.BasicMenu = ListBox:extend()
|
|
menu.BoxedMenu = menu.BasicMenu:extend()
|
|
menu.BasicWidget = Widget.Text:extend()
|
|
menu.BoxedWidget = menu.BasicWidget:extend()
|
|
|
|
local CONST = {}
|
|
CONST.MENU = {}
|
|
CONST.MENU.ITEM_HEIGHT = 16
|
|
|
|
local gui = require "game.modules.gui"
|
|
|
|
-- Custom Menu
|
|
function menu.CustomMenu:new(scene, name, x, y, w, h, itemNumber)
|
|
self.scene = scene
|
|
menu.CustomMenu.super.new(self, scene.menusystem, name, x, y, w, h, itemNumber)
|
|
end
|
|
|
|
-- Basic menu
|
|
function menu.BasicMenu:new(scene, name, itemNumber, x, y, w)
|
|
self.scene = scene
|
|
local h = itemNumber * CONST.MENU.ITEM_HEIGHT
|
|
menu.BasicMenu.super.new(self, scene.menusystem, name, x, y, w, h, itemNumber)
|
|
self.cursorTexture = love.graphics.newImage("assets/gui/cursor-menulist.png")
|
|
self.cursorTransition = 0
|
|
end
|
|
|
|
function menu.BasicMenu:update(dt)
|
|
menu.BasicMenu.super.update(self, dt)
|
|
|
|
local relativecursor = self.widget.selected - self.view.firstSlot
|
|
|
|
local transition = self.cursorTransition - relativecursor
|
|
|
|
if math.abs(transition) < 0.1 then
|
|
self.cursorTransition = relativecursor
|
|
else
|
|
self.cursorTransition = (self.cursorTransition) + ((relativecursor) - (self.cursorTransition)) * dt*45
|
|
end
|
|
|
|
end
|
|
|
|
function menu.BasicMenu:drawCursor()
|
|
local addition = 17
|
|
local x = self.x - 1
|
|
local y = self.y + ((self.cursorTransition) * addition) + 1
|
|
love.graphics.draw(self.cursorTexture, x, y)
|
|
end
|
|
|
|
-- Boxed menu
|
|
function menu.BoxedMenu:new(scene, name, itemNumber, x, y, w)
|
|
menu.BoxedMenu.super.new(self, scene, name, itemNumber, x, y, w)
|
|
self.box = gui.newTextBox("assets/gui/dialogbox.png", self.w+16, self.h+16)
|
|
end
|
|
|
|
function menu.BoxedMenu:draw()
|
|
love.graphics.draw(self.box, self.x-8, self.y-8)
|
|
menu.BoxedMenu.super.draw(self)
|
|
end
|
|
|
|
-- Basic Widget
|
|
function menu.BasicWidget:new(scene, menu_name, label, label2)
|
|
local font = scene.assets.fonts["small"]
|
|
self.scene = scene
|
|
local widgetMenu = scene.menusystem.menus[menu_name]
|
|
self.label2 = label2 or ""
|
|
menu.BasicWidget.super.new(self, widgetMenu, font, label)
|
|
end
|
|
|
|
function menu.BasicWidget:drawCanvas()
|
|
local h = math.floor(self.height / 2) - (self.font:getHeight() / 2)
|
|
love.graphics.setColor(0, 0, 0, 1)
|
|
self.font:print(self.label, 9, h, "left")
|
|
self.font:print(self.label2, self.width - 7, h, "right")
|
|
utils.graphics.resetColor()
|
|
self.font:print(self.label, 8, h, "left")
|
|
self.font:print(self.label2, self.width - 8, h, "right")
|
|
end
|
|
|
|
-- Basic Widget
|
|
function menu.BoxedWidget:new(scene, menu_name, label, label2)
|
|
menu.BoxedWidget.super.new(self, scene, menu_name, label, label2)
|
|
self.box = gui.newChoiceBack(self.menu.w + 24)
|
|
end
|
|
|
|
function menu.BoxedWidget:drawCanvas()
|
|
love.graphics.draw(self.box, 0, 0)
|
|
|
|
local h = math.floor(self.height / 2) - (self.font:getHeight() / 2) - 1
|
|
love.graphics.setColor(0, 0, 0, .8)
|
|
self.font:print(self.label, 17, h, "left")
|
|
self.font:print(self.label2, self.width - 8, h, "right")
|
|
utils.graphics.resetColor()
|
|
self.font:print(self.label, 16, h, "left")
|
|
self.font:print(self.label2, self.width - 9, h, "right")
|
|
end
|
|
|
|
|
|
return menu
|