/*****************************/
/* Inside The Machine - MKS  */
/*****************************/

#include "eWater.h"
#include "../WorldManager.h"

eWater::eWater()
{
	real = true;
	toDelete = false;
	stat = false;
	type = 5;
   genre = 0;
}
   	
eWater::~eWater()
{
   
}

void eWater::Load()
{
   //Calcul de la largeur une partie
   largeur = w/def;
   bootNumber = 0;
   actif = false;
   //On génère la géométrie verticale de l'eau
   for(int k = 0; k < def; k++)
   {
      //On régle tout les y a 0
   	pointsy[k] = 0;
   	psens[k] = true;
   	pboot[k] = false;
	}
	movh = FIX(movh);
	
	//Renseignement de l'hitbox
	rect.x1 = 0, rect.y1 = 0;
	rect.x2 = w+largeur, rect.y2 = h;
}
   
void eWater::Draw(int layer)
{
   //On affiche la géométrie
   if(actif && layer == 1)
   {
      //On dessiner un quad nom-texture
	   ulDisableTexture();
	   
	   //Sauvegarde de l'ancienne profondeur
	   /*int oldDepth = ulGetDepth(); 
		ulSetDepth(worldMan->depthBackgroundLevel);*/
		
		//On affiche la première couche d'eau
	   /*ulVertexBegin(GL_QUAD_STRIP);
		ulVertexColor(tint);
	   for(int k = 0; k < def; k++)
	   {
		   ulVertexXY(x_screen + largeur*k, y_screen + UNFIX(pointsy[k]));
		   ulVertexXY(x_screen + largeur*k, y_screen + h);
		   ulVertexXY(x_screen + largeur*(k+1), y_screen + UNFIX(pointsy[k]));
		   ulVertexXY(x_screen + largeur*(k+1), y_screen + h);
		}
		ulVertexXY(x_screen + largeur*def, y_screen + UNFIX(pointsy[def-1]));
		ulVertexXY(x_screen + largeur*def, y_screen + h);
		ulVertexXY(x_screen + largeur*(def+1), y_screen + UNFIX(pointsy[def-1]));
		ulVertexXY(x_screen + largeur*(def+1), y_screen + h);
		ulVertexEnd();
		ulVertexHandleDepth();
		
		//On enregitre la profondeur Z
		depthMiddleWater = worldMan->depthBackgroundLevel;
		ulVertexHandleDepth();*/
		
		//On affiche la seconde couche d'eau
		ulSetAlpha(UL_FX_ALPHA, 20, 4);
		
		ulVertexBegin(GL_QUAD_STRIP);
		for(int k = 0; k < def; k++)
	   {
	      ulVertexColor(tint);
		   ulVertexXY(x_screen + largeur*k, y_screen + UNFIX(pointsy[k]));
		   ulVertexColor(tint2);
		   ulVertexXY(x_screen + largeur*k, y_screen + h);
		   ulVertexColor(tint);
		   ulVertexXY(x_screen + largeur*(k+1), y_screen + UNFIX(pointsy[k]));
		   ulVertexColor(tint2);
		   ulVertexXY(x_screen + largeur*(k+1), y_screen + h);
		}
		ulVertexColor(tint);
		ulVertexXY(x_screen + largeur*def, y_screen + UNFIX(pointsy[def-1]));
		ulVertexColor(tint2);
		ulVertexXY(x_screen + largeur*def, y_screen + h);
		ulVertexColor(tint);
		ulVertexXY(x_screen + largeur*(def+1), y_screen + UNFIX(pointsy[def-1]));
		ulVertexColor(tint2);
		ulVertexXY(x_screen + largeur*(def+1), y_screen + h);
		
	   //Retour à la profondeur d'origine
	   ulVertexEnd();
	   ulVertexHandleDepth();
	   
	   ulSetAlpha(UL_FX_DEFAULT, 0, 4);
	   
		//ulSetDepth(oldDepth);
	}	
}
   
void eWater::Update()
{
   //Calcul de la position écran de l'entité
   x_screen = x - worldMan->curLevel->map->scrollX;
	y_screen = y - worldMan->curLevel->map->scrollY;
	
	//On vérifie si l'eau est à l'écran
   if(x_screen < (0-w-largeur) || x_screen > (256+w+largeur) || y_screen < (0-h) || y_screen > (256+h))
   	actif = false;
   else
   	actif = true;
   
   if(actif)
   {
	   //On fait bouger la surface
	   for(int k = 0; k < def; k++)
	   {
	      //On démarre
	      if(bootNumber == k)
	      	pboot[k] = true;
	      
	      //On vérifie si l'eau est démarrée
	      if(pboot[k])
	      {
		      //On fait bouger l'eau
		      if(psens[k])
					pointsy[k] += speed;
				else
					pointsy[k] -= speed;
				//On change le sens
				if(pointsy[k] >= movh)
					psens[k] = false;
				if(pointsy[k] <= -movh)
					psens[k] = true;
			}		       	
	   }
	   
	   if(bootNumber < def)
			bootNumber++;
	}	
}

void eWater::CheckInteractions()
{
   //On vérifie si l'eau est en collision avec le héros
   bool collide = RectCollision(x, y, &rect, UNFIX(worldMan->hero->x), UNFIX(worldMan->hero->y), &worldMan->hero->rect);
   //Si oui, on applique une fausse antigravité
   if(collide)
   {
		worldMan->hero->vely = 256;
		worldMan->hero->speed = 256;
		//worldMan->hero->depth = depthMiddleWater;
		if(dangerous == 1)
		{
		 	if(worldMan->hero->dontHitTime == -1)
		   {
				worldMan->hero->dontHitTime = 30;
				worldMan->hero->dontMoveTime = 3;
				worldMan->hero->life -= 5;
			}  
		}   
	}
	else
	{
	   worldMan->hero->maxvely = 512;
	   //worldMan->hero->depth = 0;
	}				
}   

void eWater::Destroy()
{
   
}
