#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::const_iterator cit_situation; std::vector 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