60 lines
1.5 KiB
Lua
60 lines
1.5 KiB
Lua
FloatingText = {}
|
|
class('FloatingText').extends(playdate.graphics.sprite)
|
|
|
|
local floatFont = Graphics.font.new('assets/fonts/Mini Sans 2X')
|
|
|
|
local phrases = { "-1", "nice", "200", "dead", "done", "nice shot", "boom", "rip", "lol", "ez" }
|
|
|
|
function FloatingText.spawnCustom(x, y, text)
|
|
local ft = FloatingText(x, y)
|
|
ft.text = text
|
|
local w = floatFont:getTextWidth(text) + 4
|
|
ft:setSize(w, 16)
|
|
ft:markDirty()
|
|
return ft
|
|
end
|
|
|
|
function FloatingText:init(x, y)
|
|
FloatingText.super.init(self)
|
|
|
|
self.text = phrases[math.random(1, #phrases)]
|
|
self.life = 0
|
|
self.maxLife = 60
|
|
self.driftX = math.random(-20, 20) / 10
|
|
self.driftY = -math.random(10, 20) / 10
|
|
|
|
local w = floatFont:getTextWidth(self.text) + 4
|
|
self:setSize(w, 16)
|
|
self:setCenter(0.5, 0.5)
|
|
self:setZIndex(ZIndex.ui + 1)
|
|
self:moveTo(x, y)
|
|
self:add()
|
|
self:markDirty()
|
|
end
|
|
|
|
function FloatingText:update()
|
|
self.life = self.life + 1
|
|
if self.life >= self.maxLife then
|
|
self:remove()
|
|
return
|
|
end
|
|
|
|
self:moveBy(self.driftX, self.driftY)
|
|
self.driftY = self.driftY + 0.03
|
|
self:markDirty()
|
|
end
|
|
|
|
function FloatingText:draw()
|
|
local t = 1 - (self.life / self.maxLife)
|
|
if t > 0.5 then
|
|
floatFont:drawText(self.text, 2, 0)
|
|
else
|
|
local dither = playdate.graphics.image.kDitherTypeBayer4x4
|
|
local img = Graphics.image.new(self.width, self.height)
|
|
Graphics.pushContext(img)
|
|
floatFont:drawText(self.text, 2, 0)
|
|
Graphics.popContext()
|
|
img:drawFaded(0, 0, t * 2, dither)
|
|
end
|
|
end
|