/* @(#)Methods.java   12 September 2006 */

/* Useful imports */

import edu.neu.ccs.*;
import edu.neu.ccs.gui.*;
import edu.neu.ccs.codec.*;
import edu.neu.ccs.console.*;
import edu.neu.ccs.filter.*;
import edu.neu.ccs.jpf.*;
import edu.neu.ccs.parser.*;
import edu.neu.ccs.pedagogy.*;
import edu.neu.ccs.quick.*;
import edu.neu.ccs.util.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.font.*;
import java.awt.image.*;
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import java.math.*;
import java.beans.*;
import java.lang.reflect.*;
import java.net.URL;
import java.util.regex.*;
import java.text.ParseException;

/** The sample starter class for Java Power Framework. */
public class Methods extends JPF 
{
    
    public static void main(String[] args) { 
        
        new Methods().InitWindow();
    }
    
    
    Shape circle = new XCircle(200, 200, 20);
    
    ShapePaintable paintable =
        new ShapePaintable(circle, PaintMode.FILL, Colors.red);
    
    
    void InitWindow() {
        window.clearSequence();        
        window.addPaintable(paintable);
        window.repaint();
    }
    
    
    boolean moving = false;
    
    int JUMP = 5;
    
    int DELAY = 20;
    
    
    void move() {
        if(moving)
            return;
        
        moving = true;
        
        int jump = JUMP;
        
        int delay = DELAY;
        
        int steps = 200 / jump;
        
        for (int i = 0; i < steps; i++) {
            paintable.move(0, -jump);
            window.repaint();
            
            JPTUtilities.pauseThread(delay);
        }
        
        jump = -jump;
        
        for (int i = 0; i < steps; i++) {
            paintable.move(0, -jump);
            window.repaint();
            
            JPTUtilities.pauseThread(delay);
        }
        
        moving = false;
    }
    
    
    SimpleAction moveAction =
        new SimpleAction("Move Ball") {
            public void perform() { move(); }
    };
    
    
    ThreadedAction threadedMoveAction =
        new ThreadedAction(moveAction);
    
    
    public void MoveBall() {
        threadedMoveAction.actionPerformed(null);
    }
    
}
