96 lines
1.8 KiB
C
96 lines
1.8 KiB
C
|
|
|
|||
|
|
#ifndef Game_Creator_h__
|
|||
|
|
#define Game_Creator_h__
|
|||
|
|
|
|||
|
|
#include "cocos2d.h"
|
|||
|
|
#include <unordered_map>
|
|||
|
|
#include "GameFrameBase.h"
|
|||
|
|
#include "CreateRoomBase.h"
|
|||
|
|
|
|||
|
|
typedef std::function<GameFrameBase* ()> GAME_CREATE_SELECTOR;
|
|||
|
|
typedef std::function<CreateRoomBase* ()> GAME_CREATE_NODE;
|
|||
|
|
|
|||
|
|
class CGameCreator
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
// <20><>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
enum GAMETYPE
|
|||
|
|
{
|
|||
|
|
UNKNOWN = 0, // δ֪<CEB4><D6AA><EFBFBD><EFBFBD>
|
|||
|
|
NORMAL, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
BR, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
SINGLE, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
PRIVATE, // ˽<>˳<EFBFBD><CBB3><EFBFBD>Ϸ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
static const BYTE INVALID_PRIORITY = 0xFF;
|
|||
|
|
|
|||
|
|
struct ItemCreator
|
|||
|
|
{
|
|||
|
|
GAMETYPE type;
|
|||
|
|
uint16 wKindId;
|
|||
|
|
GAME_CREATE_SELECTOR gameSelector;
|
|||
|
|
GAME_CREATE_NODE createNodeSelector;
|
|||
|
|
|
|||
|
|
ItemCreator() : wKindId(0), type(UNKNOWN), gameSelector(nullptr), createNodeSelector(nullptr)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool validGame()
|
|||
|
|
{
|
|||
|
|
return (0 != wKindId) && (UNKNOWN != type) && (nullptr != gameSelector)/* && (nullptr != createNodeSelector)*/;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
bool valid()
|
|||
|
|
{
|
|||
|
|
return (0 != wKindId) && (UNKNOWN != type) && (nullptr != gameSelector)/* && (nullptr != createNodeSelector)*/;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
static CGameCreator* getInstance();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ٵ<EFBFBD><D9B5><EFBFBD>
|
|||
|
|
static void destroyInstance();
|
|||
|
|
|
|||
|
|
// <20><>ȡע<C8A1><D7A2><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
int getRegistGameCount();
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
// ע<><D7A2><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
void addGame(uint16 uNameId, GAMETYPE type, GAME_CREATE_SELECTOR createGameSelector, GAME_CREATE_NODE createNodeSelector);
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
|
|||
|
|
GameFrameBase* startGameClient(uint16 uNameId);
|
|||
|
|
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
CreateRoomBase* getCreateNode(uint16 uNameId);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
// У<><D0A3><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
BYTE validGame(uint16 uNameId);
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// <20><><EFBFBD>캯<EFBFBD><ECBAAF>
|
|||
|
|
CGameCreator();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
virtual ~CGameCreator();
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// ע<><D7A2><EFBFBD><EFBFBD>Ϸ<EFBFBD>б<EFBFBD>
|
|||
|
|
std::unordered_map<uint16, ItemCreator> _creators;
|
|||
|
|
|
|||
|
|
// <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϸ
|
|||
|
|
ItemCreator* _currentCreator;
|
|||
|
|
|
|||
|
|
// <20><>Ϸ<EFBFBD><CFB7>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD>
|
|||
|
|
int _validCount;
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif // Game_Creator_h__
|