Files
2026-06-01 12:46:52 +02:00

120 lines
3.5 KiB
C++

#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<SUIArenaResultWnd> m_controlFp;
cClassParamFuncP<SUIArenaResultWnd, SGameMessage*, int> m_msgFp;
std::list<sNeedResizeControl> m_needResizeControl;
int m_oriCloseButtonOffsetY; /// 윈도우를 기준으로한 버튼의 옵셋값
KUIControl* m_buttonClose;
int m_oriWndHeight; /// 윈도우의 원래 높이 값
int m_myRowIndex;
bool m_isEnd;
};
#endif