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

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

#include "Entity.h"
#include "../µsprite.h"
#include "../WorldState.h"
#include "eGenerator.h"

#define VELMOVING 		256  //Vitesse dans le mouvement horizontal
#define VELJUMP         512
#define VELJUMPGEYSER   784
#define JUMPMAX         FIX(48)
#define BULLETMAX       16
#define BULLETINT       5
#define BULLETSPEED     3

struct sHeroBullet
{
	int x, y;   //Position de la boulette x)
	int life;   //Vie de la bullet
	int vx, vy; //Vecteur de déplacement
	bool actif;
	sHitBoxRect rect;
	eGenerator* gen;
	u16 angle;
};
   
class eHeroCat : public CEntity
{
   public:
   	eHeroCat();
   	virtual ~eHeroCat();
   	virtual void Draw(int layer);
	   virtual void Update();
	   virtual void Destroy();
	   virtual void Load();
	   virtual void CheckInteractions();
	   
	   void CheckCollisions();
   	
	public:
		CSprite spr;         //Sprite du héros
		//Déplacement
		bool isCanMove;      //Si le joueur peut contrôler le personnage
		bool isCanHMove;     //Si un mouvement horizontal est autorisé (genre aftertouch)
		bool isCanJump;      //Si le joueur peut sauter
		bool isJumping, isFalling; //Définit des états sur le joueur pendant qu'il faute ou qu'il chute
		bool isOnTheFloor, isWasOnTheFloor;   //Si on touche le sol
		bool isOnThePente;   //Si on est sur une pente
		bool isWasOnThePente;//Si on était sur une pente a l'ancienne frame
		bool isCrounch;      //Si on est baissé
		bool isGroundBattle; //On met un coup au sol
		bool decreaseVely;
		bool isJumperColl;
		int velx, vely;      //Vitesse de déplacement
		int maxvely;         //Vitesse max en y
		int jumpH;           //Hauteur du saut 
		int speed;           //Vitesse
		int dontMoveTime;    //Temps ou le perso ne peux plus bouger
		int dontHitTime;     //Temps d'invincibilité du personnage
		int jumpPower;       //Puissance de saut (default = 1)
		int energy;
		int jumpGrav;        //Energie du saut (au debut = à VELJUMP et ensuite elle décroit)
		
		//Vie
		int lives;           //Vies du personnage
			
		//Scrolling/Profondeur
		int distanceX;       //Distance parcourue en X sans s'arrêter   
		int depth;
		
		//Effets
		CSprite landEffect, runEffect;
		bool displayLand, displayRun;
		int displayEffectTimer, displayEffectTimer2;
		
		//Combat
		int comboCoup;         //Coup courant
		int comboNextCoup;     //Prochain coup du combo
		int comboFrameCounter; //Compteur de frames du combo
		
		//Pouvoirs
		CSprite bullet;      //Sprite du bullet
		CSprite sprfx3;      //FX power
		sHeroBullet bullets[BULLETMAX];
		int nextBulletID, bulletInterval;
		
};

#endif
