achievements.lua 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. Achievements = class()
  2. function Achievements:init(user)
  3. self:load(user)
  4. ctx.event:on('achievement', function(achievement)
  5. achievement = self.achievements[achievement.name]
  6. if achievement and not achievement.achieved then
  7. if achievement:apply() then
  8. achievement.achieved = true
  9. self:save(user)
  10. end
  11. end
  12. end)
  13. end
  14. function Achievements:load(user)
  15. local achievements = json.decode(love.filesystem.read('save/' .. user.name .. '/achievements.json') or '{}')
  16. for _, name in ipairs(achievements) do
  17. if self.achievements[name] then
  18. self.achievements[name].achieved = true
  19. end
  20. end
  21. end
  22. function Achievements:save(user)
  23. local achievements = {}
  24. for key, value in pairs(Achievements.achievements) do
  25. if value.achieved then
  26. table.insert(achievements, key)
  27. end
  28. end
  29. love.filesystem.createDirectory('save')
  30. love.filesystem.createDirectory('save/' .. user.name)
  31. love.filesystem.write('save/' .. user.name .. '/achievements.json', json.encode(achievements))
  32. end
  33. Achievements.achievements = {
  34. miniarsenal = {
  35. value = 0,
  36. title = 'Mini Arsenal',
  37. description = 'Summon 10 minions in a single game.',
  38. apply = function(self)
  39. self.value = self.value + 1
  40. if self.value == 10 then
  41. return true
  42. end
  43. end
  44. },
  45. ninelives = {
  46. value = 0,
  47. title = 'Nine Lives',
  48. description = 'Die and be reborn 10 times in a single game.',
  49. apply = function()
  50. self.value = self.value + 1
  51. if self.value == 10 then
  52. return true
  53. end
  54. end
  55. }
  56. }