#include <gl/glut.h>
#include <math.h>
#include <stdio.h>
#define PI 3.1415926535898

void MyCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
	GLint i;
	GLdouble theta;
	GLint circle_points=800;

	glBegin(GL_POLYGON);
	for(i=0; i<circle_points; i++)
		{
			theta = 2*PI*i/circle_points;
			glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
		}
	glEnd();
}

void HalfCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
	GLint i;
	GLdouble theta;
	GLint circle_points=800;

	glBegin(GL_POLYGON);
	for(i=0; i<circle_points; i++)
		{
			theta = PI*i/circle_points;
			glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
		}
	glEnd();
}

void SmileCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
	GLint i;
	GLdouble theta;
	GLint circle_points=800;

	glBegin(GL_POLYGON);
	for(i=0; i<circle_points; i++)
		{
			theta = (PI*i/circle_points)*(-1);
			glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
		}
	glEnd();
}

void LineSmileCircle2f(GLfloat centerx, GLfloat centery, GLfloat radius)
{
	GLint i;
	GLdouble theta;
	GLint circle_points=800;

	glBegin(GL_LINE_LOOP);
	for(i=0; i<circle_points; i++)
		{
			theta = (PI*i/circle_points)*(-1);
			glVertex2f(centerx+radius*cos(theta), centery+radius*sin(theta));
		}
	glEnd();
}

void init(void)
{
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0,1000,0,600);

	glEnable(GL_POINT_SMOOTH);
	glEnable(GL_POLYGON_SMOOTH);
	glEnable(GL_LINE_SMOOTH);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

void display(void)
{
	glClearColor(1.0,0.74,0.74,1.0);
	glClear(GL_COLOR_BUFFER_BIT);

	////////* Akiko *////////
	// Hair Back Akiko
	glColor3f(0.0,0.0,0.0);
	glBegin(GL_TRIANGLES);
		glVertex2f(869,377);
		glVertex2f(890,250);
		glVertex2f(800,250);

		glVertex2f(651,377);
		glVertex2f(630,250);
		glVertex2f(720,250);
	glEnd();

	// Body Akiko
	glColor3f(0.66,0.33,0.84);
	MyCircle2f(760,140,90);
	MyCircle2f(760,155,90);

	// Sabai
	glBegin(GL_TRIANGLE_FAN);
		glColor3f(0.26,0.6,0.14);
		glVertex2f(700,125);
		glVertex2f(790,240);
		glVertex2f(810,229);
		glVertex2f(820,220);
		glColor3f(0.1,0.4,0.3);
		glVertex2f(830,210);
		glVertex2f(840,195);
	glEnd();

	// belt
	glBegin(GL_QUAD_STRIP);
		glColor3f(0.68,0.2,0.34);
		glVertex2f(670,165);
		glVertex2f(670,130);
		glVertex2f(675,160);
		glVertex2f(675,125);
		glVertex2f(700,155);
		glVertex2f(700,120);
		glVertex2f(710,153);
		glVertex2f(710,119);
		glVertex2f(720,150);
		glVertex2f(720,117);
		glVertex2f(750,148);
		glVertex2f(750,115);
		glVertex2f(760,147);
		glVertex2f(760,114);
		glVertex2f(780,148);
		glVertex2f(780,115);
		glVertex2f(790,150);
		glVertex2f(790,117);
		glVertex2f(800,151);
		glVertex2f(800,118);
		glVertex2f(810,153);
		glVertex2f(810,120);
		glVertex2f(820,155);
		glVertex2f(820,122);
		glVertex2f(830,158);
		glVertex2f(830,125);
		glVertex2f(840,161);
		glVertex2f(840,128);
		glVertex2f(850,165);
		glVertex2f(850,130);
	glEnd();

	// Neck
	glBegin(GL_TRIANGLES);
		glVertex2f(780,240);
		glVertex2f(760,202);
		glVertex2f(740,240);
	glEnd();

	/*
	// Hands
	glColor3f(0.8,0.6,0.4);
	MyCircle2f(740,147,25);
	MyCircle2f(790,147,25);
	//MyCircle2f(780,180,5);
	glBegin(GL_QUADS);
		glVertex2f(727,163);
		glVertex2f(717,189);
		glVertex2f(724,193);
		glVertex2f(736,169);

		glVertex2f(737,169);
		glVertex2f(748,193);
		glVertex2f(755,189);
		glVertex2f(746,163);
	glEnd();*/

	// Face Akiko
	glColor3f(0.8,0.6,0.4);
	MyCircle2f(760,340,100);

	// Mouth
	glColor3f(0.84,0.1,0.2);
	//glColor3f(0.7,0.1,0.1);
	SmileCircle2f(760,280,20);

	// Glasses
	glColor3f(1.0,1.0,1.0);
	LineSmileCircle2f(720,320,30);
	LineSmileCircle2f(800,320,30);
	glBegin(GL_LINES);
		glVertex2f(750,320);
		glVertex2f(770,320);
		glVertex2f(745,315);
		glVertex2f(775,315);
	glEnd();

	// Eye
	glPointSize(30.0);
	glColor3f(0.2,0.2,0.2);
	glBegin(GL_POINTS);
		glVertex2f(720,310);
		glVertex2f(800,310);
	glEnd();
	HalfCircle2f(720,330,10);
	HalfCircle2f(800,330,10);

	// Hair above Akiko
	glColor3f(0.0,0.0,0.0);
	HalfCircle2f(760,360,110);
	// Hair beside
	glRectf(860,360,830,220);
	glRectf(660,365,690,220);


	////////* ROBOTY SAY HI!!! *////////

	// Conversation
	glColor3f(0.6,0.2,0.2);
	glBegin(GL_TRIANGLES);
		glVertex2f(355,430);
		glVertex2f(385,370);
		glVertex2f(300,360);
	glEnd();
	MyCircle2f(390,400,65);
	MyCircle2f(405,400,65);
	glColor3f(0.6,0.2,0.2);
	MyCircle2f(415,400,65);

	glLineWidth(3.0);
	glBegin(GL_LINES);
		glVertex2f(430,475);
		glVertex2f(443,510);
		glVertex2f(460,465);
		glVertex2f(490,490);
		glVertex2f(485,443);
		glVertex2f(520,445);
	glEnd();

	glLineWidth(5.0);
	glColor3f(1.0,1.0,1.0);
	glBegin(GL_LINES);
		glVertex2f(360,415);
		glVertex2f(360,385);

		glVertex2f(375,415);
		glVertex2f(375,385);

		glVertex2f(360,400);
		glVertex2f(375,400);

		glVertex2f(385,414);
		glVertex2f(401,414);

		glVertex2f(385,386);
		glVertex2f(401,386);

		glVertex2f(393,386);
		glVertex2f(393,414);

		// Excite emotion
		glVertex2f(416,395);
		glVertex2f(416,417);

		glVertex2f(430,395);
		glVertex2f(430,417);

		glVertex2f(444,395);
		glVertex2f(444,417);
	glEnd();

	glPointSize(5.0);
	glBegin(GL_POINTS);
		glVertex2f(416,386);
		glVertex2f(430,386);
		glVertex2f(444,386);
	glEnd();

	// Head of roboty
	glBegin(GL_QUADS);
		glColor3f(0.0,0.7,0.537);
		glVertex2f(100,460);
		glVertex2f(270,460);
		glVertex2f(270,260);
		glVertex2f(100,260);
	glEnd();

	// 3 Worry roboty
	glLineWidth(2.0);
	glBegin(GL_LINES);
		glColor3f(1.0,1.0,1.0);
		glVertex2f(110,450);
		glVertex2f(110,396);

		glVertex2f(118,446);
		glVertex2f(118,380);

		glVertex2f(126,449);
		glVertex2f(126,406);
	glEnd();

	// Eye of roboty
	glPointSize(30.0);
	glBegin(GL_POINTS);
		glColor3f(0.0,0.0,0.0);
		glVertex2f(140,370);
		glVertex2f(230,370);
		glColor3f(1.0,1.0,1.0);
		glVertex2f(57,370);
	glEnd();

	// Body of roboty
	glBegin(GL_TRIANGLES);
		glColor3f(0.0,0.7,0.537);
		glVertex2f(80,50);
		glVertex2f(180,330);
		glVertex2f(280,50);
	glEnd();

	// Arm
	glBegin(GL_QUADS);
		//glColor3f(0.0,0.0,0.0);
		glVertex2f(190,270);
		glVertex2f(220,270);
		glVertex2f(255,190);
		glVertex2f(240,170);

		glVertex2f(240,170);
		glVertex2f(300,215);
		glVertex2f(290,230);
		glVertex2f(240,200);
	glEnd();

	glBegin(GL_POLYGON);
	//glBegin(GL_LINE_STRIP);
		//glColor3f(0.0,0.0,0.0);
		glVertex2f(290,230);
		glVertex2f(285,240);
		glVertex2f(295,255);
		glVertex2f(300,250);
		glVertex2f(295,240);
		glVertex2f(320,260);
		glVertex2f(323,255);
		glVertex2f(302,239);
		glVertex2f(327,258);
		glVertex2f(333,236);
		glVertex2f(315,215);
		glVertex2f(300,215);
	glEnd();

	glLineWidth(2.0);
	// Mouth of roboty
	glBegin(GL_LINE_STRIP);
		glColor3f(0.0,0.0,0.0);
		glVertex2f(165,330);
		glVertex2f(165,315);
		glVertex2f(205,315);
		glVertex2f(205,330);
	glEnd();

	// Radar ear
	glBegin(GL_LINE_STRIP);
		glVertex2f(100,350);
		glVertex2f(80,350);
		glVertex2f(80,370);
		glVertex2f(60,370);
	glEnd();

	////////* Background *////////
	glBegin(GL_QUADS);
		glColor3f(0.9,0.59,0.2);
		glVertex2i(0,0);
		glVertex2i(1000,0);
		glVertex2i(1000,50);
		glVertex2i(0,50);
	glEnd();

	glColor3f(1.0,1.0,1.0);
	/*HalfCircle2f(20,50,20);
	HalfCircle2f(60,50,20);
	HalfCircle2f(100,50,20);
	HalfCircle2f(140,50,20);
	HalfCircle2f(180,50,20);
	HalfCircle2f(220,50,20);
	HalfCircle2f(260,50,20);
	HalfCircle2f(300,50,20);
	HalfCircle2f(340,50,20);
	HalfCircle2f(380,50,20);
	HalfCircle2f(420,50,20);
	HalfCircle2f(460,50,20);
	HalfCircle2f(500,50,20);
	HalfCircle2f(540,50,20);
	HalfCircle2f(580,50,20);
	HalfCircle2f(620,50,20);
	HalfCircle2f(660,50,20);
	HalfCircle2f(700,50,20);
	HalfCircle2f(740,50,20);
	HalfCircle2f(780,50,20);
	HalfCircle2f(820,50,20);
	HalfCircle2f(860,50,20);
	HalfCircle2f(900,50,20);
	HalfCircle2f(940,50,20);
	HalfCircle2f(980,50,20);*/
	GLint j;
	for(j=20; j<1000; j+=40){
		HalfCircle2f(j,50,20);
		SmileCircle2f(j,600,20);
	}

	// desk
	glLineWidth(3.0);
	glColor3f(0.2,0.2,0.8);
	glBegin(GL_LINE_LOOP);
		glVertex2f(395,150);
		glVertex2f(555,150);
		glVertex2f(555,145);
		glVertex2f(395,145);
	glEnd();

	glBegin(GL_TRIANGLE_STRIP);
		glColor3f(0.3,0.2,0.9);
		glVertex2f(425,145);
		glVertex2f(445,50);
		glVertex2f(485,145);
		glColor3f(0.22,0.62,0.8);
		glVertex2f(505,50);
		glVertex2f(525,145);
	glEnd();

	glFlush();
}

void reshape(int w, int h)
{
	printf("w=%d h=%d\n", w,h);
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
	gluOrtho2D(0,(w/1000.0)*1000.0,0,(h/600.0)*600.0);
}


int main(int argc,char** argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(1000,600);
	glutInitWindowPosition(150,60);
	glutCreateWindow("53160010_miniProj");
	init();
	glutDisplayFunc(display);
	//glutReshapeFunc(reshape);
	glutMainLoop();
	return 0;
}