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


#ifndef CHero_h 
#define CHero_h 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#include "CAliveSprite.h" 
#include "CProgressBar.h" 
 
 
//英雄的各种状态 
enum HERO_STATE 
{	 
	HS_FIGHTING = 0,		//一次攻击行为 
	HS_END_FIGHT = 1,		//一次攻击动作结束时 
	HS_GOTO_FIGHT = 2,		//去战斗 
	HS_NORMAL = 3,			//正常状态 
	HS_PICK = 4,			//拾取物品 
	HS_TALKING = 5,			//和NPC对话 
	HS_DEAD = 6,			//死亡 
}; 
 
//英雄技能结构 
struct HERO_SKILL 
{ 
	PSURFACE cardSurface;	//技能卡页面 
	CMagic	*pMagic;		//魔法指针 
	DWORD	 lastTime;		//上次施法时间 
	DWORD	 interval;		//魔法恢复时间 
}; 
 
//////////////////////////////////////////////////////////////////////////////// 
//英雄角色类 
//管理通用资源,移动地图,绘制血条等 
//////////////////////////////////////////////////////////////////////////////// 
class CHero : public CAliveSprite   
{ 
public: 
	CHero(); 
	virtual ~CHero(); 
 
	bool Init(); 
	void Free(); 
	void OnInitLvl(); 
 
	bool LoadHeroRes( HERO_CLASS heroClass ); 
 
	bool UpdateSprite(); 
	void DrawSprite(); 
	void MoveMap(); 
	void DrawBloodBar();				//画英雄血条(屏幕左上角) 
 
	void SetNextDest( const CELL &dest ) 
	{ m_NextDest = dest; } 
 
	void Cure();						//血,魔加满,并去掉所有魔法状态 
	bool AddLife( int add_value );		//加血,生命回复值为add_value 
	bool AddMana( int add_value );		//加魔,魔法回复值为add_value 
	void AddHeroXp( int xp );			//增加英雄经验值 
 
	bool ChangeMoney( int changeValue );		//增加或减少金钱 
	unsigned int GetMoney() {return m_Money;} 
 
	HERO_STATE GetHeroState() { return m_HeroState; } 
	void SetHeroState( HERO_STATE hs ) {m_HeroState = hs;} 
 
	void PickItem( int distance ); 
 
	void ClearItemInfo(); 
	void AddHeroInfo( int index, int value ); 
	void CalcHeroInfo(); 
 
	void ShowHeroInfo(); 
	int  UpdateInfoDlg(); 
	void ChangeInfoDlg() { m_isInfoDlgOpen = ( m_isInfoDlgOpen ? false : true ); } 
	int GetHeroLevel() { return m_pClass->SpriteInfo.m_Level; } 
 
	void ShowControlPanel(); 
	int UpdateControlPanel( int re ); 
 
	void SetCurMagic( int index ); 
	void ClearCurMagic() { m_pMagic = NULL; m_Distance = 1; } 
	bool Spell( CAliveSprite *pTarget, POINT &p ); 
 
	bool IsFighting() { return m_HeroState <= HS_GOTO_FIGHT; } 
 
	void MoveHeroTo( const POINT &to ); 
 
	HERO_CLASS GetHeroClass() { return m_HeroClass; } 
 
	void SetRevival( const char *name ); 
	void GotoRevival(); 
 
	void LoadHero( const char *heroName ); 
	void SaveHero(); 
	void NewHero( const char *heroName, HERO_CLASS heroClass ); 
 
private: 
	EPG_DATA	*	m_HeroEPGArray;	//英雄EPG数组 
	HERO_STATE		m_HeroState;	//英雄状态 
	HERO_CLASS		m_HeroClass;	//英雄职业 
	CELL	m_NextDest;				//下一个目的地(row为-1时表示没有) 
	POINT	m_SpellPoint;			//施法地点 
 
	CPictureGroup *m_cp_pg;			//行动指针cell_pointer的动画 
	int			 m_cp_frame;		//行动指针的帧 
	unsigned int m_cp_last_tick;	//行动指针更新时钟 
 
	unsigned int m_Money;			//金钱 
	unsigned int m_RestPoint;		//剩余点数 
	int			m_NextLvlXp;		//下一级经验 
 
	CProgressBar m_HPBar; 
	CProgressBar m_MPBar; 
	CProgressBar m_SkillBar;		//技能条,显示技能是否恢复 
 
	AS_BASE_INFO			m_ItemBaseInfo;	//物品所增加的属性 
	AS_PLUS_INFO			m_ItemPlusInfo;	// 
 
	char		m_HeroName[32];		//英雄名字 
	char		m_RevivalMapName[32];//复活地点名 
	bool		m_isInfoDlgOpen; 
	PSURFACE	m_InfoSurface;		//属性页面 
	PSURFACE	m_TempSurface;		//临时页面,用于写字 
	PSURFACE	m_GuiSurface;		//控制面板页面 
 
	HERO_SKILL *m_HeroSkillArray; 
	HERO_SKILL *m_pCurSkill; 
}; 
 
#endif