#ifndef GLUTWINDOW
 #define GLUTWINDOW

#include "Starter.h"
#include "..\\GLTools\\GLTools.h"


//*** *** *** *** *** *** **//
// Global in project object //
CStarter starter;


// OnPaint
void  OnPaint() {

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glPushMatrix();
	
	gltApplyCameraTransform(&starter.Heap.frame);
	// Draw
	starter.Draw();

	glPopMatrix();
	glutSwapBuffers();

	//glutPostRedisplay();
};


// OnSpecialKey
void OnSpecialKey(int a,int b,int c)
{
	switch (a) {
		case GLUT_KEY_UP    : gltMoveFrameForward(&starter.Heap.frame,  0.1f); break;
		case GLUT_KEY_DOWN  : gltMoveFrameForward(&starter.Heap.frame, -0.1f); break;
		case GLUT_KEY_LEFT  : gltRotateFrameLocalY(&starter.Heap.frame, 0.01f); break;
		case GLUT_KEY_RIGHT : gltRotateFrameLocalY(&starter.Heap.frame,-0.01f); break;
	}

	glutPostRedisplay();     
}


// OnKey
void OnKeyboard(unsigned char k1,int k2,int k3)
{	
	if (k1 == 27) {
		glutDestroyWindow(1);
		exit(0);
	}
}


// OnResize
void OnResize(int width, int height)
{
	glViewport ( 0, 0, width, height );

	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective (45.0, (double) width / (double) height, 0.001, 1000);
	
	glMatrixMode (GL_MODELVIEW);
	glLoadIdentity();
}


// OnMotion
void OnMotion(int x, int y)
{
	static int Y = 0;
	
	int ty = y - Y;
	if (ty > 0) 
		gltMoveFrameUp(&starter.Heap.frame, 0.05);
	else
		gltMoveFrameUp(&starter.Heap.frame, -0.05);
	Y = y;
		
	glutPostRedisplay();
}


// Main Window Function
void GlutWindow()
{
	int argc = 1;
	char *argv[] = {"0", "0"}; 
	glutInit(&argc, argv);
	glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH );

	glutInitWindowPosition(400, 400);
	glutInitWindowSize(640, 480);
	glutCreateWindow("MG");
	
	glutKeyboardFunc( OnKeyboard );
	glutSpecialFunc( OnSpecialKey );
	glutMotionFunc( OnMotion );

	glutReshapeFunc( OnResize );
	glutDisplayFunc( OnPaint );
	
	//glutSetCursor(GLUT_CURSOR_NONE);

	//glutFullScreen();

	starter.Init();
	
	glutMainLoop();
};


#endif

 