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

101 lines
4.1 KiB
C++

#ifndef _ArenaSystem_h_
#define _ArenaSystem_h_
#include "Arena\\ArenaUtility.h"
#include "SGameMessage.h"
#include "K3DTypes.h"
struct sArenaSystem
{
public:
typedef SMSG_BATTLE_ARENA_BATTLE_INFO::sPlayerInfo sPlayerInfo;
typedef SMSG_BATTLE_ARENA_BATTLE_SCORE::sTeamScore sTeamScore;
typedef SMSG_BATTLE_ARENA_BATTLE_SCORE::sPlayerScore sPlayerScore;
sArenaSystem();
~sArenaSystem();
void process(float elapsedTime);
/// join을 보낼 때, 현재의 데이타들을 삭제해 준다
void clear();
void recvMsgBattleArenaJoinQueue(SGameMessage* msg);
void recvMsgBattleArenaLeave(SGameMessage* msg);
void recvMsgBattleArenaBattleInfo(SGameMessage* msg);
void recvMsgBattleArenaBattleStatus(SGameMessage* msg);
void recvMsgBattleArenaBattleScore(SGameMessage* msg);
void recvMsgBattleArenaJoinBattle(SGameMessage* msg);
void recvMsgBattleArenaDisconnectBattle(SGameMessage* msg);
void recvMsgBattleArenaReconnectBattle(SGameMessage* msg);
void recvMsgBattleArenaResult(SGameMessage* msg);
void recvMsgBattleArenaAbsenceCheck(SGameMessage *msg);
void recvMsgBattleArenaPenaltyInfo(SGameMessage* msg);
void recvMsgBattleArenaUpdateWaitUserCount(SGameMessage* msg);
void recvMsgBattleArenaExerciseReadyStatus(SGameMessage* msg);
int findTeam(char const* playerName) const;
sPlayerInfo* findPlayerInfo(char const* playerName, int& team);
sPlayerInfo* findPlayerInfo(char const* playerName, int& team, int& player);
sPlayerInfo* findEmptyPlayerInfo(int team);
//sPlayerInfo* findPlayerInfo(int team, AR_HANDLE handle);
sPlayerInfo* getPlayerInfo(int team, int player);
sPlayerScore* findPlayerScore(char const* playerName);
void erasePlayerScore(char const* playerName);
sPlayerScore* getMyPlayerScore();
void findMyTeam();
bool isEnoughHalfPlayerCount(int maxMember) const;
/// 가명과 아레나 상태에 따른 플레이어 이름을 리턴한다
char const* getPlayerName(class SPlayerInfoMgr const* playerInfo);
sTeamScore* getTeamScore(int team);
int getPlayerCount(int team);
bool isWaiting();
bool isPlaying();
bool isReady(int team);
/// 배틀 인포를 받았는지 안 받았는지, 대기 카운트 전인지 아닌지를 체크할 때 쓰인다
bool isRecvBattleInfo();
bool isEqualScore() const;
bool isExercise() const;
bool isJoin() const; /// 입장 대기까지 포함해서 아레나에 조인 했는지
void setReportDrivePlayerName(char const* name) { m_reportDrivePlayerName = name; }
char const* getReportDrivePlayerName() const { return m_reportDrivePlayerName.c_str(); }
/// TS_SC_BATTLE_ARENA_BATTLE_STATUS에서 갖고 옴
_PROP_STATE getBingoManStatus(int bingoManIndex) const { assert( bingoManIndex >= 0 && bingoManIndex < 9 ); return static_cast< _PROP_STATE >( ( m_status >> ( bingoManIndex * 2 ) ) & 0x3 ); }
int getMyTeam();
int getOpponentTeam() const { return m_opponentTeam; }
int getBlockTime() const { return (int)(m_blockTime * 100.0f); }
int getPenaltyCount() const { return m_penaltyCount; }
int getPenaltyCountTime() const { return (int)(m_penaltyCountTime * 100.0f); }
int getArenaId() const { return m_arenaId; }
AR_TIME getEndTime() const { return m_endTime; }
AR_TIME getForceEnterTime() const { return m_forceEnterTime; }
AR_TIME getStartTime() const { return m_startTime; }
int getWaitingUserCount() const { return m_waitingUserCount; }
int getReadyState() const { return m_readyState; }
std::vector<K3DVector2> const& getBlockList() const { return m_blockList; }
private:
void extractBlockList();
void procBlockList();
private:
int m_arenaId;
int m_myTeam;
int m_opponentTeam;
float m_blockTime;
AR_TIME m_forceEnterTime;
AR_TIME m_endTime;
AR_TIME m_startTime;
int m_penaltyCount;
float m_penaltyCountTime;
int m_status;
int m_readyState;
int m_waitingUserCount;
int m_playerCount[sArenaUtility::MAX_TEAM_NUM];
sPlayerInfo m_playerInfo[sArenaUtility::MAX_TEAM_NUM][sArenaUtility::MAX_MEMBER_ONE_TEAM];
sTeamScore m_teamScore[sArenaUtility::MAX_TEAM_NUM];
sPlayerScore m_playerScore[sArenaUtility::MAX_TEAM_NUM][sArenaUtility::MAX_MEMBER_ONE_TEAM];
std::string m_reportDrivePlayerName;
std::vector<K3DVector2> m_blockList;
};
#endif