Files

96 lines
1.8 KiB
C
Raw Permalink Normal View History

2026-03-03 13:56:44 +08:00
#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__