| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- local EnergyRifle = extend(app.logic.spell)
- EnergyRifle.code = 'energyrifle'
- EnergyRifle.image = data.media.graphics.effects.pulse
- EnergyRifle.scale = 2
- EnergyRifle.anchorx = 20
- EnergyRifle.anchory = 2
- EnergyRifle.speed = 1600
- function EnergyRifle:activate()
- self:mirrorOwner()
- self:lerpInit()
- self.ded = false
- local dx, dy = self.owner.class.handx * self.owner.class.scale, self.owner.class.handy * self.owner.class.scale
- self.x = self.x + math.dx(dx, self.angle) - math.dy(dy, self.angle)
- self.y = self.y + math.dy(dx, self.angle) + math.dx(dy, self.angle)
- dx, dy = data.weapon.energyrifle.tipx * data.weapon.energyrifle.scale, data.weapon.energyrifle.tipy * data.weapon.energyrifle.scale
- self.x = self.x + math.dx(dx, self.angle) - math.dy(dy, self.angle)
- self.y = self.y + math.dy(dx, self.angle) + math.dx(dy, self.angle)
- for _ = 1, 4 do
- ctx.event:emit('particle.create', {
- kind = 'spark',
- vars = {
- x = self.x,
- y = self.y,
- angle = self.angle + love.math.random() * 1.56 - .78
- }
- })
- end
- ctx.event:emit('particle.create', {
- kind = 'muzzleFlash',
- vars = {
- owner = self.owner.id,
- weapon = 'energyrifle'
- }
- })
- self:playSound('pulse')
- if ctx.collision:lineTest(self.owner.x, self.owner.y, self.x, self.y, {tag = 'wall'}) then
- ctx.spells:deactivate(self)
- end
- end
- function EnergyRifle:update()
- self:lerpUpdate()
- local distance = self.speed * tickRate
- local wallDistance = self:wallDistance(distance)
- local enemy = self:enemiesInLine(wallDistance)
- if enemy then
- ctx.buffs:add(enemy, 'plasmasickness')
- self:damage(enemy, data.weapon.energyrifle.damage)
- end
- self:move(wallDistance)
- if wallDistance < distance or enemy then self:die() end
- end
- function EnergyRifle:draw()
- local x, y = self:lerpGet()
- local function doDraw()
- love.graphics.setColor(255, 255, 255)
- self:drawImage({x = x, y = y})
- end
- doDraw()
- ctx.effects:get('bloom'):render(doDraw)
- end
- return EnergyRifle
|