import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
/**
 * Write a description of class ball here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Ball extends Actor
{
    private int vSpeed=5;
    private int hSpeed=5;
    private Score1 score1;
    private Score2 score2;
    public Paddle paddle1;
    public Paddle2 paddle2;
    /**
     * Set speed of the ball.
     */
    public Ball(Score1 pointScore1, Score2 pointScore2, Paddle paddle1, Paddle2 paddle2)
    {
        score1 = pointScore1;
        score2 = pointScore2;
        paddle1 = paddle1;
        paddle2 = paddle2;
    }
    /** 
     * Do whatever a ball does.
     */
    public void act()
    {
        move();
        if (checkLeft() == true) {
            score1.add(1);    
            setLocation(getWorld().getWidth()/2, Greenfoot.getRandomNumber(getWorld().getHeight()));
            resetPaddle();
            Greenfoot.delay(25);
        }
        if (checkRight() == true) {
            score2.add(1);    
            setLocation(getWorld().getWidth()/2, Greenfoot.getRandomNumber(getWorld().getHeight()));
            resetPaddle();
            Greenfoot.delay(25);
        }
    }
    /**
     * Make the ball move.
     */
    public void move()
    {
        setLocation( getX() + hSpeed, getY() + vSpeed );
        if (checkTop() == true) {
            vSpeed = vSpeed * -1;
        }
        if (checkBottom() == true) {
            vSpeed = vSpeed * -1;
        }
        if (checkPaddle() == true) {
            hSpeed = hSpeed * -1;
        }
        if (checkPaddle2() == true) {
            hSpeed = hSpeed * -1;
        }
    }
    public void resetPaddle()
    {
        paddle1.setLocation(575, 200);
        paddle2.setLocation(575, 200);
    }
    /**
     * Check to see if the ball has reached the left side.
     */
    public boolean checkLeft()
    {
        int margin = getImage().getWidth()/2;
        if (getX()-margin < 0){
            return true;
        }
        return false;
    }
    /**
     * Check to see if the ball has reached the right side.
     */
    public boolean checkRight()
    {
        int margin = getImage().getWidth()/2;
        if (getX()+margin > getWorld().getWidth()){
            return true;
        }
        return false;
    }
    /**
     * Check to see if the ball has reached the top.
     */
    public boolean checkTop()
    {
        int margin = getImage().getWidth()/2;
        if (getY()-margin < 0){
            return true;
        }
        return false;
    }
    /**
     * Check to see if the ball has reached the bottom.
     */
    public boolean checkBottom()
    {
        int margin = getImage().getWidth()/2;
        if (getY()+margin > getWorld().getHeight()){
            return true;
        }
        return false;
    }
    /**
     * Check to see if the the ball has hit a paddle.
     * If true, bounce off the paddle.
     */
    public boolean checkPaddle()
    {
        int margin = getImage().getWidth()/2;
        if ( getOneObjectAtOffset(0,0,Paddle.class ) !=null) {
            return true;
        }
        return false;
    }
    /**
     * Check to see if the the ball has hit a paddle.
     * If true, bounce off the paddle.
     */
    public boolean checkPaddle2()
    {
        if ( getOneObjectAtOffset(0,0,Paddle2.class ) !=null) {
            return true;
        }
        return false;
    }
} 
   
             
          
        
