import chess.*;
import java.applet.Applet;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.geom.Point2D;
import javax.swing.JFrame;

/**
 * Robot.java
 *
 * Created on Jun 14, 2007, 6:19:08 PM by jbf
 */
public class Robot extends RunnableApplet {
    
    Sprite draggingSprite;
    
    public void run() {
        
        double angle1=0., angle2=0., angle3=0;
        Point2D.Double l1, l2, l3;
        
        boolean isClamped= false;
        
        final Screen screen= Chess.newScreen(this);
        
        Sprite s0= screen.newSprite( "nrobotPart0.png" );
        s0.setAnchorPosition( 76, 27 );
        
        Sprite s1= screen.newSprite( "nrobotPart1.png" );
        s1.setAnchorPosition( 44,152 );
        l1= new Point2D.Double( 54, 22 );
        
        Sprite s2= screen.newSprite( "nrobotPart2.png" );
        s2.setAnchorPosition( 231,43 );
        l2= new Point2D.Double( 29, 46 );
        
        Sprite s3= screen.newSprite( "nrobotPart3.png" );
        s3.setAnchorPosition( 60, 30 );
        
        s0.setPosition( 400, 400 );
        
        while ( true ) {
            // the position of the ends of part1 and part2
            Point2D.Double p1= new Point2D.Double();
            Point2D.Double p2= new Point2D.Double();
            
            s1.setPosition( 400, 400 );
            s1.setOrientation( angle1 );
            
            s1.getTransform().transform( l1, p1 );
            
            s2.setPosition( p1.getX(), p1.getY() );
            s2.setOrientation( angle1 + angle2 );
            
            s2.getTransform().transform( l2, p2 );
            s3.setPosition( p2.getX(), p2.getY() );
            s3.setOrientation( angle1 + angle2 + angle3 );
            
            if ( screen.keyDown( KeyEvent.VK_RIGHT ) ) {
                angle1+=2;
            }
            if ( screen.keyDown( KeyEvent.VK_LEFT ) ) {
                angle1-= 2;
            }
            
            if ( screen.keyDown( KeyEvent.VK_A ) ) {
                angle2-=2;
            }
            if ( screen.keyDown( KeyEvent.VK_S ) ) {
                angle2+=2;
            }
            
            if ( screen.keyDown( KeyEvent.VK_F ) ) {
                angle3-=2;
            }
            if ( screen.keyDown( KeyEvent.VK_V ) ) {
                angle3+=2;
            }
            
            if ( !isClamped && screen.keyDown( KeyEvent.VK_SPACE ) ) {
                s3.setImage( "nrobotPart3c.png" );
                s3.setAnchorPosition(  63, 38 );
                isClamped= true;
            } else {
                if ( isClamped && ! screen.keyDown( KeyEvent.VK_SPACE ) ) {
                    s3.setImage( "nrobotPart3.png" );
                    s3.setAnchorPosition( 60, 30 );
                    isClamped= false;
                }
            }
            
            Chess.waitForNextFrame( 50 );
        }
        
        
    } //run
    
    
    public static void main( String[] args ) {
        JFrame frame= new JFrame("Robot");
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        Applet applet= new Robot();
        Dimension appletDimension= new Dimension(800,500);
        applet.setMinimumSize( appletDimension );
        applet.setPreferredSize( appletDimension );
        frame.setContentPane(applet);
        frame.pack();
        frame.setVisible(true);
        applet.init();
        applet.start();
    } //main
} //class
