83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
|
|
#ifndef _ArenaJoinSituationChecker_h_
|
|
#define _ArenaJoinSituationChecker_h_
|
|
|
|
class cSituationConcreter;
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
/// 체크 하고 싶은 상태들을 add 해서 cArenaJoinSituationChecker에서 체크한다
|
|
/// situation는 cArenaJoinSituationChecker::SITUATION이 들어온다
|
|
struct sArenaJoinSituationCondition
|
|
{
|
|
struct sSituation
|
|
{
|
|
sSituation(int situation, char const* string, bool extractTag)
|
|
{
|
|
m_situation = situation;
|
|
m_string = string;
|
|
m_extractTag = extractTag;
|
|
}
|
|
bool m_extractTag;
|
|
int m_situation;
|
|
std::string m_string;
|
|
};
|
|
|
|
~sArenaJoinSituationCondition() { m_list.clear(); }
|
|
void add(int situation, char const* string, bool extractTag = true) { m_list.push_back(sSituation(situation, string, extractTag)); }
|
|
void addNone(char const* string, bool extractTag = true) { m_list.push_back(sSituation(0, string, extractTag)); }
|
|
|
|
typedef std::vector<sSituation>::const_iterator cit_situation;
|
|
|
|
std::vector<sSituation> m_list;
|
|
int m_notificationWays;
|
|
};
|
|
|
|
#pragma pack(pop)
|
|
|
|
/*
|
|
아레나 참여 할 때, 유효한 상황인지 체크
|
|
유효한 상황이 아닐 때는 알림창/채팅메세지/중앙 팝업창 등으로 알림을 출력한다.
|
|
*/
|
|
class cArenaJoinSituationChecker
|
|
{
|
|
public:
|
|
cArenaJoinSituationChecker();
|
|
~cArenaJoinSituationChecker();
|
|
/// notificationWay : 알림 방법(NOTIFICATION_WAY)
|
|
bool isValidSituation(sArenaJoinSituationCondition const& situationCondition);
|
|
|
|
public:
|
|
enum SITUATION { SITUATION_NONE, /// 이 상태에서는 무조건 출력
|
|
SITUATION_DEATH, /// 죽은 상태
|
|
SITUATION_TRADE, /// 거래 중
|
|
SITUATION_SIEGE_PLAYING, /// 시즈 참여 중
|
|
SITUATION_INSTANCE_PLAYING, /// 인스턴스 참여 중
|
|
SITUATION_PENALTY, /// 아레나 패널티 있을 때
|
|
SITUATION_PARTY_PLAYING, /// 파티 중
|
|
SITUATION_NORMAL_PARTY_PLAYING, /// 일반 파티 중
|
|
SITUATION_ARENA_PLAYING, /// 아레나 게임 중
|
|
SITUATION_ARENA_WAITING, /// 아레나 대기 중
|
|
SITUATION_ARENA_WAITING_COUNT, /// 아레나 대기 카운트 중
|
|
SITUATION_MAX,
|
|
};
|
|
|
|
/// notification ways
|
|
enum WAY { WAY_NOTIFICATION_WND = 1, /// 알림창
|
|
WAY_CENTER_NOTICE = 2 , /// 중앙 공지
|
|
WAY_MSG_BOX = 4, /// 메세지 박스
|
|
};
|
|
|
|
private:
|
|
void createConcreters();
|
|
cSituationConcreter* createConcreter(int situation);
|
|
void deleteConcreters();
|
|
/// 최종 알림 처리
|
|
void setNotification(int situation, char const* string, int notificationWay, bool extractTag);
|
|
bool isValidSituation(int situation) const;
|
|
|
|
private:
|
|
cSituationConcreter* m_situationConcreter[SITUATION_MAX];
|
|
};
|
|
|
|
#endif |