import de.grogra.rgg.*;
import de.grogra.imp3d.objects.*;
import static de.grogra.imp3d.shading.RGBAShader.*;
import de.grogra.turtle.*;
import static de.grogra.xl.util.Operators.*;
import static de.grogra.rgg.Library.*;

module m(int x) extends Sphere(3)
{
	{setShader (GREEN);}
}

module s;
module i;
module bud extends i;

public class GloballySensitive extends RGG
{
    protected void init()
    [
	Axiom ==>> ^ [m(10)] Translate(30,0,0) [m(10)] Translate(30,0,0) [m(10)];
    ]

    public void run()
    [
	m(x) ==> F(12, 2f, 15) if(x > 0) (RH(180) [s] m(x-1));

	s ==> RU(irandom(50,70)) F(irandom(15, 18), 2f, 15) bud;

	b:bud ==> i
	          if (forall(distance(b, (* x:i, (b != x) *)) > 13))
	          (
		      RL(70) [F(4, 0.1f, 12) RH(50)
			      for ((1:5)) (RH(72) [RL(80) F(3, 1f, 9)])]
		  );
    ]
}
