| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- local Bloom = {}
- local g = love.graphics
- function Bloom:init()
- self:resize()
- self.alpha = 0
- end
- function Bloom:update()
- local p = ctx.player
- local alphas = config.effects[ctx.biome].bloom.alpha
- self.alpha = lume.lerp(self.alpha, p.dead and alphas[2] or alphas[1], 2 * ls.tickrate)
- self.active = self.alpha > 5
- end
- function Bloom:applyEffect(source, target)
- local p = ctx.player
- local w, h = g.getWidth(), g.getHeight()
- local threshold = data.media.shaders.threshold
- g.setColor(255, 255, 255)
- g.setCanvas(self.canvas)
- threshold:send('threshold', .8)
- g.setShader(threshold)
- g.draw(source, 0, 0, 0, .25, .25)
- self.hblur:send('amount', 4 / w)
- self.vblur:send('amount', 4 / h)
- for i = 1, 3 do
- g.setShader(self.hblur)
- g.setCanvas(self.working)
- g.draw(self.canvas)
- g.setShader(self.vblur)
- g.setCanvas(self.canvas)
- g.draw(self.working)
- end
- g.setShader()
- g.setCanvas(target)
- g.draw(source)
- g.setColor(255, 255, 255, self.alpha)
- g.setBlendMode('additive')
- g.draw(self.canvas, 0, 0, 0, 4, 4)
- g.setBlendMode('alpha')
- end
- function Bloom:resize()
- local w, h = g.getDimensions()
- self.canvas = g.newCanvas(w / 4, h / 4)
- self.working = g.newCanvas(w / 4, h / 4)
- self.threshold = love.graphics.newShader('media/shaders/threshold.shader')
- self.hblur = love.graphics.newShader('media/shaders/horizontalBlur.shader')
- self.vblur = love.graphics.newShader('media/shaders/verticalBlur.shader')
- end
- return Bloom
|