/**
 *  This turtle draws a pretty picture out of a series of polygons.
 */

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

public class MakePolygons extends Turtle
{

    /**
     *  Main entry point.  First draws a crosshair pattern on the display and
     *  then repeatedly calls drawPoly with a series of different parameters.
     */
    public void runTurtle()
    {
        setAutoUpdate( false );
        Dimension screen = getDisplaySize();
        setPenColor( Color.black );
        // Draw the crosshairs.
        drawLine( 0, screen.height / 2, screen.width, screen.height / 2 );
        drawLine( screen.width / 2, 0, screen.width / 2, screen.height );
        drawLine( screen.width / 4, screen.height / 4, screen.width * 3 / 4, screen.height * 3 / 4 );
        drawLine( screen.width / 4, screen.height * 3 / 4, screen.width * 3 / 4, screen.height * 1 / 4 );
        center();
        setPenWidth( 2 );

        for ( int length = 30, sides = 3; sides <= 20; length++, sides++ )
        {
            setPenColor( Color.getHSBColor( sides / 10.0f, 1.0f, 1.0f ) );
            drawPoly( length, sides, 0 );
            drawPoly( length, sides, 180 );
            drawPoly( length, sides, 90 );
            drawPoly( length, sides, 270 );
        }
    }


    /**
     *  Draws an individual polygon with the specified parameters.
     */
    public void drawPoly( int sideLength, int numberOfSides, int heading )
    {
        int counter;
        int insideAngle;

        counter = 1;
        insideAngle = 360 / numberOfSides;
        setHeading( heading + 90 );
        backward( sideLength / 2 );

        while ( counter <= numberOfSides )
        {
            forward ( sideLength );
            left( insideAngle );

            counter = counter + 1;
        }

        center();
        setHeading( 0 );
        updateDisplay();
        pause( 1 );

    }

    /**
     *  Draws a line from (x1, y1) to (x2, y2).
     */
    public void drawLine( int x1, int y1, int x2, int y2 )
    {
        penUp();
        setPosition( x1, y1 );
        penDown();
        setPosition( x2, y2 );
    }
}
