sonic-radiance/sonic-radiance.love/game/modules/gui/complexhpbar.lua

86 lines
2.9 KiB
Lua
Raw Normal View History

local ComplexHPBar = Object:extend()
local gui = require "game.modules.gui"
local VALUE_MARGIN = 11
local HEIGHT = 7
function ComplexHPBar:new(width)
self.width = width
self:setColorForeground(1, 1, 1)
self:setColorBackground(0, 0, 0)
self.background = self:createBack( "assets/gui/hpbar_back.png" )
self.foreground = self:createBack( "assets/gui/hpbar_fore.png" )
end
function ComplexHPBar:setColorForeground(r, g, b)
self.barcolor = {}
self.barcolor.r = r
self.barcolor.g = g
self.barcolor.b = b
end
function ComplexHPBar:setColorBackground(r, g, b)
self.backcolor = {}
self.backcolor.r = r
self.backcolor.g = g
self.backcolor.b = b
end
function ComplexHPBar:createBack( filepath )
local image = love.graphics.newImage( filepath )
local imageWidth, imageHeight = image:getDimensions()
local middleImageWidth = imageWidth - VALUE_MARGIN*2
local totalWidth = self.width + 8 -- On récupère la taille à partir de la base
local middleWidth = totalWidth - VALUE_MARGIN*2
local iteration = math.ceil((middleWidth) / (middleImageWidth))
local tilequad = {}
tilequad[1] = love.graphics.newQuad(0, 0, VALUE_MARGIN, imageHeight, imageWidth, imageHeight)
tilequad[2] = love.graphics.newQuad(VALUE_MARGIN, 0, middleImageWidth, imageHeight, imageWidth, imageHeight)
tilequad[3] = love.graphics.newQuad(imageWidth - VALUE_MARGIN, 0, VALUE_MARGIN, imageHeight, imageWidth, imageHeight)
local canvas1 = love.graphics.newCanvas(middleWidth, imageHeight)
love.graphics.setCanvas( canvas1 )
local combinedWidth = 0
for i = 1, iteration do
love.graphics.draw(image, tilequad[2], combinedWidth, 0)
combinedWidth = combinedWidth + middleImageWidth
end
local canvas2 = love.graphics.newCanvas(totalWidth, imageHeight)
love.graphics.setCanvas( canvas2 )
love.graphics.draw(image, tilequad[1], 0, 0)
love.graphics.draw(canvas1, VALUE_MARGIN, 0)
love.graphics.draw(image, tilequad[3], totalWidth - 11, 0)
love.graphics.setCanvas( )
local imagedata = canvas2:newImageData()
local texture = love.graphics.newImage( imagedata )
imagedata:release()
canvas2:release()
return texture
end
function ComplexHPBar:draw(x, y, percent)
utils.graphics.resetColor()
love.graphics.draw(self.foreground, x, y)
love.graphics.setColor(self.backcolor.r, self.backcolor.g, self.backcolor.b, 1)
love.graphics.draw(self.background, x, y)
utils.graphics.resetColor()
love.graphics.setColor(self.barcolor.r, self.barcolor.g, self.barcolor.b, 1)
gui.drawBar(x + 4, y + 2, math.floor((self.width) * percent), HEIGHT)
utils.graphics.resetColor()
end
function ComplexHPBar:drawWithLabels(x, y, value, valuemax)
local percent = value / valuemax
self:draw(x, y, percent)
love.graphics.print(math.floor(value) .. "/" .. valuemax, x+10, y+2)
end
return ComplexHPBar