sonic-radiance/sonic-radiance.love/scenes/battlesystem/controller/menu.lua
2019-04-01 08:30:08 +02:00

181 lines
6.2 KiB
Lua

local ListBox = require "core.modules.menusystem.listbox"
local Widget = require "core.modules.menusystem.widgets"
local MenuConstructor = Object:extend()
local CharacterMenu = ListBox:extend()
local CharMenuWidget = Widget.Text:extend()
local SubMenuWidget = CharMenuWidget:extend()
local BackMenuWidget = CharMenuWidget:extend()
local MENUPOS_X1, MENUPOS_X2, MENUPOS_Y = 32, 32, 110
local MENU_WIDTH, MENU_ITEM_HEIGHT = 112, 17
local MENU_ITEM_NUMBER = 6
function MenuConstructor:new( controller )
self.controller = controller
self.controller.assets:addFont("small", "assets/gui/fonts/PixelOperator.ttf", 16)
end
function MenuConstructor:reconstruct(character)
self.controller.menusystem:reset()
self:build(character)
self.controller.menusystem:switchMenu("BaseMenu")
end
function MenuConstructor:build(character)
self:buildBaseMenu(character)
self:buildSkillMenu(character)
self:buildObjectMenu(character)
end
function MenuConstructor:buildBaseMenu(character)
CharacterMenu(self.controller, "BaseMenu", MENUPOS_X1 - 16, MENUPOS_Y)
CharMenuWidget(self.controller, "BaseMenu", "Attaquer", "", character)
SubMenuWidget(self.controller, "BaseMenu", "Techniques", "SkillMenu", character)
SubMenuWidget(self.controller, "BaseMenu", "Objets", "ObjectMenu", character)
CharMenuWidget(self.controller, "BaseMenu", "Défendre", "", character)
CharMenuWidget(self.controller, "BaseMenu", "Fuite", "", character)
BackMenuWidget(self.controller, "BaseMenu", "Retour", character)
self.controller.menusystem.menus["BaseMenu"]:setCancelWidget()
end
function MenuConstructor:set(currentCharacter)
self:reconstruct(currentCharacter)
end
function MenuConstructor:buildSkillMenu(character)
CharacterMenu(self.controller, "SkillMenu", MENUPOS_X1 - 16, MENUPOS_Y)
local list = game.characters:getSkillList(character.charid)
for k,v in pairs(list) do
CharMenuWidget(self.controller, "SkillMenu", k, "", character)
end
SubMenuWidget(self.controller, "SkillMenu", "Retour", "BaseMenu", character)
self.controller.menusystem.menus["SkillMenu"]:setCancelWidget()
end
function MenuConstructor:buildObjectMenu(character)
CharacterMenu(self.controller, "ObjectMenu", MENUPOS_X1 - 16, MENUPOS_Y)
CharacterMenu(self.controller, "MedMenu", MENUPOS_X1 - 16, MENUPOS_Y)
CharacterMenu(self.controller, "RingMenu", MENUPOS_X1 - 16, MENUPOS_Y)
CharacterMenu(self.controller, "WispMenu", MENUPOS_X1 - 16, MENUPOS_Y)
CharacterMenu(self.controller, "OtherMenu", MENUPOS_X1 - 16, MENUPOS_Y)
SubMenuWidget(self.controller, "ObjectMenu", "Médecine", "MedMenu", character)
SubMenuWidget(self.controller, "ObjectMenu", "Rings", "RingMenu", character)
SubMenuWidget(self.controller, "ObjectMenu", "Wisps", "WispMenu", character)
SubMenuWidget(self.controller, "ObjectMenu", "Autres", "OtherMenu", character)
SubMenuWidget(self.controller, "ObjectMenu", "Retour", "BaseMenu", character)
SubMenuWidget(self.controller, "MedMenu", "Retour", "ObjectMenu", character)
SubMenuWidget(self.controller, "RingMenu", "Retour", "ObjectMenu", character)
SubMenuWidget(self.controller, "WispMenu", "Retour", "ObjectMenu", character)
SubMenuWidget(self.controller, "OtherMenu", "Retour", "ObjectMenu", character)
self.controller.menusystem.menus["ObjectMenu"]:setCancelWidget()
self.controller.menusystem.menus["MedMenu"]:setCancelWidget()
self.controller.menusystem.menus["RingMenu"]:setCancelWidget()
self.controller.menusystem.menus["WispMenu"]:setCancelWidget()
self.controller.menusystem.menus["OtherMenu"]:setCancelWidget()
end
function MenuConstructor:unset( )
self.isActive = false
end
-- CHARACTER_MENU
-- The actuals menus in the character menu
function CharacterMenu:new(scene, name, x, y)
self.scene = scene
local w, h = MENU_WIDTH, MENU_ITEM_NUMBER * MENU_ITEM_HEIGHT
CharacterMenu.super.new(self, scene.menusystem, name, x, y, w, h, MENU_ITEM_NUMBER)
self.cursorTexture = love.graphics.newImage("assets/gui/cursor-menulist.png")
self.cursorTransition = 1
end
function CharacterMenu:update(dt)
CharacterMenu.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 CharacterMenu:drawCursor()
local addition = 17
love.graphics.draw(self.cursorTexture, self.x + 4, self.y + (self.cursorTransition) * addition )
end
-- WIDGETS
-- All widgets used by the Characters menus
function CharMenuWidget:new(scene, menu_name, label1, label2, character)
self.character = character
self.menuname = menu_name
self.scene = scene
local menu = scene.menusystem.menus[menu_name] or error("menu " ..menu_name .. " doesn't exist")
local font = scene.assets.fonts["small"]
CharMenuWidget.super.new(self, menu, font, label1)
self.label2 = label2 or ""
end
function CharMenuWidget:drawCanvas()
local h
local asset = love.graphics.newImage("assets/gui/attacklist.png")
love.graphics.draw(asset, 0, (self.height - 13) / 2)
h = math.floor(self.height / 2) - (self.font:getHeight() / 2)
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
function CharMenuWidget:action()
self.character:getSignal(self.menuname, self.label)
self.scene.menusystem:reset()
end
-- Submenu Widget
function SubMenuWidget:new(scene, menu_name, label, newmenu, character)
SubMenuWidget.super.new(self, scene, menu_name, label, "", character)
self.newmenu = newmenu or "BaseMenu"
end
function SubMenuWidget:action()
self.scene.menusystem:switchMenu(self.newmenu)
end
-- Back Widget
function BackMenuWidget:new(scene, menu_name, label, character)
BackMenuWidget.super.new(self, scene, menu_name, "Retour", "", character)
end
function BackMenuWidget:action()
self.character:getBackSignal()
self.scene:flushKeys()
self.scene.menusystem:reset()
end
return MenuConstructor