#include <cmath>
#include <list>
#include <vector>

#include "globale.h"
#include "Temps.h"
#include "CCube.h"
#include "CBloc.h"
#include "CVector3.h"
#include "CCamera.h"
#include "CJeu.h"




// Fonction qui retourne la direction dans laquelle on regarde

type_direction GetDirLookAt(void)
{
	float x = gCamera.Position.x - gCamera.Observation.x;
	float y = gCamera.Position.y - gCamera.Observation.y;

	if (abs(x) < abs(y))
	{
		if (y < 0)
			return AVANT;
		else
			return ARRIERE;
	}
	else
	{
		if (x < 0)
			return DROITE;
		else
			return GAUCHE;
	}
}




// Amorce la rotation d'un bloc dans une direction

void Rotation(type_direction Direction)
{
	if (Direction == ANTIHORAIRE)
		gJeu.Bloc.BeginRotation(0, 0, 1);
	else if (Direction == HORAIRE)
		gJeu.Bloc.BeginRotation(0, 0, -1);
	else
	{
		type_direction LaDirection = type_direction( (Direction + GetDirLookAt()) % 4);

		switch (LaDirection)
		{
		case AVANT : gJeu.Bloc.BeginRotation(-1, 0, 0); break;
		case DROITE : gJeu.Bloc.BeginRotation(0, 1, 0); break;
		case ARRIERE : gJeu.Bloc.BeginRotation(1, 0, 0); break;
		case GAUCHE : gJeu.Bloc.BeginRotation(0, -1, 0); break;
		}
	}
}




// Amorce la translation d'un bloc dans une direction

void Translation(type_direction Direction)
{
	gJeu.Bloc.BeginTranslation(type_direction( (Direction + GetDirLookAt()) % 4));
}
