/**
 *  The SineWave class draws an oscillating sine wave.
 */

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

public class SineWave extends Turtle
{
    private static int TURTLE_RADIUS = 5;

    /**
     *  Main entry point.
     */
    public void runTurtle()
    {
        setAutoUpdate( false );
        setPenColor( new Color( 34, 200, 128 ) );
        Dimension panelSize = getDisplaySize();
        int scale = 200;
        int middle = panelSize.height / 2;


        while ( true )
        {
            hideTurtle();
            penUp();
            setPosition( 0, middle );
            penDown();
            showTurtle();

            for ( int i = 1; i <= panelSize.width; i++ )
            {
                plotPoint( i, middle + ( int ) ( Math.sin( Math.toRadians( i ) ) * scale ) );
                if ( i % 20 == 0 )
                    updateDisplay();
            }
        }
    }


    /**
     *  Draws the next point
     */
    private void plotPoint( int x, int y )
    {
        setPosition( x, y );
        forward( 1 );
    }


    /**
     *  Override the paintTurtle method to draw the turtle as a ball rather 
     *  than the usual triangle.
     */
    public void paintTurtle( Graphics g )
    {
        Point pt = getPosition();
        g.setColor( getPenColor() );
        g.fillOval( pt.x - TURTLE_RADIUS, pt.y - TURTLE_RADIUS,
                    2 * TURTLE_RADIUS, 2 * TURTLE_RADIUS );
    }

}
