| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- local g = love.graphics
- Particles = extend(Manager)
- Particles.depth = -60
- function Particles:init()
- self.active = ctx.options.particles
- if not self.active then return end
- self.systems = {}
- self.modes = {draw = {}, gui = {}}
- for i = 1, #data.particle do
- local particle = data.particle[i]
- local system = g.newParticleSystem(particle.image, particle.max or 1024)
- system:setOffset(particle.image:getWidth() / 2, particle.image:getHeight() / 2)
- self.systems[particle.code] = system
- self.modes[particle.mode or 'draw'][particle.code] = system
- for option, value in pairs(particle.options) do
- self:apply(particle.code, option, value)
- end
- end
- ctx.event:emit('view.register', {object = self})
- ctx.event:emit('view.register', {object = self, mode = 'gui'})
- end
- function Particles:draw()
- if ctx.ded or not self.active then return end
- g.setColor(255, 255, 255)
- table.each(self.modes.draw, function(system, code)
- system:update(ls.dt)
- g.setBlendMode(data.particle[code].blendMode or 'alpha')
- g.draw(system)
- g.setBlendMode('alpha')
- end)
- end
- function Particles:gui()
- if not self.active then return end
- g.setColor(255, 255, 255)
- table.each(self.modes.gui, function(system, code)
- system:update(ls.dt)
- g.setBlendMode(data.particle[code].blendMode or 'alpha')
- g.draw(system)
- g.setBlendMode('alpha')
- end)
- end
- function Particles:emit(code, x, y, count, options)
- if not self.active or not data.particle[code] then return end
- if type(count) == 'table' then
- options = count
- count = 1
- end
- options = options or {}
- table.each(options, function(value, option)
- self:apply(code, option, value)
- end)
- self.systems[code]:setPosition(x, y)
- self.systems[code]:emit(count)
- table.each(options, function(value, option)
- if data.particle[code].options[option] then
- self:apply(code, option, data.particle[code].options[option])
- end
- end)
- end
- function Particles:apply(code, option, value)
- if not self.active then return end
- local system = self.systems[code]
- local setter = system['set' .. option:capitalize()]
- if type(value) == 'table' then setter(system, unpack(value))
- else setter(system, value) end
- end
|