335 lines
11 KiB
C++
335 lines
11 KiB
C++
#include "stdafx.h"
|
|
#include "Arena\\ArenaJoinSituationChecker.h"
|
|
#include "SUIArenaSelectReadyWnd.h"
|
|
#include "Arena\\ArenaSystem.h"
|
|
//#include "SGameMessageUI.h"
|
|
#include "SGameManager.h"
|
|
#include "SBattleArenaDB.h"
|
|
#include "ArenaRankInfo.h"
|
|
#include "SGameSystem.h"
|
|
#include "CommonUtil.h"
|
|
#include "ArenaUtility.h"
|
|
#include "SStringDB.h"
|
|
|
|
extern SGameSystem * g_pCurrentGameSystem;
|
|
|
|
SUIArenaSelectionReadyWnd::SUIArenaSelectionReadyWnd(SGameManager* gameManager) : SUIWnd(gameManager),
|
|
m_completeButton(NULL)
|
|
{
|
|
}
|
|
|
|
SUIArenaSelectionReadyWnd::~SUIArenaSelectionReadyWnd()
|
|
{
|
|
}
|
|
|
|
bool SUIArenaSelectionReadyWnd::InitData(bool reload)
|
|
{
|
|
initFp();
|
|
getWndInfo();
|
|
initMenuSystem();
|
|
initTooltip();
|
|
|
|
return SUIWnd::InitData(reload);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::initFp()
|
|
{
|
|
m_controlFp.add("button_close", &SUIArenaSelectionReadyWnd::close);
|
|
m_controlFp.add("button_arena_select_complete_01", &SUIArenaSelectionReadyWnd::complete);
|
|
m_controlFp.add("button_list_fold_01", &SUIArenaSelectionReadyWnd::buttonMainRule);
|
|
m_controlFp.add("button_arena_mode_classic_01", &SUIArenaSelectionReadyWnd::buttonSubClassic);
|
|
m_controlFp.add("button_arena_mode_slaughter_01", &SUIArenaSelectionReadyWnd::buttonSubSlaughter);
|
|
m_controlFp.add("button_arena_mode_bingo_01", &SUIArenaSelectionReadyWnd::buttonSubBingo);
|
|
m_controlFp.add("button_list_unfold_01", &SUIArenaSelectionReadyWnd::buttonMainTeam);
|
|
m_controlFp.add("button_arena_vs_double_01", &SUIArenaSelectionReadyWnd::buttonSubTwo);
|
|
m_controlFp.add("button_arena_vs_halfteam_01", &SUIArenaSelectionReadyWnd::buttonSubFour);
|
|
m_controlFp.add("button_arena_vs_team_01", &SUIArenaSelectionReadyWnd::buttonSubEight);
|
|
m_controlFp.add("button_arena_vs_doubleteam_01", &SUIArenaSelectionReadyWnd::buttonSubSixteen);
|
|
|
|
m_msgFp.add(MSG_BATTLE_ARENA_JOIN_QUEUE, &SUIArenaSelectionReadyWnd::procMsgJoinQueue);
|
|
m_msgFp.add(MSG_BATTLE_ARENA_BATTLE_INFO, &SUIArenaSelectionReadyWnd::procMsgBattleInfo);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::initTooltip()
|
|
{
|
|
SetChildTooltip("mark_arena_mode_02", S(2317));
|
|
SetChildTooltip("mark_arena_mode_03", S(2318));
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::getWndInfo()
|
|
{
|
|
m_completeButton = dynamicCast<KUIControl*>(GetChild("button_arena_select_complete_01"));
|
|
m_emptyControlRegionChecker.add(GetChild("area_control"));
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::initMenuSystem()
|
|
{
|
|
/// 경기 방식
|
|
{
|
|
sArenaMainMenu* ruleMain = new sArenaMainMenu;
|
|
ruleMain->setId((int)MAIN_MENU_RULE);
|
|
ruleMain->setFoldButton(dynamicCast<KUIControl*>(GetChild("button_list_fold_01")));
|
|
ruleMain->setSelectNameControl(GetChild("text_select_01"));
|
|
/// item
|
|
ruleMain->addItemControl(this, "bg_mark_01", sArenaMainMenu::NONSELECT_ITEM, 3, "mark_arena_mode_01", "text_arena_mode_01", "bg_mark_01");
|
|
ruleMain->addItemControl(this, "bg_mark_03", sArenaMainMenu::SELECT_ITEM, 4, "mark_arena_mode_02", "text_select_01", "bg_mark_03", "text_bg_04");
|
|
ruleMain->addItemControl(this, "bg_mark_01", sArenaMainMenu::COMMON_ITEM, 1, "button_list_fold_01");
|
|
/// sub menu
|
|
ruleMain->addSubMenu(this, sArenaUtility::MODE_CLASSIC, "button_arena_mode_classic_01", 2372, 2314, 2, "text_arena_mode_classic_01", "button_arena_mode_classic_01");
|
|
ruleMain->addSubMenu(this, sArenaUtility::MODE_SLAUGHTER, "button_arena_mode_slaughter_01", 2373, 2315, 2, "text_arena_mode_slaughter_01", "button_arena_mode_slaughter_01");
|
|
ruleMain->addSubMenu(this, sArenaUtility::MODE_BINGO, "button_arena_mode_bingo_01", 2374, 2316, 2, "text_arena_mode_bingo_01", "button_arena_mode_bingo_01");
|
|
/// add
|
|
m_menuSystem.addMainMenu(ruleMain);
|
|
}
|
|
|
|
/// 대전 인원
|
|
{
|
|
sArenaMainMenu* teamMain = new sArenaMainMenu;
|
|
teamMain->setId((int)MAIN_MENU_TEAM);
|
|
teamMain->setFoldButton(dynamicCast<KUIControl*>(GetChild("button_list_unfold_01")));
|
|
teamMain->setSelectNameControl(GetChild("text_select_02"));
|
|
/// item
|
|
teamMain->addItemControl(this, "bg_mark_05", sArenaMainMenu::NONSELECT_ITEM, 3, "mark_arena_vs_01", "text_arena_vs_01", "bg_mark_05");
|
|
teamMain->addItemControl(this, "bg_mark_04", sArenaMainMenu::SELECT_ITEM, 4, "mark_arena_mode_03", "text_select_02", "bg_mark_04", "text_bg_05");
|
|
teamMain->addItemControl(this, "bg_mark_05", sArenaMainMenu::COMMON_ITEM, 1, "button_list_unfold_01");
|
|
/// sub menu
|
|
teamMain->addSubMenu(this, sArenaUtility::MEMBER_2_BY_2, "button_arena_vs_double_01", 2378, 2327, 2, "text_arena_vs_double_01", "button_arena_vs_double_01");
|
|
teamMain->addSubMenu(this, sArenaUtility::MEMBER_4_BY_4, "button_arena_vs_halfteam_01", 2379, 2328, 2, "text_arena_vs_halfteam_01", "button_arena_vs_halfteam_01");
|
|
teamMain->addSubMenu(this, sArenaUtility::MEMBER_8_BY_8, "button_arena_vs_team_01", 2380, 2329, 2, "text_arena_vs_team_01", "button_arena_vs_team_01");
|
|
teamMain->addSubMenu(this, sArenaUtility::MEMBER_16_BY_16, "button_arena_vs_doubleteam_01", 2381, 2330, 2, "text_arena_vs_doubleteam_01", "button_arena_vs_doubleteam_01");
|
|
/// add
|
|
m_menuSystem.addMainMenu(teamMain);
|
|
}
|
|
|
|
m_menuSystem.setBasisYControl(GetChild("bg_mark_01"));
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::OnNotifyUIWindowOpen(bool bOpen, bool bLimitWnd)
|
|
{
|
|
if (bOpen)
|
|
{
|
|
syncPos();
|
|
initMainMenu();
|
|
setEnableCompleteButton(false);
|
|
checkEnable16By16();
|
|
setRank();
|
|
|
|
/// 알림창은 아레나 메뉴보다 위로 오게 해준다
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_FORCE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_NOTIFICATION ) );
|
|
}
|
|
postUpdateMainMenuButton();
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::postUpdateMainMenuButton()
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_UPDATE_MAIN_MENU_BUTTON());
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::PumpUpMessage( LPCTSTR controlID, DWORD msg, DWORD lparam, DWORD wparam )
|
|
{
|
|
switch (msg)
|
|
{
|
|
case KUI_MESSAGE::KBUTTON_CLICK: m_controlFp.call(controlID, this); break;
|
|
}
|
|
}
|
|
|
|
DWORD SUIArenaSelectionReadyWnd::OnMouseMessage(DWORD dwMessage, int x, int y)
|
|
{
|
|
if (KLBUTTON_DOWN == dwMessage)
|
|
{
|
|
if (m_emptyControlRegionChecker.isIn(x, y))
|
|
return KMR_GET_PASS;
|
|
}
|
|
|
|
return SUIWnd::OnMouseMessage(dwMessage, x, y);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::ProcMsgAtStatic(SGameMessage* msg)
|
|
{
|
|
m_msgFp.call(msg->nType, this, msg);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::syncPos()
|
|
{
|
|
SUIWnd* menuWnd = m_pGameManager->GetSUI(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MAINMENU);
|
|
if (menuWnd)
|
|
MovePos(menuWnd->GetRect().left, menuWnd->GetRect().top - GetRect().GetHeight());
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::initMainMenu()
|
|
{
|
|
m_menuSystem.initMenu(MAIN_MENU_RULE);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::close()
|
|
{
|
|
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_SELECTION_READY, false) );
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::complete()
|
|
{
|
|
isValidArenaJoinSituationAtNormalParty();
|
|
if (!isValidArenaJoinSituation())
|
|
return ;
|
|
|
|
sArenaSystem* arenaSystem = g_pCurrentGameSystem->getArenaSystem();
|
|
arenaSystem->clear();
|
|
|
|
/// pend message
|
|
TS_CS_BATTLE_ARENA_JOIN_QUEUE msg;
|
|
int ruleType = m_menuSystem.getSelectSubMenuId(MAIN_MENU_RULE);
|
|
int memberType = m_menuSystem.getSelectSubMenuId(MAIN_MENU_TEAM);
|
|
int minMember, maxMember;
|
|
sArenaUtility utility;
|
|
utility.calcBattleArenaJoinMemberCount(memberType, minMember, maxMember);
|
|
|
|
msg.nArenaID = GetBattleArenaDB().findID(ruleType, maxMember);
|
|
/// 아레나 id를 못 찾 았을 경우에는 그냥 리턴 한다
|
|
if (0 > msg.nArenaID)
|
|
return ;
|
|
m_pGameManager->PendMessage(&msg);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonMainRule()
|
|
{
|
|
m_menuSystem.unfold(MAIN_MENU_RULE);
|
|
setUnSelectMenu(MAIN_MENU_RULE);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubClassic()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_RULE, sArenaUtility::MODE_CLASSIC);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubSlaughter()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_RULE, sArenaUtility::MODE_SLAUGHTER);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubBingo()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_RULE, sArenaUtility::MODE_BINGO);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonMainTeam()
|
|
{
|
|
m_menuSystem.unfold(MAIN_MENU_TEAM);
|
|
setUnSelectMenu(MAIN_MENU_TEAM);
|
|
|
|
/// 경기 방식이 빙고일 경우에는 팀을 disable시킴
|
|
int ruleType = m_menuSystem.getSelectSubMenuId(MAIN_MENU_RULE);
|
|
checkEnable2By2(MAIN_MENU_RULE, ruleType);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubTwo()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_TEAM, sArenaUtility::MEMBER_2_BY_2);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubFour()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_TEAM, sArenaUtility::MEMBER_4_BY_4);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubEight()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_TEAM, sArenaUtility::MEMBER_8_BY_8);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::buttonSubSixteen()
|
|
{
|
|
setSelectMenuItem(MAIN_MENU_TEAM, sArenaUtility::MEMBER_16_BY_16);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::setEnableCompleteButton(bool enable)
|
|
{
|
|
if (enable)
|
|
m_completeButton->Enable();
|
|
else
|
|
m_completeButton->Disable();
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::setSelectMenuItem(int mainMenuId, int subMenuId)
|
|
{
|
|
bool isAllSelected;
|
|
m_menuSystem.setSelectMenuItem(mainMenuId, subMenuId, isAllSelected);
|
|
if (isAllSelected)
|
|
setEnableCompleteButton(true);
|
|
|
|
checkEnable2By2(mainMenuId, subMenuId);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::setUnSelectMenu(int mainMenuId)
|
|
{
|
|
if (m_menuSystem.isSelected(mainMenuId))
|
|
{
|
|
m_menuSystem.setSelect(mainMenuId, -1, false);
|
|
setEnableCompleteButton(false);
|
|
}
|
|
}
|
|
|
|
bool SUIArenaSelectionReadyWnd::isValidArenaJoinSituation()
|
|
{
|
|
sArenaJoinSituationCondition situationCondition;
|
|
/// way
|
|
situationCondition.m_notificationWays = cArenaJoinSituationChecker::WAY_NOTIFICATION_WND;
|
|
/// situation
|
|
situationCondition.add(cArenaJoinSituationChecker::SITUATION_DEATH, S(2423));
|
|
situationCondition.add(cArenaJoinSituationChecker::SITUATION_TRADE, S(2424));
|
|
situationCondition.add(cArenaJoinSituationChecker::SITUATION_INSTANCE_PLAYING, S(2425));
|
|
situationCondition.add(cArenaJoinSituationChecker::SITUATION_SIEGE_PLAYING, S(2426));
|
|
|
|
return g_pCurrentGameSystem->isValidArenaJoinSituation(situationCondition);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::isValidArenaJoinSituationAtNormalParty()
|
|
{
|
|
sArenaJoinSituationCondition situationCondition;
|
|
/// way
|
|
situationCondition.m_notificationWays = cArenaJoinSituationChecker::WAY_NOTIFICATION_WND;
|
|
/// situation
|
|
situationCondition.add(cArenaJoinSituationChecker::SITUATION_NORMAL_PARTY_PLAYING, S(2427));
|
|
|
|
g_pCurrentGameSystem->isValidArenaJoinSituation(situationCondition);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::procMsgJoinQueue(SGameMessage* msg)
|
|
{
|
|
msg->bUse = true;
|
|
|
|
close();
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::procMsgBattleInfo(SGameMessage* msg)
|
|
{
|
|
msg->bUse = true;
|
|
|
|
close();
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::checkEnable16By16()
|
|
{
|
|
sArenaRankInfo rankInfo;
|
|
int rank = rankInfo.getRank();
|
|
bool enable = true;
|
|
if (sArenaUtility::RANK_R == rank)
|
|
{
|
|
enable = false;
|
|
}
|
|
m_menuSystem.setEnableMenuItem(MAIN_MENU_TEAM, sArenaUtility::MEMBER_16_BY_16, enable);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::checkEnable2By2(int mainMenuId, int subMenuId)
|
|
{
|
|
bool enable = true;
|
|
if (MAIN_MENU_RULE == mainMenuId && sArenaUtility::MODE_BINGO == subMenuId)
|
|
enable = false;
|
|
m_menuSystem.setEnableMenuItem(MAIN_MENU_TEAM, sArenaUtility::MEMBER_2_BY_2, enable);
|
|
}
|
|
|
|
void SUIArenaSelectionReadyWnd::setRank()
|
|
{
|
|
sArenaRankInfo rankInfo;
|
|
rankInfo.setRank(GetChild("mark_rookie"));
|
|
}
|