straightforward hp/mana bars implementation
This commit is contained in:
parent
a9bb7df188
commit
411c435e7a
@ -4,6 +4,96 @@ local Element = require "lib.simple_ui.element"
|
|||||||
local Rect = require "lib.simple_ui.rect"
|
local Rect = require "lib.simple_ui.rect"
|
||||||
local SkillRow = require "lib.simple_ui.level.skill_row"
|
local SkillRow = require "lib.simple_ui.level.skill_row"
|
||||||
|
|
||||||
|
--- @class BarElement : UIElement
|
||||||
|
--- @field getter fun() : number
|
||||||
|
--- @field value number
|
||||||
|
--- @field maxValue number
|
||||||
|
local barElement = setmetatable({}, Element)
|
||||||
|
barElement.__index = barElement
|
||||||
|
|
||||||
|
function barElement:update(dt)
|
||||||
|
local val = self.getter()
|
||||||
|
self.value = val < 0 and 0 or val > self.maxValue and self.maxValue or val
|
||||||
|
end
|
||||||
|
|
||||||
|
function barElement:draw()
|
||||||
|
love.graphics.push()
|
||||||
|
love.graphics.applyTransform(self.transform)
|
||||||
|
|
||||||
|
love.graphics.setColor(1, 1, 1)
|
||||||
|
|
||||||
|
love.graphics.rectangle("fill", self.bounds.x, self.bounds.y, self.bounds.width * self.value / self.maxValue,
|
||||||
|
self.bounds.height)
|
||||||
|
|
||||||
|
love.graphics.setColor(1, 1, 1)
|
||||||
|
love.graphics.pop()
|
||||||
|
end
|
||||||
|
|
||||||
|
--- @class BottomBars : UIElement
|
||||||
|
--- @field children BarElement[]
|
||||||
|
local bottomBars = setmetatable({}, Element)
|
||||||
|
bottomBars.__index = bottomBars;
|
||||||
|
|
||||||
|
--- @param cid Id
|
||||||
|
function bottomBars.new(cid)
|
||||||
|
local t = setmetatable({}, bottomBars)
|
||||||
|
|
||||||
|
t.children = {
|
||||||
|
barElement:new {
|
||||||
|
getter = function()
|
||||||
|
local char = Tree.level.characters[cid]
|
||||||
|
return char:try(Tree.behaviors.stats, function(stats)
|
||||||
|
return stats.hp or 0
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
maxValue = 20
|
||||||
|
},
|
||||||
|
|
||||||
|
barElement:new {
|
||||||
|
getter = function()
|
||||||
|
local char = Tree.level.characters[cid]
|
||||||
|
return char:try(Tree.behaviors.stats, function(stats)
|
||||||
|
return stats.mana or 0
|
||||||
|
end)
|
||||||
|
end,
|
||||||
|
maxValue = 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return t
|
||||||
|
end
|
||||||
|
|
||||||
|
function bottomBars:update(dt)
|
||||||
|
local padding = 16
|
||||||
|
local screenW, screenH = love.graphics.getDimensions()
|
||||||
|
self.bounds = Rect {
|
||||||
|
height = 10,
|
||||||
|
width = 200 + 200 + padding,
|
||||||
|
y = screenH - 96 - padding
|
||||||
|
}
|
||||||
|
|
||||||
|
self.transform = love.math.newTransform():translate(-self.bounds.width / 2 + screenW / 2, self.bounds.y)
|
||||||
|
|
||||||
|
for i = 1, #self.children do
|
||||||
|
self.children[i].bounds = Rect {
|
||||||
|
width = 200,
|
||||||
|
height = 20
|
||||||
|
}
|
||||||
|
self.children[i].transform = self.transform:clone():translate(padding * (i - 1) + (i - 1) * 200, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for _, el in ipairs(self.children) do
|
||||||
|
el:update(dt)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function bottomBars:draw()
|
||||||
|
for _, el in ipairs(self.children) do
|
||||||
|
el:draw()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local layout = {}
|
local layout = {}
|
||||||
function layout:update(dt)
|
function layout:update(dt)
|
||||||
@ -11,14 +101,18 @@ function layout:update(dt)
|
|||||||
if cid then
|
if cid then
|
||||||
self.skillRow = SkillRow(cid)
|
self.skillRow = SkillRow(cid)
|
||||||
self.skillRow:show()
|
self.skillRow:show()
|
||||||
|
self.bottomBars = bottomBars.new(cid)
|
||||||
elseif Tree.level.selector:deselected() then
|
elseif Tree.level.selector:deselected() then
|
||||||
self.skillRow:hide()
|
self.skillRow:hide()
|
||||||
|
self.bottomBars = nil
|
||||||
end
|
end
|
||||||
if self.skillRow then self.skillRow:update(dt) end
|
if self.skillRow then self.skillRow:update(dt) end
|
||||||
|
if self.bottomBars then self.bottomBars:update(dt) end
|
||||||
end
|
end
|
||||||
|
|
||||||
function layout:draw()
|
function layout:draw()
|
||||||
if self.skillRow then self.skillRow:draw() end
|
if self.skillRow then self.skillRow:draw() end
|
||||||
|
if self.bottomBars then self.bottomBars:draw() end
|
||||||
end
|
end
|
||||||
|
|
||||||
return layout
|
return layout
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user