#include <cmath>
#include <vector>
#include <GL/glut.h>

#include "globale.h"
#include "Temps.h"
#include "CCube.h"
#include "CBloc.h"




/////////////////
//             //
//    / \      //
//   |\ / \    //
//   |\|\ /|   //
//    \|\|/|   //
//      \|/    //
//             //
/////////////////
void CBloc::Create01()
{
	offX = offY = offZ = 0.0f;

	CCube NouvCube(-0.5f, -0.5f, -0.5f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -0.5f;
	LesCubes.push_back(NouvCube);
}



////////////////
//            //
//     / \    //
//    |\ /|   //
//   / \|/|   //
//  |\ /|/    //
//  |\|/|     //
//   \|/      //
//            //
////////////////
void CBloc::Create02()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 1.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -1.0f;
	LesCubes.push_back(NouvCube);
}



/////////////
//         //
//   / \   //
//  |\ /|  //
//  |\|/|  //
//  |\|/|  //
//  |\|/|  //
//   \|/   //
//         //
/////////////
void CBloc::Create03()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 1.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -2.0f;
	LesCubes.push_back(NouvCube);
}



///////////////
//           //
//     / \   //
//    |\ /|  //
//    |\|/|  //
//   / \|/|  //
//  |\ /|/   //
//   \|/     //
//           //
///////////////
void CBloc::Create04()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 1.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -1.0f;
	LesCubes.push_back(NouvCube);
}



/////////////////
//             //
//     / \ \   //
//    |\ /|/|  //
//   / \|/|/   //
//  |\ /|/     //
//   \|/       //
//             //
/////////////////
void CBloc::Create05()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 1.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.0f;
	LesCubes.push_back(NouvCube);
}






///////////////////
//               //
//      / \      //
//    / \ / \    //
//   |\ / \ /|   //
//   |\|\ /|/|   //
//    \|\|/|/    //
//      \|/      //
//               //
///////////////////
void CBloc::Create11()
{
	offX = offY = offZ = 0.0f;

	CCube NouvCube(-0.5f, -0.5f, -0.5f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -0.5f;
	LesCubes.push_back(NouvCube);


	NouvCube.z = 0.5f;
	NouvCube.y = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -0.5f;
	LesCubes.push_back(NouvCube);
}




///////////////////
//               //
//      / \      //
//     |\ / \    //
//    / \|\ /|   //
//   |\ / \|/|   //
//   |\|\ /|/    //
//    \|\|/|     //
//      \|/      //
//               //
///////////////////
void CBloc::Create12()
{
	offX = offY = offZ = 0.0f;

	CCube NouvCube(-0.5f, -0.5f, -1.5f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.y = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = -0.5f;
	LesCubes.push_back(NouvCube);
}



////////////////
//            //
//     / \    //
//   / \ /|   //
//  |\ /|/|   //
//  |\|/|/|   //
//  |\|/|/|   //
//  |\|/|/    //
//   \|/      //
//            //
////////////////
void CBloc::Create13()
{
	offX = offY = offZ = 0.0f;

	CCube NouvCube(0.5f, 0.5f, 1.5f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -1.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 1.5f;
	LesCubes.push_back(NouvCube);
}



//////////////////
//              //
//     / \      //
//    |\ / \    //
//    |\|\ /|   //
//   / \|\|/|   //
//  |\ / \|/|   //
//   \|\ /|/    //
//     \ /      //
//              //
//////////////////
void CBloc::Create14()
{
	offX = offY = offZ = 0.0f;

	CCube NouvCube(0.5f, -0.5f, 1.5f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 1.5f;
	LesCubes.push_back(NouvCube);
}



////////////////////
//                //
//      / \ \     //
//     |\ / \ \   //
//    / \|\ /|/|  //
//   |\ / \|/|/   //
//    \|\ /|/     //
//      \|/       //
//                //
////////////////////
void CBloc::Create15()
{
	offX = offY = offZ = 0.0f;

	CCube NouvCube(0.5f, 0.5f, 0.5f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = -0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.5f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.5f;
	LesCubes.push_back(NouvCube);
}






/////////////////
//             //
//     / \ \   //
//    |\ /|/|  //
//   / \|/ \   //
//  |\ /|\ /   //
//   \|/ \|/   //
//             //
/////////////////
void CBloc::Create20()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 1.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.0f;
	NouvCube.y = 1.0f;
	LesCubes.push_back(NouvCube);
}



/////////////////
//             //
//   / / \ \   //
//  |\|\ /|/|  //
//   / \|/ \   //
//  |\ /|\ /   //
//   \|/|\|/   //
//             //
/////////////////
void CBloc::Create21()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 1.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.z = -1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 0.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = -1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.0f;
	NouvCube.y = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = -1.0f;
	LesCubes.push_back(NouvCube);
}












void CBloc::CreateTemp() { Create21(); }
#define MMM(x) void CBloc::Create##x##() { CreateTemp(); }




/*
void CBloc::CreateTemp()
{
	offX = offY = offZ = 0.5f;

	CCube NouvCube(0.0f, 0.0f, 0.0f, r1, g1, b1, r2, g2, b2);
	LesCubes.push_back(NouvCube);

	NouvCube.x = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.x = 0.0f;
	NouvCube.y = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = 2.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.y = 0.0f;
	NouvCube.z = 1.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 2.0f;
	LesCubes.push_back(NouvCube);

	NouvCube.z = 3.0f;
	LesCubes.push_back(NouvCube);
}
*/

void CBloc::CreatePlan()
{
	offX = offY = offZ = 0.0f;

	for (float k = 0.5f; k < 2; k+=1)
	for (float i = -MAX_X/2 + 0.5f; i < MAX_X/2; i+=1)
		for (float j = -MAX_Y/2 + 0.5f; j < MAX_Y/2; j+=1)
			LesCubes.push_back(CCube(i,j,k,r1,g1,b1,r2,g2,b2));

	LesCubes.push_back(CCube(0.5f, 0.5f, 2.5f, r1,g1,b1,r2,g2,b2));
}


