import objectdraw.*;

/*
 * A program to play a very pathetic version of pong.  This
 * version demonstrates a simple active object that drops a 
 * ball down the screen.
 */
public class PatheticPong extends WindowController{

   // position and dimensions of the court
   private static final int COURT_LEFT = 50;
   private static final int COURT_TOP = 50;
   private static final int COURT_HEIGHT = 300;
   private static final int COURT_WIDTH = 250;
   private static final int COURT_RIGHT = COURT_LEFT + COURT_WIDTH;

   // dimensions of the paddle
   private static final int PADDLE_WIDTH = 50;
   private static final int PADDLE_HEIGHT = 20;

   private static final int PADDLE_Y = COURT_TOP + COURT_HEIGHT - PADDLE_HEIGHT - 1;
   
   private FilledRect paddle;
   private FramedRect boundary; // the boundary of the playing area.

   public void begin() {
      // make the playing area
      boundary = new FramedRect(COURT_LEFT, COURT_TOP,
                                COURT_WIDTH, COURT_HEIGHT,
                                canvas);

      // make the paddle
      paddle = new FilledRect(COURT_LEFT + (COURT_WIDTH-PADDLE_WIDTH)/2,
                              COURT_TOP + COURT_HEIGHT - PADDLE_HEIGHT -1,
                              PADDLE_WIDTH, PADDLE_HEIGHT,
                              canvas);
   }

   public void onMouseClick(Location point) {
      // make a new ball when the player clicks
      new FallingBall(canvas);
   }

   public void onMouseMove(Location point) {
       
       if (point.getX() < COURT_LEFT) {
            // place paddle at left edge of the court
            paddle.moveTo(COURT_LEFT, PADDLE_Y);
        } else if (point.getX() + PADDLE_WIDTH > COURT_RIGHT) {
            // place paddle at right edge of the court
            paddle.moveTo(COURT_RIGHT - PADDLE_WIDTH, PADDLE_Y);
        } else {
            // keep the edge of the paddle lined up with the mouse
            paddle.moveTo(point.getX(), PADDLE_Y);
        }
   }

}


