avalanche.lua 728 B

12345678910111213141516171819202122
  1. local Avalanche = extend(Buff)
  2. Avalanche.tags = {'knockback', 'knockup'}
  3. function Avalanche:activate()
  4. self.base = math.abs(self.offset)
  5. end
  6. function Avalanche:update()
  7. local sign = math.sign(self.offset)
  8. local knockbackFactor = math.max(math.abs(self.offset) / self.base, .5) * 600 * ls.tickrate
  9. local amount = knockbackFactor
  10. self.unit.x = math.clamp(self.unit.x + amount * sign, 0, ctx.map.width)
  11. local knockupFactor = 1 - (2 * math.abs(.5 - math.abs(self.offset / self.base)))
  12. self.knockup = knockupFactor * 25
  13. self.offset = self.offset - math.min(math.abs(amount * sign), math.abs(self.offset)) * math.sign(self.offset)
  14. if self.offset == 0 then self.unit.buffs:remove(self) end
  15. end
  16. return Avalanche