import org.lwjgl.opengl.GL11;
import java.util.Arrays;
import org.lwjgl.opengl.glu.GLU;
import org.lwjgl.opengl.glu.Sphere;
import java.lang.Math;
import java.lang.reflect.Array;

public class Ball
{

	public float locX;
	public float locY;
	public float locZ;
	public float speedX = 0;
	public float speedY = 0;
	float pi = (float) 3.1415926;
	float Vb = 0.1f;
	
	public int collide = 0;
	public float sx = 0;
	public float sy = 0;
	//int firstentry = 1;//fist time enter paddle[i]

	public void reset()
	{
		locX = 350;
		locY = 300;
		locZ = -5;
		speedX = 0;
		speedY = 0;
	}

	public void start()
	{
		float random = (float)Math.random()*pi;
		speedX = (float) (Vb * Math.sin(random));
		speedY = (float) (Vb * Math.cos(random));
		//speedY = Vb;
		//speedX = (float) 0.0001;
	}
	
	//public void checkForCollisions(Paddle paddle[], float angle, float delta)
	public void checkForCollisions(Paddle paddle[])
	{
		if(locY <= 10)
		{
			reset();
		}
		else if(locY >= 590)
		{
			reset();
		}
		if(locX <= 200)
		{
			reset();
		}
		else if(locX >= 600)
		{
			reset();
		}
		int n = Array.getLength(paddle);
		for(int i=0;i<n;i++)
		{
			float dx = paddle[i].locX;
			float dy = paddle[i].locY;
			int d = (int)((locX-dx)*(locX-dx)+(locY-dy)*(locY-dy));
			int d1 = (int)((locX-sx)*(locX-sx)+(locY-sy)*(locY-sy));
			if(d<324 && d1>324)
			{		
				collide = 1;
				//sx=0;
				//sy=0;

				float n0x = (locX-400)/150;
				float n0y = (locY-300)/150;
				
				float nx = -(speedX*n0x+speedY*n0y)*n0x;
				float ny = -(speedX*n0x+speedY*n0y)*n0y;
				
				float Tx = speedX + nx;
				float Ty = speedY + ny;
				
				speedX = 2*Tx - speedX;
				speedY = 2*Ty - speedY;
				
				speedX = (float) ((float)speedX*Vb/Math.sqrt(speedX*speedX+speedY*speedY));
				speedY = (float) ((float)speedY*Vb/Math.sqrt(speedX*speedX+speedY*speedY));
				
				/*float s =0 ;
				float s1 = 0;
				float angle =0;
				
				if (speedX>0&&speedY>=0){s = (float) Math.atan(speedY/speedX);}
				else if (speedX<=0&&speedY>0){s = (float) (Math.atan(speedY/speedX)+pi);System.out.println("s "+s);}
				else if (speedX<0&&speedY<0){s = (float) (Math.atan(speedY/speedX)-pi);}
				else if (speedX>0&&speedY<0){s = (float) (Math.atan(speedY/speedX)+2*pi);}
				
				if (locX>0&&locY>=0){s = (float) Math.atan((locX-400)/(locY-300));}
				else if (locX<=0&&locY>0){s = (float) (Math.atan((locX-400)/(locY-300))+pi);}
				else if (locX<0&&locY<0){s = (float) (Math.atan((locX-400)/(locY-300))-pi);}
				else if (locX>0&&locY<0){s = (float) (Math.atan((locX-400)/(locY-300))+2*pi);}

				s1 = (float) (-2*(angle)+s-pi);
				
				speedX = (float) ((float) Vb*Math.cos(s1));
				speedY = (float) ((float) Vb*Math.sin(s1));*/
				sx = paddle[i].locX;
				sy = paddle[i].locY;
				System.out.println("collide  "+collide);
			}
		}
	}

	public void render()
	{
		GL11.glColor3f(0f, .7f, 0f);
        GL11.glPushMatrix();
        {
        	GL11.glTranslatef(locX, locY, -5);
            renderSphere();
        }
        GL11.glPopMatrix(); 
		locX += speedX;
		locY += speedY;
	}
    public static void renderSphere() {
        Sphere s = new Sphere();       // an LWJGL class for drawing sphere
        s.setOrientation(GLU.GLU_OUTSIDE);  // normals point outwards
        s.setTextureFlag(true);           // generate texture coords
        s.draw(8, 12, 12);              // run GL commands to draw sphere
    }
 
}
