/**
 *  ShapeMakingTurtle draws a simple picture out of a couple of different 
 *  shapes.
 */

import java.awt.*;
import javax.swing.*;
import com.otherwise.jurtle.*;

public class ShapeMakingTurtle extends Turtle
{

    /**
     *  Main entry point.
     */
    public void runTurtle()
    {
        setAutoUpdate( false );
        penUp();
        backward( 200 );
        left( 90 );
        forward( 100 );
        penDown();

        setPenWidth( 2 );

        setPenColor( Color.red );
        drawSquare( 200 );

        penUp();
        setHeading( 0 );
        forward( 200 );
        left( 90 );
        forward( 100 );
        penDown();

        setPenColor( Color.blue );
        drawTriangle( 200 );

        setAutoUpdatePause( 0 );
        setPenColor( Color.green );
        drawCircle( 1 );
        hideTurtle();
    }

    /**
     *  Draws a polygon with numSide sides each with the specified length.
     */
    private void drawPolygon ( int length, int numSides )
    {
        int myAngle = 360 / numSides;
        setHeading( 90 );
        penDown();

        int counter = 0;
        int updateCnt = 0;
        while ( counter < numSides )
        {
            forward( length );
            left( myAngle );
            counter++;
            updateCnt++;
            if ( updateCnt > numSides / 36 )
            {
                updateDisplay();
                pause( 200 );
                updateCnt = 0;
            }
        }
        penUp();
        forward( length / 2 );
    }


    /**
     *  Draws a square by calling drawPolygon and specifying 4 sides.
     */
    private void drawSquare ( int squareLength )
    {
        drawPolygon ( squareLength, 4 );
    }


    /**
     *  Draws a triangle by calling drawPolygon and specifying 3 sides.
     */
    private void drawTriangle ( int triangleLength )
    {
        drawPolygon ( triangleLength, 3 );
    }

    /**
     *  Draws a circle by calling drawPolygon and specifying 360 sides.
     */
    private void drawCircle ( int segLength )
    {
        drawPolygon ( segLength, 360 );
    }

}
