#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 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 m_blockList; }; #endif