muzzleFlash.lua 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. local MuzzleFlash = {}
  2. MuzzleFlash.name = 'MuzzleFlash'
  3. MuzzleFlash.code = 'muzzleFlash'
  4. MuzzleFlash.activate = function(self)
  5. self.maxHealth = .2
  6. self.health = self.maxHealth
  7. self.scale = 2.5
  8. self.alpha = 1
  9. self.image = data.media.graphics.effects.muzzleFlash1
  10. ctx.view:register(self)
  11. end
  12. MuzzleFlash.update = function(self)
  13. self.health = self.health - tickRate
  14. if self.health <= 0 then return true
  15. elseif self.health < (self.maxHealth * .33) then
  16. self.image = data.media.graphics.effects.muzzleFlash2
  17. elseif self.health < (self.maxHealth * .67) then
  18. self.image = data.media.graphics.effects.muzzleFlash3
  19. end
  20. self.alpha = self.alpha - (1 / self.maxHealth) * tickRate
  21. self.scale = math.lerp(self.scale, 0.5, 5 * tickRate)
  22. local owner = ctx.players:get(self.owner)
  23. local weapon = data.weapon[self.weapon]
  24. local dir = owner.angle
  25. self.angle = dir
  26. local dx, dy = owner.class.handx * owner.class.scale, owner.class.handy * owner.class.scale
  27. self.x = owner.x + math.dx(dx, dir) - math.dy(dy, dir)
  28. self.y = owner.y + math.dy(dx, dir) + math.dx(dy, dir)
  29. dx, dy = weapon.tipx * weapon.scale, weapon.tipy * weapon.scale
  30. self.x = self.x + math.dx(dx, dir) - math.dy(dy, dir)
  31. self.y = self.y + math.dy(dx, dir) + math.dx(dy, dir)
  32. end
  33. MuzzleFlash.draw = function(self)
  34. local function doDraw(diminish)
  35. love.graphics.setColor(255, 255, 255, self.alpha * 255 / diminish)
  36. love.graphics.draw(self.image, self.x, self.y, self.angle, self.scale * diminish, self.scale * diminish, 0, self.image:getHeight() / 2)
  37. end
  38. doDraw(1.5)
  39. ctx.effects:get('bloom'):render(f.cur(doDraw, 1.65))
  40. end
  41. return MuzzleFlash