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