Totally useless

But i like it.
http://www.youtube.com/watch?v=4rqBddvhfrQ

``````
--# Butterflies
Butterflies = class()

function Butterflies:init(n)
self.colorList = {}

self.colorList[1] = color(253, 255, 0, 255)
self.colorList[2] = color(255, 188, 0, 255)
self.colorList[3] = color(255, 75, 0, 255)
self.colorList[4] = color(255, 0, 157, 255)
self.colorList[5] = color(252, 0, 255, 255)

self.colorList[6] = color(138, 0, 255, 255)
self.colorList[7] = color(0, 159, 255, 255)
self.colorList[8] = color(0, 247, 255, 255)
self.colorList[9] = color(0, 255, 158, 255)
self.colorList[10] = color(41, 255, 0, 255)

self.n = n
local id = {}
local ms = mesh()
print(ms)
print(#ms.vertices)
self.id = id
self.ms = ms
for i =1,n do
local c = self.colorList [rnd(10)]
local j = (i-1)*12
id[i] = Butterfly(ms,c)
end
end

function Butterflies:draw()
self.ms:draw()
for i,p in ipairs(self.id) do
p:draw()
end
end

function Butterflies:touched(touch)
for i,p in ipairs(self.id) do
p:touched(touch)
end
end

--# Butterfly
Butterfly = class()

rnd = math.random
cos = math.cos
sin = math.sin
pi = math.pi

function Butterfly:init(ms,c)
local x,y,z,w,h,o,r,j
local xc,yc = WIDTH/2,HEIGHT/2
local shape = {}
x = (rnd()-0.5)*WIDTH*0.9 + xc
y = (rnd()-0.5)*HEIGHT*0.9 + yc
z = 0
w = (rnd()+2)*4
h = w
o = 1  -- this is the opening of the wings
r = rnd()*2*math.pi
j = #ms.vertices
ms:addRect(x,y,w,h,r)
ms:addRect(x,y,w,h,r)
self.ms = ms
local p =self
p.j, p.shape, p.r, p.c, p.w, p.h, p.o, p.x, p.y = j,shape,r,c,w,h,o,x,y
p.dtBeat= 0.5
p.tfBeat= 0
self:redraw()
end

function Butterfly:redraw()
local p= self
local j,shape,r,c0,w,h,o,x,y = p.j, p.shape, p.r, p.c, p.w, p.h, p.o, p.x, p.y
local ms = self.ms
shape[1]=vec2(0,0):rotate(r)
shape[2]=vec2(w*o*1.3,h):rotate(r)
shape[3]=vec2(w*o/2,-h):rotate(r)
shape[4]=vec2(0,0):rotate(r)
shape[5]=vec2(-w*o*1.3,h):rotate(r)
shape[6]=vec2(-w*o/2,-h):rotate(r)
c = color(0,0,0,128)
local d,s
if self.flying then d=10 s=1.1 else d=4 s=1 end
for k=1,6 do
ms:vertex(j+k,shape[k]*s+vec2(x+d,y-d))
ms:color(j+k,c)
end

for k=1,6 do
ms:vertex(j+k+6,shape[k]*s+vec2(x,y))
ms:color(j+k+6,c0)
end
end

function Butterfly:draw()
local rnd = math.random
local limit = DeltaTime/0.016
if rnd()<=limit/500 then self:turn() end
if rnd()<=limit/500 then self:wingBeat(rnd()*0.7+0.3) end
if rnd()<=limit/10000 then self:fly("random") end
self:wingBeat()
if self.flying then self:fly() end
end

function Butterfly:wingBeat(dt)
local pap = self
if dt then -- this is a start
pap.dtBeat= dt
pap.tfBeat = ElapsedTime + dt
--   sound(SOUND_HIT, 39771)
else -- continue beating
if pap.tfBeat > ElapsedTime then
local o = (1.5+ cos((ElapsedTime - pap.tfBeat)/pap.dtBeat*2*pi))/2.5
pap.o = o
self:redraw()
end
end
end

function Butterfly:turn()
local pap = self
local r = (rnd()-0.5)*pi/2
pap.r = pap.r + r
self:redraw()
end

function Butterfly:fly(type,t)
local alpha
if type then
self.flying = true
self.flyType = type
if self.flyType == "random" then
self.flySpeed = (rnd() + 1)*70
if t then
local v = vec2(self.x-t.x,self.y-t.y)
self.r = vec2(0,0):angleBetween(v) - pi/2
end
alpha = self.r + pi/2
self.flyDir = vec2(cos(alpha),sin(alpha))
end
else
if self.tfBeat<ElapsedTime then self:wingBeat(rnd()*0.3+0.2) end
if self.flyType == "random" then
if rnd(30)==1 then
self:turn()
alpha = self.r + pi/2
self.flyDir = vec2(cos(alpha),sin(alpha))
end
local limit = DeltaTime/0.016
if rnd()<limit/300 then  self.flying=false end
end
if self.x <0     then self.x = self.x + WIDTH end
if self.x >WIDTH then self.x = self.x - WIDTH end
if self.y<0      then self.y = self.y + HEIGHT end
if self.y>HEIGHT then self.y = self.y - HEIGHT end
local dir,speed = self.flyDir,self.flySpeed
self.x = self.x + dir.x * speed * DeltaTime
self.y = self.y + dir.y * speed * DeltaTime
self:redraw()
end
end

function Butterfly:touched(touch)
if vec2(touch.x,touch.y):dist(vec2(self.x,self.y))<80 then self:fly("random",touch) end
end

--# Main
-- 0  papillon

displayMode(FULLSCREEN)

-- Use this function to perform your initial setup
function setup()
print("Hello World!")
papillons = Butterflies(300)
end

-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(68, 68, 68, 255)
papillons:draw()
end
function touched(touch)
papillons:touched(touch)
end

``````

 modified for better real time with 200 butterflies

Not totally useless, a pleasing diversion for the kids.

Thanks. This new version is a little better

Actually, I married it with the flower code and made a nice pleasing animation. It’s cute and pleasant!

Wow cool AI

top nice!

Wow… What intricate, amazing code for a completely useless thing… Sounds like something I would do.