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


 
#ifndef CSpriteFactory_h 
#define CSpriteFactory_h 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
 
#include "CPool.h" 
#include "CDynamicArray.h" 
#include "CAliveSprite.h" 
#include "CNpc.h" 
#include "Struct.h" 
#include "CEPKFile.h" 
#include  
#include  
 
using std::string; 
 
//怪物信息 
struct MONSTER_INFO 
{ 
	union  
	{ 
		char siFileName[32];		//怪物的SI文件名 
		struct	 
		{ 
			unsigned int LastTick;	//上一次此类怪物的刷出时间 
			int	NumMonster;			//当前怪物量			 
		}; 
	}; 
 
	unsigned int Interval;			//刷怪的时间间隔 
	int		MaxNum;					//刷怪最大数量 
}; 
 
//npc 信息 
struct NPC_INFO 
{ 
	char siFileName[32];			//npc的SI文件名 
	POINT BasePoint;				//在地图中的基点坐标 
}; 
 
////////////////////////////////////////////////////////////////////////// 
//精灵对象工厂,负责创建精灵,销毁精灵 
//包括:NPC,地上怪物,空中怪物,各种魔法,地面物品等, 
// 
//精灵销毁时,向工厂发出信息,然后工厂响应 
////////////////////////////////////////////////////////////////////////// 
class CSpriteFactory   
{ 
public: 
	CSpriteFactory(); 
	~CSpriteFactory(); 
 
	bool Init(); 
	void Free(); 
 
	void OnFreeLvl(); 
	void OnLoadMap( FILE *fp, int NumNpc, int NumMonster ); 
	bool OnLoadLvl(); 
	bool OnLoadingLvl(); 
	void OnInitLvl(); 
 
	int GetNumEPG() { return m_EPGNameArray.GetLength(); } 
 
	void CreateNpc(); 
	void CreateMonster();			//随机的产生地面怪物 
	void DeleteMonster( CAliveSprite *monster ); 
 
	void DrawBloodBar( int x, int y, int hp, int max_hp, PSURFACE nameSurf ); 
 
private: 
	void LoadSIHelp( unsigned char *buf ); 
	void InitClassHelp( CDynamicArray &classArray ); 
	void LoadTmp(); 
	void SaveTmp(); 
 
private: 
	CPool				m_MonsterPool;			//怪物池 
	CDynamicArray	m_MonsterClassArray;	//怪物种类数组 
	CDynamicArray		m_MonsterInfoArray; 
 
	CDynamicArray				m_NpcArray;				//npc对象数组 
	CDynamicArray	m_NpcClassArray; 
	CDynamicArray			m_NpcInfoArray;			//仅在载入中使用 
 
 
	CDynamicArray			m_EPGNameArray;		//epg文件名数组,仅在载入中用 
	CDynamicArray			m_EPGDataArray;		//怪物与NPC的EPG数组 
 
	int				m_IndexEPGLoading;					//当前要载入的EPG索引 
 
	int				m_MonsterCreateInterval;			//每次刷怪的时间间隔 
	int				m_MaxNumOfMonster;					//最大怪物数量 
 
	CELL			m_LastCell;							//上次刷怪的位置 
	unsigned int	m_LastTick;							//上次刷怪时间 
 
	PSURFACE		m_BloodBarSurface1;					//血条页面1 
	PSURFACE		m_BloodBarSurface2;					//血条页面2	 
	int				m_BloodBarWidth;					//血条页面宽度 
	int				m_BloodBarHeight;					//血条页面高度 
	CEPKFile	  *	m_pEPK; 
}; 
 
#endif