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