#include "Colision.h"
#include "Objeto.h"
#include "Nave.h"

bool Colision::ColisionObjetos (Objeto * objeto1 , Objeto * objeto2)
{
	int posIniX1=objeto1->getX();
	int posFinX1=posIniX1+objeto1->getW();
	int posIniY1=objeto1->getY();
	int posFinY1=posIniY1+objeto1->getH();
	
	int posIniX2=objeto2->getX();
	int posFinX2=posIniX2+objeto2->getW();
	int posIniY2=objeto2->getY();
	int posFinY2=posIniY2+objeto2->getH();
	
	if (((posIniX2<=posFinX1) && (posIniX2>=posIniX1)) || ((posIniX1<=posFinX2) && (posIniX1>=posIniX2)))
	{
		if (((posIniY2<=posFinY1) && (posIniY2>=posIniY1)) || ((posIniY1<=posFinY2) && (posIniY1>=posIniY2)))
		{
			printf("Colision\n");
			return true;
		}
	}	
	return false;
}

int Colision::ColisionNaveEnemigos(Nave * nave, vector <Enemigo*> vectorEnemigos)
//Devuelve negativo si no hay colision.
//Si hay colision devuelve la posicion del vector.
{
	for (int i=0; i<vectorEnemigos.size(); i++)
	{
			if (ColisionObjetos((Objeto*)nave,(Objeto*)vectorEnemigos[i]))
				return i;
	}		
	return -1;
}

int Colision::ColisionDisparosEnemigos(vector <Enemigo*> vectorEnemigos, vector <Disparo*> vectorDisparos,int * posDisparo)
//Devuelve negativo sino hay colision
//si hay colision devuelve la posicion del enemigo a eliminar
//tambien devuelve en posDisparo la posicion del enemigo que ha impactado en caso de que haya colision
{
	for (int i=0; i<vectorEnemigos.size();i++)
	{
		for (int j=0; j<vectorDisparos.size();j++)
		{
			//printf("Comprobando\n");
			if (ColisionObjetos((Objeto*)vectorEnemigos[i],(Objeto*)vectorDisparos[j]))
			{
				(*posDisparo)=j;
				return i;
			}
		}
	}
	return -1;
}