sonic-radiance/sonic-radiance.love/scenes/battlesystem/gui/hudelements/menu.lua
Kazhnuz 2932a7d85a improvement: port the cbs menus and gui
Make them handled by a single screen, removing a lot of dispersed
drawing code in the turns handler
2021-09-16 22:26:59 +02:00

87 lines
3 KiB
Lua

local Parent = require "game.modules.gui.fancymenu"
local BattleMenu = Parent:extend()
local defTransitions = require "birb.modules.transitions"
local radTransitions = require "game.modules.transitions"
local MENU_X, MENU_Y = 88, 72
local MENU_W = 180-32
local MENU_ITEM_NUMBER = 6
function BattleMenu:new()
BattleMenu.super.new(self, "battleMenu", MENU_X, MENU_Y, MENU_W, MENU_ITEM_NUMBER, true)
self.isVisible = false
end
function BattleMenu:rebuild(character)
self:clear()
self:addItem("Attack", "left", function() self:doAction(character, "attack") end)
self:generateSubmenu("skills", "Skill", "main", character.abstract.skills, function(data) return self:createSkillWidget(character, data) end, true)
self:createItemMenus(character)
self:switch("main")
self:addItem("Defend", "left", function() self:doAction(character, "defend") end)
self:addItem("Flee", "left", function() self:doAction(character, "flee") end)
self:getFocus()
self.canvas.needRedraw = true
end
function BattleMenu:createItemMenus(character)
self:addSubmenu("items", "Items", "main", true)
for i,pocket in ipairs(game.loot.inventory) do
if (pocket.inBattle) then
self:generateSubmenu(pocket.name, pocket.fullname, "items", pocket.list,
function(itemInBag)
return self:createItemWidget(character, pocket.name, itemInBag)
end, true)
end
end
end
function BattleMenu:createSkillWidget(character, skill)
local data = core.datas:get("skills", skill.name)
local isOk = (data.cost <= character.abstract.pp)
local cost = {utils.math.numberToString(data.cost or 0, 2), "right"}
local color = utils.math.either(isOk, {1, 1, 1}, {1, 0.3, 0.3})
local sfx = utils.math.either(isOk, "select", "error")
local func = function() self:doSkill(character, skill.name, isOk) end
--text, position, func, type, additionnalItems, color
return character.abstract:getSkillName(skill.name), "left", func, sfx, {cost}, color
end
function BattleMenu:createItemWidget(character, pocketName, itemInBag)
local data = core.datas:get("items", itemInBag.name)
local nbr = game.loot:getItemNumber(pocketName, itemInBag.name)
local nbrLabel = {"x" .. utils.math.numberToString(nbr, 2), "right"}
local func = function() self:useItem(character, pocketName, itemInBag.name) end
--text, position, func, type, additionnalItems, color
return data.fullname, "left", func, "select", {nbrLabel}, {1, 1, 1}
end
function BattleMenu:doAction(character, action)
self:looseFocus()
self.isVisible = false
character:doBasicAction(action)
end
function BattleMenu:useItem(character, pocketName, item)
self:looseFocus()
self.isVisible = false
character:useItem(pocketName, item)
end
function BattleMenu:doSkill(character, skill, isOk)
if (isOk) then
self:looseFocus()
character:useSkill(skill)
self.isVisible = false
else
self.scene:showMessage("You haven't enough PP!")
end
end
return BattleMenu