effects.lua 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. Effects = class()
  2. function Effects:init()
  3. self.active = love.graphics.isSupported('shader') and ctx.options.postprocessing
  4. self.effects = {}
  5. self:add('wave')
  6. self:add('bloom')
  7. self:add('vignette')
  8. self:add('deathblur')
  9. end
  10. function Effects:update()
  11. if not self.active then return end
  12. for i = 1, #self.effects do f.exe(self.effects[i].update, self.effects[i]) end
  13. end
  14. function Effects:resize()
  15. if not self.active then return end
  16. for i = 1, #self.effects do f.exe(self.effects[i].resize, self.effects[i]) end
  17. end
  18. function Effects:add(kind)
  19. if not self.active then return end
  20. local effect = new(data.effect[kind])
  21. effect.active = true
  22. f.exe(effect.activate, effect)
  23. table.insert(self.effects, effect)
  24. self.effects[kind] = effect
  25. ctx.event:emit('view.register', {object = effect, mode = 'effect'})
  26. end
  27. function Effects:remove(code)
  28. self.effects[code] = nil
  29. for i = #self.effects, 1, -1 do
  30. if self.effects[i].code == code then
  31. ctx.event:emit('view.unregister', {object = effect})
  32. table.remove(self.effects, i)
  33. end
  34. end
  35. end
  36. function Effects:clear()
  37. while #self.effects > 0 do
  38. self:remove(self.effects[1].code)
  39. end
  40. self:init()
  41. end
  42. function Effects:get(code)
  43. return self.effects[code]
  44. end