vision/bullet/bullet.lua

73 lines
2 KiB
Lua

Bullet = Object.extend(Object)
function Bullet:new( player )
self.player = player
self.ex = 0
self.ey = 0
self.ox = 0
self.oy = 0
self.angle = 0
self.emitted = 0
self.lifetime = 1
self.finished = false
self.speed = 8
end
function Bullet:update(dt)
self.emitted = self.emitted + dt
if self.emitted > self.lifetime then
self.finished = true
else
self.ex = self.ex + math.lengthdir_x( self.speed, self.angle ) + self.ox
self.ey = self.ey + math.lengthdir_y( self.speed, self.angle ) + self.oy
self.source:setPosition(self.ex, self.ey,0)
end
end
function Bullet:draw()
if self.finished == false then
local bx = self.ex
local by = self.ey
local a = math.clamp(0, 1-(-0.3+(self.emitted/self.lifetime)), 1)
love.graphics.setColor(1,1,1,a)
love.graphics.draw( bulletShot, bx, by, self.angle*(math.pi/180) )
end
end
function Bullet:emit( ex, ey, ox, oy, angle, lifetime )
self.ex = ex
self.ey = ey
self.ox = ox
self.oy = oy
self.angle = angle
self.lifetime = lifetime
self:generateSound(ex,ey)
end
function Bullet:generateSound(px,py)
local sound = sfxr.newSound()
sound:resetParameters()
sound.waveform = 0
sound.frequency.start = math.variance(0.50948863032722, 50)
sound.frequency.min = math.variance(0.23191561855507, 50)
sound.frequency.slide = -(math.variance(0.30302405172478, 50))
sound.duty.ratio = math.variance(0.11477388876231, 50)
sound.duty.sweep = math.variance(0.10811502385025, 50)
sound.envelope.attack = math.random(0.0,0.1)
sound.envelope.sustain = 0.14060104631004 * (math.random(1,100)/100)
sound.envelope.decay = math.variance(0.22882606362934, 50)
sound.envelope.punch = math.variance(0.29031108049385,50)
sound.phaser.offset = 0
sound.phaser.sweep = 0
sound.highpass.cutoff = math.variance(0.25467943576175, 50)
local soundData = sound:generateSoundData()
self.source = love.audio.newSource(soundData)
self.source:setVolume(1)
self.source:setPosition(px,py)
self.source:play()
end