#ifndef BUDDY_CLASSES_H
#define BUDDY_CLASSES_H

class CBuddy;

#define BC_GULDO		1
#define BC_LAST			2

class CBaseBuddyClass
{
public:
	CBaseBuddyClass ( CBuddy *pBuddy ) : m_pBuddy(pBuddy) {};

	virtual const char *GetSoundDir() = 0;
	virtual int	GetStartSpeed( void ) = 0;
	virtual int GetStartHealth( void ) = 0;
	virtual int GetStartPowerLevel( void ) = 0;
	virtual int KiCost(void) { return 0; };
	virtual CBaseClass *GetAscendedClass(void) {return NULL;}
	virtual BOOL CanDescend(){return false;}
	virtual CBaseClass *GetDescendedClass(void) {return NULL;}
	virtual int GetTransFormPowerLevel(void) = 0;
	virtual float GetTransFromPLMultiplier(void) {return 1;};
//	virtual int Classify( void ) {return PC_BASE;}
	virtual int GetAuraSkin(void ) {return AURA_WHITE_SKIN;}
	virtual const char *GetModelName(void) = 0;
	void SetModel();
	static const char *GetName( int id );
	int GetClassID(){return NORMAL;}
	virtual float GetKiEfficiency( void ) {return 1;}
	virtual BOOL CanTeleportWhileCharging(void){return false;}
	virtual int GetNumBodySlices(void){return 0;}
	virtual int GetMaxKi(void) { return 1000; };
	virtual void GiveAttacks(void) = 0;
	virtual short teleport_percent(void) { return 50; };
	virtual short swoop_percent(void) { return 50; };
	virtual short block_percent(void) { return 50; };
	virtual short jump_percent(void) { return 50; };
	virtual short stopfly_percent(void) { return 50; };


protected:
	CBuddy *m_pBuddy;	
};

class CGuldo: public CBaseBuddyClass
{
public:
	CGuldo(CBuddy *pBuddy) : CBaseBuddyClass(pBuddy) {};

	virtual const char *GetSoundDir() { return "Guldo"; };
	virtual int	GetStartSpeed( void ) { return 180; };
	virtual int GetStartHealth( void ) { return 100; };
	virtual int GetStartPowerLevel( void ) { return 600000; };
	virtual CBaseClass *GetAscendedClass(void) {return NULL;}
	virtual BOOL CanDescend() { return false; }
	virtual CBaseClass *GetDescendedClass(void) {return NULL;}
	virtual int GetTransFormPowerLevel(void) { return 1500000; };
	virtual float GetTransFromPLMultiplier(void) { return 1.5; };
	virtual int GetAuraSkin(void ) { return AURA_WHITE_SKIN; }
	virtual const char *GetModelName(void) { return "guldo"; };
	virtual int GetNumBodySlices(void){return 0;}
	virtual void GiveAttacks(void);
};

#endif