minions.lua 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. Minions = class()
  2. function Minions:init()
  3. self.minions = {}
  4. end
  5. function Minions:update()
  6. table.with(self.minions, 'update')
  7. end
  8. function Minions:add(kind, data)
  9. local minion = kind(data)
  10. self.minions[minion] = minion
  11. end
  12. function Minions:remove(minion)
  13. ctx.view:unregister(minion)
  14. if minion.code == 'zuju' and ctx.upgrades.zuju.burst.level > 0 then
  15. local radius = (minion.width / 2) + 50
  16. local damage = 20 * ctx.upgrades.zuju.burst.level
  17. ctx.particles:add(Burst, {x = minion.x, y = minion.y, radius = radius})
  18. local enemiesInRadius = ctx.target:getEnemiesInRange(minion, radius)
  19. table.each(enemiesInRadius, function(enemy)
  20. enemy:hurt(damage)
  21. end)
  22. if math.abs(ctx.player.x - minion.x) < radius + ctx.player.width / 2 then
  23. ctx.player:hurt(damage / 2)
  24. end
  25. if ctx.upgrades.zuju.sanctuary.level > 0 then
  26. ctx.particles:add(BurstHeal, {x = minion.x, y = minion.y, radius = radius})
  27. end
  28. end
  29. if ctx.upgrades.muju.harvest.level > 0 then
  30. local x = love.math.random(1 + ctx.upgrades.muju.harvest.level, 3 + ctx.upgrades.muju.harvest.level * 2)
  31. if love.math.random() > .5 then
  32. ctx.jujus:add({amount = x, x = minion.x, y = minion.y, vx = love.math.random(-35, 35)})
  33. else
  34. ctx.jujus:add({amount = x / 2, x = minion.x, y = minion.y, vx = love.math.random(0, 45)})
  35. ctx.jujus:add({amount = x / 2, x = minion.x, y = minion.y, vx = love.math.random(-45, 0)})
  36. end
  37. end
  38. self.minions[minion] = nil
  39. end