Files
Leviathan/Client/Game/game/GameSystem/Arena/ArenaJoinSituationChecker.h
T
2026-06-01 12:46:52 +02:00

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