ribbon.lua 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. local Ribbon = class()
  2. local g = love.graphics
  3. function Ribbon:init()
  4. self.ribbons = {0, 0, 0, 0, 0}
  5. self.count = 3
  6. self.margin = .1
  7. end
  8. function Ribbon:test(x, y)
  9. local u, v = ctx.u, ctx.v
  10. local anchor = (.3 + (.8 - .3) / 2) * v
  11. g.setFont('BebasNeue', .065 * v)
  12. local fh = g.getFont():getHeight()
  13. for i = 1, self.count do
  14. local yy = anchor - (self.margin * v * ((self.count - 1) / 2)) + (self.margin * v * (i - 1)) - fh / 2
  15. if math.inside(x, y, 0, yy, u, fh) then return i end
  16. end
  17. return nil
  18. end
  19. function Ribbon:draw()
  20. local u, v = ctx.u, ctx.v
  21. local anchor = (.3 + (.8 - .3) / 2) * v
  22. g.setFont('BebasNeue', .065 * v)
  23. local fh = g.getFont():getHeight()
  24. local test = self:test(love.mouse.getPosition())
  25. for i = 1, self.count do
  26. if test == i then
  27. self.ribbons[i] = math.lerp(self.ribbons[i], 1, 20 * delta)
  28. else
  29. self.ribbons[i] = math.lerp(self.ribbons[i], 0, 30 * delta)
  30. end
  31. local ht = math.ceil(fh * self.ribbons[i])
  32. g.setColor(0, 0, 0, 80 * self.ribbons[i])
  33. g.rectangle('fill', 0, anchor - (self.margin * v * ((self.count - 1) / 2)) + (self.margin * v * (i - 1)) - math.round(fh / 2 * self.ribbons[i]), u, ht)
  34. end
  35. end
  36. return Ribbon