sonic-radiance/sonic-radiance.love/scenes/battlesystem/controller/menu.lua

161 lines
4.1 KiB
Lua

local MenuSystem = Object:extend()
local BaseMenu = {"attack", "techs", "object", "defend", "flee", "back"}
local MENUPOS_X1, MENUPOS_X2, MENUPOS_Y = 32, 32, 110
function MenuSystem:new( controller )
self.controller = controller
self.isActive = false
self.techList = {}
self.menu = {}
self.menu[1] = BaseMenu
self.texture = love.graphics.newImage("assets/gui/attacklist.png")
self.cursorTexture = love.graphics.newImage("assets/gui/cursor-menulist.png")
self.font = love.graphics.newFont("assets/gui/fonts/PixelOperator.ttf", 16)
self.cursor = 1
self.cursorTransition = 1
self.view = 1
end
function MenuSystem:set(currentCharacter)
self.isActive = true
self.cursor = 1
self.cursorTransition = 0
self.activeMenu = 1
self.character = currentCharacter
self.menu[2] = self:getSkillList()
self.menu[3] = {"healitems", "rings", "wisps", "other", "back"}
end
function MenuSystem:getSkillList()
local list = game.characters:getSkillList(self.character.charid)
local skillmenu = {}
for k,v in pairs(list) do
table.insert(skillmenu, k)
end
table.insert(skillmenu, "back")
return skillmenu
end
function MenuSystem:unset( )
self.isActive = false
end
function MenuSystem:update(dt)
if (self.isActive) then
local keys = self.controller.keys
if self.cursor < self.view then
self.view = self.cursor
end
if self.cursor > self.view + 5 then
self.view = self.cursor - 5
end
local relativecursor = self.cursor - self.view
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
if (keys["up"].isPressed) then
if (self.cursor == 1) then
self.cursor = #self.menu[self.activeMenu]
else
self.cursor = self.cursor - 1
end
end
if (keys["down"].isPressed) then
if (self.cursor == #self.menu[self.activeMenu]) then
self.cursor = 1
else
self.cursor = self.cursor + 1
end
end
if keys["left"].isPressed then
self.character.direction = -1
end
if keys["right"].isPressed then
self.character.direction = 1
end
if (keys["A"].isPressed) then
if self.activeMenu == 1 then
if (self.cursor == 2 or self.cursor == 3) then
self.activeMenu = self.cursor
self.cursor = 1
else
self:sendSignal(self.activeMenu, self.cursor)
end
else
self:sendSignal(self.activeMenu, self.cursor)
end
end
if (keys["B"].isPressed) then
if self.activeMenu == 1 then
self:sendSignal(1, 6)
else
self.cursor = self.activeMenu
self.activeMenu = 1
end
end
end
end
function MenuSystem:sendSignal(menu, id)
--print(self.menu[menu][id])
self.isActive = false
if (menu == 1) then
self.character:getSignal(BaseMenu[id], 1)
else
self.character:getSignal(BaseMenu[menu], id)
end
end
function MenuSystem:draw()
if (self.isActive) then
local x, y, addition
x = 32
y = 32
addition = 16
local currentMenu = self.menu[self.activeMenu]
-- MENUPOS_X1, MENUPOS_X2, MENUPOS_Y
local MENUPOS_X = MENUPOS_X1
local maxView = math.min(#currentMenu, (self.view + 5))
for i = self.view, maxView do
love.graphics.draw(self.texture, MENUPOS_X - 16, MENUPOS_Y + (i-self.view)*addition + 3)
love.graphics.setFont(self.font)
love.graphics.setColor(0, 0, 0, .8)
love.graphics.print(currentMenu[i], MENUPOS_X + 1, MENUPOS_Y + (i-self.view)*addition + 1)
if (i == self.cursor) then
love.graphics.setColor(1, 1, 1, 1)
else
love.graphics.setColor(1, 1, 1, 1)
end
love.graphics.print(currentMenu[i], MENUPOS_X, MENUPOS_Y + (i-self.view)*addition)
love.graphics.setColor(1, 1, 1, 1)
end
love.graphics.draw(self.cursorTexture, MENUPOS_X - 12, MENUPOS_Y + (self.cursorTransition) * addition + 2 )
end
end
return MenuSystem