// P0903.java:$BD+F|$H?KMU<y(B

package applet;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import Glib.*;

public class P0903 extends xApplet
	implements ActionListener
{	JButton[]bt=new JButton[3];
	String[]str={"Start","Clear","Exit"};
	xTurtle3 T3;
	int d=300;
	double leng0=54.0,Leng=0.2,ky=0.9;
	double rtx=5.0,vpz=1000.0;
	double[][]branch={{0.4,0.0,60.0},{0.9,135.0,0.0}};
	double[][]tr={{-180.0,-240.0,-120.0},
		{240.0,-180.0,0.0},{0.0,0.0,120.0}};

	public void init()
	{	app_init(0);
		Container cp=getContentPane();
		cp.setBackground(getBackground());
		cp.setLayout(new FlowLayout(FlowLayout.LEFT));
		for(int i=0;i<str.length;i++)
		{	bt[i]=new JButton(str[i]);
			bt[i].addActionListener(this);
			cp.add(bt[i]);
		}
		T3=new xTurtle3(getGraphics());
	}

	public void actionPerformed(ActionEvent evt)
	{	if(evt.getSource()==bt[0])
			paint2();
		if(evt.getSource()==bt[1])
			repaint();
		if(evt.getSource()==bt[2])
			System.exit(0);
	}

	private void paint2()
	{	T3.set0(CA.x,CA.y+(int)(ky*d),1);
		T3.setpers(rtx,0.0,vpz);
		T3.setshdspectra(7,3);
		double hr=Math.tan(rtx*Math.PI/180)*vpz;
		double dy=((1+ky)*d-hr)/240;
		for(int i=0;i<240;i++)
			T3.frectangle(-(int)(1.25*d),xMath.fint(hr+i*dy),
				(int)(1.25*d),xMath.fint(hr+(i+1)*dy),i);
		T3.fcircle((int)(0.5*d),(int)(0.2*d),(int)(0.2*d),240+6);
		T3.frectangle(-(int)(1.25*d),xMath.fint(hr),
			(int)(1.25*d),-xMath.fint((1-ky)*d),240+8);
		for(int i=0;i<tr.length;i++)
		{	T3.setlp3pers(tr[i][0],0.0,tr[i][1]);
			T3.setaxis(new xPoint3D(0.0,1.0,0.0),
				new xPoint3D(0.0,0.0,1.0),new xPoint3D(1.0,0.0,0.0));
			T3.turnX(tr[i][2]);
			tree(leng0);
		}
	}

	private void tree(double leng)
	{	T3.moveXpers(leng,240+15,(int)(leng/18)+1);
		if(leng>Leng)
		{	for(int i=0;i<branch.length;i++)
			{	T3.turnX(branch[i][1]);
				T3.turnZ(branch[i][2]);
				tree(branch[i][0]*leng);
				T3.turnZ(-branch[i][2]);
				T3.turnX(-branch[i][1]);
			}
		}
		T3.warpXpers(-leng);
	}
}
