dagger.lua 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. local Dagger = {}
  2. Dagger.name = 'Dagger'
  3. Dagger.code = 'dagger'
  4. Dagger.text = 'Stabby'
  5. Dagger.type = 'weapon'
  6. Dagger.damage = 45
  7. Dagger.cooldown = .8
  8. function Dagger:activate(owner)
  9. self.timer = 0
  10. self.visions = {}
  11. end
  12. function Dagger:update(owner)
  13. self.timer = timer.rot(self.timer)
  14. ctx.players:each(function(p)
  15. if p.id ~= owner.id then
  16. self.visions[p.id] = self.visions[p.id] or 0
  17. if math.abs(math.anglediff(p.angle, math.direction(p.x, p.y, owner.x, owner.y))) > math.pi / 2 or owner.cloak > 0 or ctx.collision:lineTest(p.x, p.y, owner.x, owner.y, {tag = 'wall'}) then
  18. self.visions[p.id] = math.min(self.visions[p.id] + tickRate, 3)
  19. else
  20. self.visions[p.id] = math.max(self.visions[p.id] - tickRate, 0)
  21. end
  22. end
  23. end)
  24. end
  25. function Dagger:canFire(owner)
  26. return self.timer == 0
  27. end
  28. function Dagger:fire(owner)
  29. ctx.spells:activate(owner.id, data.spell.dagger, self.visions)
  30. self.timer = self.cooldown
  31. end
  32. function Dagger:draw(owner)
  33. if owner.id == ctx.id then
  34. local r, g, b, a = love.graphics.getColor()
  35. for i, v in pairs(self.visions) do
  36. local p = ctx.players:get(i)
  37. if p and not p.ded and p.team ~= owner.team and v == 3 then
  38. local alpha = p.alpha * (1 - (p.cloak / (p.team == ctx.players:get(ctx.id).team and 2 or 1)))
  39. love.graphics.setColor(150, 0, 0, 255 * alpha)
  40. love.graphics.setLineWidth(3)
  41. love.graphics.line(p.x - 10, p.y - 90, p.x + 10, p.y - 70)
  42. love.graphics.line(p.x - 10, p.y - 70, p.x + 10, p.y - 90)
  43. love.graphics.setLineWidth(1)
  44. end
  45. end
  46. love.graphics.setColor(r, g, b, a)
  47. end
  48. end
  49. Dagger.reload = f.empty
  50. function Dagger:crosshair()
  51. local g, p, d, x, y = love.graphics, ctx.players:get(ctx.id), data.spell.dagger, ctx.view:frameMouseX(), ctx.view:frameMouseY()
  52. local v = ctx.view
  53. local t = (self.timer / self.cooldown)
  54. local o = (t ^ 2 * ((1 + 1.6) * t - 1.6)) * (d.radius + 10)
  55. if math.distance(x, y, (p.x - v.x) * v.scale, (p.y - v.y) * v.scale) < d.distance * v.scale then
  56. x, y = p.x + math.dx(d.distance, p.angle) - v.x, p.y + math.dy(d.distance, p.angle) - v.y
  57. x, y = x * v.scale, y * v.scale
  58. end
  59. g.setColor(255, 255, 255, 255 * (1 - p.cloak / 2))
  60. g.setLineWidth(2 + p.cloak)
  61. for i = 1, 4 do
  62. local ang = p.angle - math.pi / 4 + (i * math.pi / 2)
  63. local x1, y1 = x + math.dx(d.radius - 4 - o, ang), y + math.dy(d.radius - 4 - o, ang)
  64. local x2, y2 = x + math.dx(d.radius + 4 - o, ang), y + math.dy(d.radius + 4 - o, ang)
  65. g.line(x1, y1, x2, y2)
  66. end
  67. g.setLineWidth(1)
  68. end
  69. return Dagger