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