#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(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(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(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")); }