www.pudn.com > GameEngine_src.rar > CMagic.h


// CMagicSprite.h: interface for the CMagicSprite class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#ifndef CMagic_h 
#define CMagic_h 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "CBaseSprite.h" 
#include "CES_CmdPool.h" 
 
class CAliveSprite; 
 
 
//魔法作用范围 
enum MAGIC_AREA 
{ 
	MA_TARGET	= -1, 
	MA_SELF		= 0, 
	MA_CELL_1	= 1, 
	MA_CELL_9	= 9, 
	MA_CELL_25	= 25, 
}; 
 
enum MAGIC_TYPE 
{ 
	MT_TARGET_STATE = 0, 
	MT_SELF_STATE	= 1, 
}; 
 
//////////////////////////////////////////////////////////////////////// 
//MGC文件的文件头 
//////////////////////////////////////////////////////////////////////// 
struct MAGIC_FILE_HEADER 
{ 
	int		mgcFileType;					//MGC 
	int		mgcInterval;					//魔法冷冻时间 
	short	mgcID;							//魔法全局ID 
	short	mgcEffectID;					//动画效果ID 
	short	mgcDistance;					//施法距离 
	short	mgcMana;						//耗用能量 
	short	mgcCmdOnEffect;					//效果脚本偏移(从0开始) 
	short	mgcCmdOnEffect2;				//效果2 
 
	SPRITE_STATE mgcSpellState;				//施法时的状态 
	MAGIC_AREA	 mgcArea;					//魔法作用范围 
 
	char mgcEPGName[32];					//EPG文件名 
	char mgcWAVName[32];					//WAV文件名 
}; 
 
const int MGC_FILE = 'MGC'; 
 
 
////////////////////////////////////////////////////////////////////// 
//魔法类 
////////////////////////////////////////////////////////////////////// 
class CMagic 
{ 
 
public: 
	CMagic(); 
	~CMagic(); 
 
	bool Init( const MAGIC_FILE_HEADER &mfh, char *pES ); 
	bool LoadMagicFile( char *filename ); 
	void Free(); 
 
	void OnHeroSpell( CAliveSprite * pMagician, CAliveSprite * pTarget, const POINT &spellPoint ); 
	void OnHeroEffect( CAliveSprite * pMagician, CAliveSprite * pTarget ); 
 
	void OnSpell( CAliveSprite * pMagician, CAliveSprite * pTarget ); 
	void OnEffect( CAliveSprite * pMagician, CAliveSprite * pTarget ); 
 
	void OnEffect2( CAliveSprite * pMagician, CAliveSprite * pTarget ); 
 
	int GetID() { return m_MagicID; } 
	CPictureGroup *GetMagicEPG() { return &m_MagicEPG; } 
	int GetDistance() { return m_MagicDistance; } 
	int GetMana() { return m_Mana; } 
	int GetInterval() { return m_Interval; } 
	MAGIC_AREA GetMagicArea() { return m_MagicArea; } 
 
	void SetSound( PEASYSOUND sound ) { m_pSound = sound; } 
 
	bool IsTarget() { return m_MagicArea == MA_TARGET; } 
	bool IsSelf() { return m_MagicArea == MA_SELF; } 
 
private: 
	int				m_MagicID;				//魔法全局ID,也是文件名 
	int				m_Interval;				//魔法冷冻时间 
	short			m_MagicDistance;		//可施法距离 
	short			m_Mana;					//所耗能量值 
	short			m_CmdOnEffect;			//作用脚本偏移 
	short			m_CmdOnEffect2;			//作用脚本偏移2(仅用于魔法精灵) 
 
	SPRITE_STATE	m_SpellState;			//施法精灵的状态 
	MAGIC_AREA		m_MagicArea;			//施法作用范围 
	POINT			m_SpellPoint; 
	CPictureGroup   m_MagicEPG;				//魔法精灵动画 
	PEASYSOUND		m_pSound;				//施放魔法时的声音 
	CES_CmdPool		m_CmdPool;				//魔法脚本 
}; 
 
 
////////////////////////////////////////////////////////////////////// 
//魔法精灵类 
////////////////////////////////////////////////////////////////////// 
class CMagicSprite : public CBaseSprite   
{ 
 
public: 
	CMagicSprite(); 
	~CMagicSprite(); 
 
	bool UpdateSprite(); 
	void DrawSprite(); 
 
	bool Init( CMagic *pMagic, const POINT &base, int direction, SPRITE_TYPE SpriteType, int life, 
				CAliveSprite *magician, CAliveSprite *target, int damage ); 
 
private: 
	void EffectHelp(); 
 
private: 
	int		m_CurFrame;			//当前PG动画帧 
	int		m_damage;			//魔法伤害 
	int		m_direction;		//方向 
	unsigned int m_EndTime;		 
	CMagic		  * m_pMagic;	//所属魔法指针 
	CAliveSprite   *m_pMagician;//施法者指针 
	CAliveSprite *  m_pTarget;	//地上魔法跟踪目标指针 
}; 
 
 
#endif