touch and drag to watch the particles form a tree:
--# GenParticle
GenParticle = class()
function GenParticle:init(pos,vel,angvel,ang,grav)
-- you can accept and set parameters here
self.parts = {}
self.n = 0
self.m = mesh()
self.m.texture = readImage("Space Art:Beam")
self.gen = 2
self:addParticle(pos,vel,angvel,ang,grav)
self.vel = vel
end
function GenParticle:addParticle(pos,vel,angvel,ang,grav)
self.n = self.n + 1
self.parts[self.n] = {}
self.parts[self.n].r = self.m:addRect(pos.x,pos.y,30,5,ang)
self.parts[self.n].pos = pos
self.parts[self.n].vel = vel
self.parts[self.n].avel = angvel
self.parts[self.n].ang = ang
self.parts[self.n].dang = 0
self.parts[self.n].time = 1
self.parts[self.n].grav = grav
end
function GenParticle:draw()
for k,v in pairs(self.parts) do
v.pos = v.pos + v.vel
v.vel = v.vel:rotate(v.avel)
v.ang = v.ang + v.avel
v.dang = v.dang + v.avel
self.parts[k].time = v.time -0.05
self.m:setRect(v.r,v.pos.x,v.pos.y,30,5,vec2():angleBetween(v.vel))
if v.pos.x<0 then
v.vel.x = math.abs(v.vel.x)
v.dang = 0
elseif v.pos.x>WIDTH then
v.vel.x = -math.abs(v.vel.x)
v.dang = 0
elseif v.pos.y<0 then
v.vel.y = math.abs(v.vel.y)
v.dang = 0
elseif v.pos.y>HEIGHT then
v.vel.y = -math.abs(v.vel.y)
v.dang = 0
end
if v.time<0 then
self.gen = self.gen +2
self.n=self.n-1
self.m:setRect(v.r,0,0,0,0) table.remove(self.parts,k)
if self.gen%2==0 and self.gen<30 then
for i=1,math.sqrt(self.gen) do
self:addParticle(v.pos,v.vel:rotate(math.random(-100,100)*0.01),0,v.ang)
end
end
end
end
if #self.parts == 0 and self.m.size>0 then self.m:clear() end
self.m:draw()
end
--# Main
-- Shake
-- Use this function to perform your initial setup
function setup()
part = {}
backingMode(RETAINED)
parameter.watch("1/DeltaTime")
end
function touched(t)
table.insert(part,GenParticle(vec2(t.x,t.y),vec2(t.deltaX,t.deltaY)*0.2,math.random(-10,10)*0.001,
vec2(0,0):angleBetween(vec2(t.deltaX,t.deltaY)),vec2(0.1,0)))
end
-- This function gets called once every frame
function draw()
-- This sets a dark background color
--background(40, 40, 50,10)
fill(0,10)
rect(0,0,WIDTH,HEIGHT)
-- This sets the line thickness
strokeWidth(0)
for k,v in pairs(part) do
v:draw()
if #v.parts==0 then table.remove(part,k) end
end
-- Do your drawing here
end