health.lua 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. Health = class()
  2. local g = love.graphics
  3. function Health:init()
  4. local health = data.media.graphics.hud.health
  5. self.canvas = g.newCanvas(health:getWidth(), health:getHeight())
  6. self.val = 0
  7. self.prevVal = 0
  8. end
  9. function Health:update()
  10. local p = ctx.players:get(ctx.id)
  11. if p then
  12. self.prevVal = self.val
  13. self.val = math.lerp(self.val, p.health, math.min(10 * tickRate, 1))
  14. end
  15. end
  16. function Health:draw()
  17. local u, v = ctx.hud.u, ctx.hud.v
  18. local p = ctx.players:get(ctx.id)
  19. self.canvas:clear()
  20. self.canvas:renderTo(function()
  21. g.pop()
  22. g.setColor(255, 255, 255)
  23. g.rectangle('fill', 0, 0, self.canvas:getWidth(), self.canvas:getHeight())
  24. g.setBlendMode('subtractive')
  25. g.draw(data.media.graphics.hud.healthMask, 0, 0)
  26. local hp = math.lerp(self.prevVal, self.val, tickDelta / tickRate)
  27. local prc = hp / p.maxHealth
  28. local w = 366 - (prc * 366)
  29. g.rectangle('fill', 374 - w, 0, w, 51)
  30. g.setBlendMode('alpha')
  31. love.graphics.push()
  32. love.graphics.translate(ctx.view.frame.x, ctx.view.frame.y)
  33. end)
  34. if p then
  35. local s = u * .4775 / 382
  36. local x = u * .5 - (self.canvas:getWidth() * s * .5)
  37. g.setColor(255, 255, 255, 90)
  38. g.draw(self.canvas, x, 0, 0, s, s)
  39. g.setColor(255, 255, 255)
  40. g.draw(data.media.graphics.hud.health, x, 0, 0, s, s)
  41. g.setFont('BebasNeue', v * .04)
  42. g.setColor(100, 0, 0, 150)
  43. g.printCenter(math.ceil(p.health) .. ' / ' .. p.maxHealth, u * .5 + 2, data.media.graphics.hud.health:getHeight() * s / 2 + 2 + (v * .003))
  44. g.setColor(255, 255, 255, 255)
  45. g.printCenter(math.ceil(p.health) .. ' / ' .. p.maxHealth, u * .5, data.media.graphics.hud.health:getHeight() * s / 2 + (v * .003))
  46. end
  47. end
  48. return Health