void keyboard(unsigned char key, int x, int y)
{
	switch(key)
	{
	case 'r':
		// Add code for reset
		localCarSpeed.z = 0;
		carPosition.x = 3;
		carPosition.z = 45;
		carDirection = 180;
		localCarSpeed.z = 0;
		counter = 0;
		trafficLight.setSignal(NS_Signal);
		trafficLight2.setSignal(WE_Signal);
		trafficLight3.setSignal(WE_Signal);
		trafficLight4.setSignal(NS_Signal);
		worldCarSpeed = computeRotatedVector(localCarSpeed, carDirection);
		break;
	case 'b':
		localCarSpeed.z = 0;
		worldCarSpeed = computeRotatedVector(localCarSpeed, carDirection);
		
		break;
	case 's':
		ScreenShot(winHeight, winWidth);
		break;

	case 27:
		exit(0);
		break;
	}

	glutPostRedisplay();
}
void update()
{  //Calculate direction
	speed = localCarSpeed.z / .02;
	if (carDirection==180)
	{
		carHeading = "N";
	}
	else if (carDirection > 180 && carDirection < 270)
	{
		carHeading = "NW";

	}
	else if (carDirection == 270 )
	{
		carHeading = "W";

	}
	else if (carDirection > 270 && carDirection < 360)
	{
		carHeading = "SW";

	}
	else if (carDirection == 0)
	{
		carHeading = "S";

	}
	else if (carDirection > 0 && carDirection < 90)
	{
		carHeading = "SE";

	}
	else if (carDirection == 90 )
	{
		carHeading = "E";

	}
	else if (carDirection > 90 && carDirection < 180)
	{
		carHeading = "NE";

	}
	// Light controller
	if (counter == 5000)
	{
		if (NS_Signal == Green)
			NS_Signal = Yellow;
		if ( WE_Signal == Green)
		{
			WE_Signal = Yellow;
		}
		trafficLight.setSignal(NS_Signal);
		trafficLight4.setSignal(NS_Signal);
		trafficLight2.setSignal(WE_Signal);
		trafficLight3.setSignal(WE_Signal);

	}
	// Light controller
	if (counter == 6000)
	{
		if (NS_Signal == Red)
			NS_Signal = Green;
		if (WE_Signal == Red)
		{
			WE_Signal = Green;
		}
		if (NS_Signal == Yellow)
			NS_Signal = Red;
		if (WE_Signal == Yellow)
		{
			WE_Signal = Red;
		}
	
		trafficLight.setSignal(NS_Signal);
		trafficLight4.setSignal(NS_Signal);
		trafficLight2.setSignal(WE_Signal);
		trafficLight3.setSignal(WE_Signal);
		counter = 0;

	}

	
	//update carposition and camera
	carPosition.x += worldCarSpeed.x; carPosition.y += worldCarSpeed.y; carPosition.z += worldCarSpeed.z;
	worldCameraOffset = computeRotatedVector(localCameraOffset, carDirection);
	worldCameraOffset.x += carPosition.x; worldCameraOffset.y += carPosition.y; worldCameraOffset.z += carPosition.z;
	
}
void drawScene()
{// covert speed to string
	string speedword = to_string(speed);

	string SpeedPhrase = "Speed: ";
	SpeedPhrase.append(speedword);
	string Direction = "Direction: ";
	Direction.append(carHeading);
	glColor3f(1, 0, 0);
	//print words
	glWindowPos2i((winWidth / 2) -125, winHeight - (sHeight*1.2));
	printString(SpeedPhrase);
	glWindowPos2i((winWidth / 2) + 75, winHeight - (sHeight*1.2));
	printString(Direction);


	// Draw terrain
	glCallList(terrainID);

	glEnable(GL_LIGHTING);
	trafficLight.setMaterials();
	
	/*vector<string> test;
	test=trafficLight.GetMaterialNames();
	for (int i = 0; i < test.size(); i++)
		cout << "name: " << test[i] << endl;*/
	// North-East (NS_Signal)
	glPushMatrix();
	glTranslatef(10, 0, -10.5);
	glScalef(1/3.28/12, 1/3.28/12, 1/3.28/12);
	trafficLight.setSignal(NS_Signal);
	trafficLight.Draw();
	glPopMatrix();
	
	
	glPushMatrix();
	glTranslatef(10, 0, -10);
	glRotatef(-45, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();

	// North-West (WE_Signal)
///board 1
	//glColor3f(1, 1, 0);
	glPushMatrix();
	board.Draw();
	glPopMatrix();
// board 2
	glPushMatrix();
	board2.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(-10, 0, -10.5);
	glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12);
	glRotatef(90, 0, 1, 0);
	trafficLight2.setSignal(WE_Signal);
	trafficLight2.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(-10, 0, -10);
	glRotatef(45, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();
	
	// South-East (WE_Signal)
	glPushMatrix();
	glTranslatef(10, 0, 10);
	glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12);
	glRotatef(-90, 0, 1, 0);
	trafficLight3.setSignal(WE_Signal);
	trafficLight3.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(10, 0, 10.5);
	glRotatef(-135, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();

	// South West(SN_Signal)
	glPushMatrix();
	glTranslatef(-10, 0, 10);
	glScalef(1 / 3.28 / 12, 1 / 3.28 / 12, 1 / 3.28 / 12);
	glRotatef(180, 0, 1, 0);
	trafficLight4.setSignal(NS_Signal);
	trafficLight4.Draw();
	glPopMatrix();

	glPushMatrix();
	glTranslatef(-10, 0, 10.5);
	glRotatef(135, 0, 1, 0);
	glCallList(surveillanceCameraID);
	glPopMatrix();

	// Draw the car.
	glPushMatrix();
	glTranslatef(carPosition.x, carPosition.y, carPosition.z);
	glRotatef(carDirection, 0, 1, 0);
	glCallList(carID);
	glPopMatrix();



	
}