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

//Hero cat entity File
#ifndef _EGENERATOR_H
#define _EGENERATOR_H

//Includes
#include "Entity.h"
#include "../µsprite.h"

//Defines
#define MAX_PARTICULES         32
	//Textures
#define PART_TEX_BALL           0
#define PART_TEX_SMOKE          1
#define PART_TEX_BULLES         2
	//End Methods
#define END_METHOD_SCALE        0
#define END_METHOD_FADE         1
#define END_METHOD_SCALEFADE    2
//#define END_METHOD_UNSCALE     1
//#define END_METHOD_UNSCALEFADE 4

//Structures
struct esParticule
{
	bool actif;   //Définit si la particule est active
	s32 x, y;     //Position en x et y de la particule dans le monde (fixpt)
	s16 vx, vy;   //Vecteur vitesse de la particule (fixpt)
	s32 life;     //Vie de la particule
	u32 fade;     //Vitesse de disparition de la particule
	int color;    //Couleur de la particule
};
   
//Paramètres du générateur de particules
// TYPE : 0-Tex
// p1 et p2 : Vecteur vitesse
// Autres : texture number couleur couleur2 taille fade range_x range_y boot_freq imp_freq end_method gravity

class eGenerator : public CEntity
{
   public:
   	eGenerator();
   	virtual ~eGenerator();
   	virtual void Draw(int layer);
	   virtual void Update();
	   virtual void Destroy();
	   virtual void Load();
	   virtual void CheckInteractions();
	   
	public:
	   esParticule particules[MAX_PARTICULES];   //Tableau de particules
	   int vx, vy;   		  //Vecteur vitesse du generateur
	   int g;              //Gravité
	   int texture;  		  //Texture
	   int number;   		  //Nombre de particules
	   int color, color2;  //Couleurs possibles des particules
		int taille;   		  //Taille
		int fade;     		  //Vitesse de disparition de la particule
		int rangex, rangey; //Rayon de dispertion de la particule
		int bootFreq, impFreq; //Fréquences d'apparition ( démarrage et impuretés )
		int endMethod;      //Methode de disparition de la particule
		
		int life;           //Vie max d'une particule
		CSprite img;        //Texture du générateur
		int curBootFreq, curImpFreq; //Fréquences courantes
		bool isNewPartAccepted; //Définit si on peut accepter de new particules sur cette frame
};
#endif
