#ifndef _SUIArenaResultWnd_h_ #define _SUIArenaResultWnd_h_ #include "Arena\\ArenaSystem.h" #include "SGameMessage.h" #include "ArenaUtility.h" //#include "SUIWnd.h" //#include "SUIUtil.h" class SUIArenaResultWnd : public SUIWnd { private: typedef SMSG_BATTLE_ARENA_RESULT::sMvp sMvp; public: SUIArenaResultWnd(SGameManager* pGameManager); virtual ~SUIArenaResultWnd(); virtual bool InitData( bool reload = false ); virtual void OnNotifyUIWindowOpen(bool bOpen, bool bLimitWnd); virtual void ProcMsgAtStatic( SGameMessage* msg ); virtual void PumpUpMessage( LPCTSTR controlID, DWORD msg, DWORD lparam, DWORD wparam ); private: void initFp(); void initTooltip(); void initNeedResizeControls(); void addNeedResizeControl(char const* id); /// 팀원 항목 생성 void createRowControls(); void copyRowControl(int panel); void setWinTeam(int winTeam); void syncPos(); void updateRow(int rowNum); void updateTotalPlayerCount(); void showRow(int rowNum); void resizeWnd(int rowNum); void setRowNum(); /// 팀원 수 설정 /// 클래식/빙고/슬래터 void setGameMode(); /// 동맹군/마녀군 void setMyTeam(int teamType); void setScore(int team, int score, char const* controlId); void setMyScore(int score); void setOpponentScore(int score); /// 내 row는 배경을 바꿔준다. void setRowBackground(); bool setRowData(sArenaSystem::sPlayerInfo* info, int panel, int row, int mvpCount, sMvp const* mvp); /// 경기 진행중/끝 에 따라서 버튼의 show/hide 상태들을 바꿔준다 void setEndGame(bool end); void updateData(int mvpCount = 0, sMvp const* mvp = NULL); void updateRow(); bool findRowIndex(char const* playerName, int& team, int& rowIndex); void moveWnd(); /// 플레이어 인덱스의 캡션과 aniName을 초기화 해준다 void initNumber(); void setPanelData(int team, int panel, int mvpCount, sMvp const* mvp); void findMyRowIndex(); void isValidArenaJoinSituationAtResult(SGameMessage* msg); bool isMvp(char const* name, int mvpCount, sMvp const* mvp) const; /// control fp void close(); void end(); /// msg fp void procMsgData(SGameMessage* msg); void procMsgBattleInfo(SGameMessage* msg); void procMsgBattleScore(SGameMessage* msg); void procMsgJoinBattle(SGameMessage* msg); void procMsgReconnectBattle(SGameMessage* msg); void procMsgResult(SGameMessage* msg); void procMsgLeave(SGameMessage* msg); private: enum { ROW_HEIGHT = 23 }; /// 각 라인의 높이 enum { MAX_ROW = 16 }; /// 최대 팀원 수 enum { MY_PANEL, OPPONENT_PANEL, MAX_PANEL }; enum { COLUMN_BACKGROUND, COLUMN_NUMBER, COLUMN_JOB, COLUMN_ID, COLUMN_KILLCOUNT, COLUMN_DEATHCOUNT, COLUMN_PROPPOINT, COLUMN_AP, MAX_COLUMN, }; /* */ struct sRowControls { void setShow(bool show, int beginColumn = COLUMN_BACKGROUND); KUIControl* m_control[MAX_COLUMN]; }; /* row 개수가 바뀔 때, 크기가 변해야 되는 컨트롤들 */ struct sNeedResizeControl { sNeedResizeControl(int height, KUIWnd* control) { m_oriHeight = height; m_control = control; } int m_oriHeight; /// 원래의 높이 값 KUIWnd* m_control; }; int m_rowNum; /// 현재의 팀원 수 sRowControls m_rowControl[MAX_PANEL][MAX_ROW]; cClassFuncP m_controlFp; cClassParamFuncP m_msgFp; std::list m_needResizeControl; int m_oriCloseButtonOffsetY; /// 윈도우를 기준으로한 버튼의 옵셋값 KUIControl* m_buttonClose; int m_oriWndHeight; /// 윈도우의 원래 높이 값 int m_myRowIndex; bool m_isEnd; }; #endif