| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- local Ribbon = class()
- local g = love.graphics
- function Ribbon:init()
- self.ribbons = {0, 0, 0, 0, 0}
- self.count = 3
- self.margin = .1
- end
- function Ribbon:test(x, y)
- local u, v = ctx.u, ctx.v
- local anchor = (.3 + (.8 - .3) / 2) * v
- g.setFont('BebasNeue', .065 * v)
- local fh = g.getFont():getHeight()
- for i = 1, self.count do
- local yy = anchor - (self.margin * v * ((self.count - 1) / 2)) + (self.margin * v * (i - 1)) - fh / 2
- if math.inside(x, y, 0, yy, u, fh) then return i end
- end
- return nil
- end
- function Ribbon:draw()
- local u, v = ctx.u, ctx.v
- local anchor = (.3 + (.8 - .3) / 2) * v
- g.setFont('BebasNeue', .065 * v)
- local fh = g.getFont():getHeight()
- local test = self:test(love.mouse.getPosition())
- for i = 1, self.count do
- if test == i then
- self.ribbons[i] = math.lerp(self.ribbons[i], 1, 20 * delta)
- else
- self.ribbons[i] = math.lerp(self.ribbons[i], 0, 30 * delta)
- end
- local ht = math.ceil(fh * self.ribbons[i])
- g.setColor(0, 0, 0, 80 * self.ribbons[i])
- 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)
- end
- end
- return Ribbon
|