Import mojo Const speed#=10 Class Node Field r,g,b Field split:Bool Field ready Field ul:Node,ur:Node,bl:Node,br:Node Method New() r=Rnd(255) g=Rnd(255-r) b=Rnd(255-(r+g)) ready=speed End Method Split() split=True ul=New Node ur=New Node bl=New Node br=New Node ready=speed End Method GetNode:Node(x#,y#) If Abs(x)>1 Or Abs(y)>1 Return Null If split If x<0 If y<0 Return ul.GetNode(x*2+1,y*2+1) Else Return bl.GetNode(x*2+1,y*2-1) Endif Else If y<0 Return ur.GetNode(x*2-1,y*2+1) Else Return br.GetNode(x*2-1,y*2-1) Endif Endif Else Return Self Endif End Method Update() If ready>0 ready -=1 Endif If split ul.Update ur.Update bl.Update br.Update Endif End Method Draw() If split Local f#=1-ready/speed PushMatrix SetAlpha 1-f SetColor r,g,b DrawCircle 0,0,1-f SetAlpha f Scale .5,.5 PushMatrix Translate -f,-f ul.Draw PopMatrix PushMatrix Translate -f,f bl.Draw PopMatrix PushMatrix Translate f,-f ur.Draw PopMatrix PushMatrix Translate f,f br.Draw PopMatrix PopMatrix Else SetAlpha 1 SetColor r,g,b DrawCircle 0,0,1 Endif End End Class CirclesApp Extends App Field screenMatrix#[] Field mx#,my# Field base:Node Field last:Node Method OnCreate() SetUpdateRate 60 PushMatrix Translate DeviceWidth/2,DeviceHeight/2 Scale DeviceHeight()/2,DeviceHeight()/2 screenMatrix = GetMatrix() PopMatrix Seed=Millisecs() base=New Node End Method OnUpdate() PushMatrix Transform screenMatrix[0],screenMatrix[1],screenMatrix[2],screenMatrix[3],screenMatrix[4],screenMatrix[5] Local mouse#[]=InvTransform([MouseX(),MouseY()]) mx=mouse[0] my=mouse[1] PopMatrix Local n:Node=base.GetNode(mx,my) If n And n.ready=0 And n<>last n.Split last=base.GetNode(mx,my) Endif base.Update End Method OnRender() Cls 255,255,255 SetColor 0,0,0 PushMatrix Transform screenMatrix[0],screenMatrix[1],screenMatrix[2],screenMatrix[3],screenMatrix[4],screenMatrix[5] base.Draw PopMatrix End End Function Main() New CirclesApp End