enemies.lua 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. Enemies = class()
  2. function Enemies:init()
  3. self.enemies = {}
  4. self.level = 0
  5. self.nextEnemy = 5
  6. self.minEnemyRate = 6
  7. self.maxEnemyRate = 9
  8. end
  9. function Enemies:update()
  10. self.nextEnemy = timer.rot(self.nextEnemy, function()
  11. if table.count(self.enemies) < 1 + self.level / 2 then
  12. local spawnType
  13. local x = love.math.random() > .5 and 0 or love.graphics.getWidth()
  14. spawnType = Puju
  15. if self.maxEnemyRate < 8 then
  16. if love.math.random() < math.min(8 - self.maxEnemyRate, 2) * .06 then
  17. spawnType = Spuju
  18. end
  19. end
  20. self:add(spawnType, {x = x})
  21. self.minEnemyRate = math.max(self.minEnemyRate - .055 * math.clamp(self.minEnemyRate / 5, .1, 1), 1.4)
  22. self.maxEnemyRate = math.max(self.maxEnemyRate - .03 * math.clamp(self.maxEnemyRate / 4, .5, 1), 2.75)
  23. end
  24. return self.minEnemyRate + love.math.random() * (self.maxEnemyRate - self.minEnemyRate)
  25. end)
  26. if not next(self.enemies) and self.level > 1 then
  27. self.nextEnemy = math.max(.01, math.lerp(self.nextEnemy, 0, .75 * ls.tickrate))
  28. end
  29. table.with(self.enemies, 'update')
  30. self.level = self.level + ls.tickrate / (16 + self.level / 2)
  31. end
  32. function Enemies:add(kind, data)
  33. local enemy = kind(data)
  34. self.enemies[enemy] = enemy
  35. end
  36. function Enemies:remove(enemy)
  37. ctx.view:unregister(enemy)
  38. local x = love.math.random(14 + (self.level ^ .85) * .75, 20 + (self.level ^ .85))
  39. if love.math.random() > .5 then
  40. ctx.jujus:add({amount = x, x = enemy.x, y = enemy.y, vx = love.math.random(-35, 35)})
  41. else
  42. ctx.jujus:add({amount = x / 2, x = enemy.x, y = enemy.y, vx = love.math.random(0, 45)})
  43. ctx.jujus:add({amount = x / 2, x = enemy.x, y = enemy.y, vx = love.math.random(-45, 0)})
  44. end
  45. table.each(ctx.minions.minions, function(minion)
  46. if minion.target == enemy then
  47. minion.target = nil
  48. end
  49. end)
  50. self.enemies[enemy] = nil
  51. enemy = nil
  52. end