Files
Leviathan/Client/Game/game/Interface/Arena/SUIArenaPracticeReadyWnd.cpp
2026-06-01 12:46:52 +02:00

276 lines
8.9 KiB
C++

#include "stdafx.h"
#include "Arena\\ArenaJoinSituationChecker.h"
#include "SUIArenaPracticeReadyWnd.h"
#include "Arena\\ArenaSystem.h"
//#include "SGameMessageUI.h"
#include "SGameManager.h"
#include "ArenaRankInfo.h"
#include "SGameSystem.h"
#include "CommonUtil.h"
#include "ArenaUtility.h"
#include "SStringDB.h"
extern SGameSystem * g_pCurrentGameSystem;
SUIArenaPracticeReadyWnd::SUIArenaPracticeReadyWnd(SGameManager* gameManager) : SUIWnd(gameManager),
m_completeButton(NULL)
{
}
SUIArenaPracticeReadyWnd::~SUIArenaPracticeReadyWnd()
{
}
bool SUIArenaPracticeReadyWnd::InitData(bool reload)
{
initFp();
getWndInfo();
initMenuSystem();
initTooltip();
return SUIWnd::InitData(reload);
}
void SUIArenaPracticeReadyWnd::getWndInfo()
{
m_completeButton = dynamicCast<KUIControl*>(GetChild("button_arena_select_complete_01"));
m_emptyControlRegionChecker.add(GetChild("area_control"));
}
void SUIArenaPracticeReadyWnd::initFp()
{
m_controlFp.add("button_close", &SUIArenaPracticeReadyWnd::close);
m_controlFp.add("button_arena_select_complete_01", &SUIArenaPracticeReadyWnd::complete);
m_controlFp.add("button_list_re_select_03", &SUIArenaPracticeReadyWnd::buttonMainStadium);
m_controlFp.add("button_arena_map_select_01", &SUIArenaPracticeReadyWnd::buttonSubStadium1);
m_controlFp.add("button_arena_map_select_02", &SUIArenaPracticeReadyWnd::buttonSubStadium2);
m_controlFp.add("button_arena_map_select_03", &SUIArenaPracticeReadyWnd::buttonSubStadium3);
m_msgFp.add(MSG_BATTLE_ARENA_BATTLE_INFO, &SUIArenaPracticeReadyWnd::procMsgBattleInfo);
}
void SUIArenaPracticeReadyWnd::initTooltip()
{
SetChildTooltip("mark_arena_mode_01", S(2317));
SetChildTooltip("mark_arena_vs_01", S(2318));
SetChildTooltip("mark_arena_map_01", S(2319));
SetChildTooltip("bg_mark_04", S(2320));
}
void SUIArenaPracticeReadyWnd::initMenuSystem()
{
/// 경기 방식
{
sArenaMainMenu* ruleMain = new sArenaMainMenu;
ruleMain->setId((int)MAIN_MENU_RULE);
ruleMain->setFoldButton(dynamicCast<KUIControl*>(GetChild("button_list_re_select_01")));
ruleMain->setSelectNameControl(GetChild("text_select_01"));
/// item
ruleMain->addItemControl(this, "bg_mark_01", sArenaMainMenu::SELECT_ITEM, 4, "mark_arena_mode_01", "bg_mark_01", "text_select_01", "text_bg_01");
ruleMain->addItemControl(this, "bg_mark_01", sArenaMainMenu::COMMON_ITEM, 1, "button_list_re_select_01");
/// add
m_menuSystem.addMainMenu(ruleMain);
}
/// 팀
{
sArenaMainMenu* teamMain = new sArenaMainMenu;
teamMain->setId((int)MAIN_MENU_TEAM);
teamMain->setFoldButton(dynamicCast<KUIControl*>(GetChild("button_list_re_select_02")));
teamMain->setSelectNameControl(GetChild("text_select_02"));
/// item
teamMain->addItemControl(this, "bg_mark_02", sArenaMainMenu::SELECT_ITEM, 4, "mark_arena_vs_01", "bg_mark_02", "text_select_02", "text_bg_02");
teamMain->addItemControl(this, "bg_mark_02", sArenaMainMenu::COMMON_ITEM, 1, "button_list_re_select_02");
/// add
m_menuSystem.addMainMenu(teamMain);
}
/// 경기장
{
sArenaMainMenu* stadiumMain = new sArenaMainMenu;
stadiumMain->setId((int)MAIN_MENU_STADIUM);
stadiumMain->setFoldButton(dynamicCast<KUIControl*>(GetChild("button_list_re_select_03")));
stadiumMain->setSelectNameControl(GetChild("text_select_03"));
/// item
stadiumMain->addItemControl(this, "bg_mark_07", sArenaMainMenu::NONSELECT_ITEM, 3, "mark_arena_map_02", "text_arena_map_01", "bg_mark_07");
stadiumMain->addItemControl(this, "bg_mark_03", sArenaMainMenu::SELECT_ITEM, 4, "mark_arena_map_01", "bg_mark_03", "text_select_03", "text_bg_03");
stadiumMain->addItemControl(this, "bg_mark_03", sArenaMainMenu::COMMON_ITEM, 1, "button_list_re_select_03");
/// sub menu, 지금은 한개 밖에 없다
stadiumMain->addSubMenu(this, SUB_MENU_STADIUM1, "button_arena_map_select_01",2476, 2476, 2, "text_arena_map_select_01", "button_arena_map_select_01");
//stadiumMain->addSubMenu(this, SUB_MENU_STADIUM2, "button_arena_map_select_02", 100, 2, "text_arena_map_select_02", "button_arena_map_select_02");
//stadiumMain->addSubMenu(this, SUB_MENU_STADIUM3, "button_arena_map_select_03", 100, 2, "text_arena_map_select_03", "button_arena_map_select_03");
/// add
m_menuSystem.addMainMenu(stadiumMain);
}
/// 시간
{
sArenaMainMenu* timeMain = new sArenaMainMenu;
timeMain->setId((int)MAIN_MENU_TIME);
timeMain->setFoldButton(dynamicCast<KUIControl*>(GetChild("button_list_re_select_04")));
timeMain->setSelectNameControl(GetChild("text_select_04"));
/// item
timeMain->addItemControl(this, "bg_mark_04", sArenaMainMenu::SELECT_ITEM, 4, "mark_arena_time_01", "bg_mark_04", "text_select_04", "text_bg_04");
timeMain->addItemControl(this, "bg_mark_04", sArenaMainMenu::COMMON_ITEM, 1, "button_list_re_select_04");
/// add
m_menuSystem.addMainMenu(timeMain);
}
m_menuSystem.setBasisYControl(GetChild("bg_mark_01"));
}
void SUIArenaPracticeReadyWnd::ProcMsgAtStatic( SGameMessage* msg )
{
m_msgFp.call(msg->nType, this, msg);
}
void SUIArenaPracticeReadyWnd::OnNotifyUIWindowOpen(bool bOpen, bool bLimitWnd)
{
if (bOpen)
{
syncPos();
initMainMenu();
setRank();
/// 알림창은 아레나 메뉴보다 위로 오게 해준다
m_pGameManager->PostMsgAtDynamic( new SIMSG_UI_LIST_MOVE_FORCE_BACK( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_NOTIFICATION ) );
}
postUpdateMainMenuButton();
}
void SUIArenaPracticeReadyWnd::postUpdateMainMenuButton()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_UPDATE_MAIN_MENU_BUTTON());
}
void SUIArenaPracticeReadyWnd::PumpUpMessage( LPCTSTR controlID, DWORD msg, DWORD lparam, DWORD wparam )
{
switch (msg)
{
case KUI_MESSAGE::KBUTTON_CLICK: m_controlFp.call(controlID, this); break;
}
}
DWORD SUIArenaPracticeReadyWnd::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 SUIArenaPracticeReadyWnd::syncPos()
{
SUIWnd* menuWnd = m_pGameManager->GetSUI(SIMSG_TOGGLE_UIWINDOW::UIWINDOW_MAINMENU);
if (menuWnd)
MovePos(menuWnd->GetRect().left, menuWnd->GetRect().top - GetRect().GetHeight());
}
void SUIArenaPracticeReadyWnd::initMainMenu()
{
/// 연습 경기는 기본으로 모두 선택된 상태여야 된다,
//m_menuSystem.initMenu(MAIN_MENU_STADIUM);
m_menuSystem.setSelect(MAIN_MENU_RULE, -1, true);
m_menuSystem.setSelect(MAIN_MENU_TEAM, -1, true);
m_menuSystem.setSelect(MAIN_MENU_STADIUM, SUB_MENU_STADIUM1, true);
m_menuSystem.setSelect(MAIN_MENU_TIME, -1, true);
m_menuSystem.setEnableFold(MAIN_MENU_RULE, false);
m_menuSystem.setEnableFold(MAIN_MENU_TEAM, false);
m_menuSystem.setEnableFold(MAIN_MENU_STADIUM, false);
m_menuSystem.setEnableFold(MAIN_MENU_TIME, false);
///
setEnableCompleteButton(true);
}
void SUIArenaPracticeReadyWnd::close()
{
m_pGameManager->PostMsgAtDynamic( new SIMSG_SHOW_UIWINDOW( SIMSG_TOGGLE_UIWINDOW::UIWINDOW_ARENA_PRACTICE_READY, false) );
}
void SUIArenaPracticeReadyWnd::complete()
{
if (!isValidArenaJoinSituation())
return ;
sArenaSystem* arenaSystem = g_pCurrentGameSystem->getArenaSystem();
arenaSystem->clear();
/// pend message
TS_CS_BATTLE_ARENA_JOIN_QUEUE msg;
msg.nArenaID = sArenaUtility::EXERCISE_ARENA_ID;
m_pGameManager->PendMessage(&msg);
}
void SUIArenaPracticeReadyWnd::buttonMainStadium()
{
m_menuSystem.unfold(MAIN_MENU_STADIUM);
setUnSelectMenu(MAIN_MENU_STADIUM);
}
void SUIArenaPracticeReadyWnd::buttonSubStadium1()
{
setSelectMenuItem(MAIN_MENU_STADIUM, SUB_MENU_STADIUM1);
}
void SUIArenaPracticeReadyWnd::buttonSubStadium2()
{
setSelectMenuItem(MAIN_MENU_STADIUM, SUB_MENU_STADIUM2);
}
void SUIArenaPracticeReadyWnd::buttonSubStadium3()
{
setSelectMenuItem(MAIN_MENU_STADIUM, SUB_MENU_STADIUM3);
}
void SUIArenaPracticeReadyWnd::setEnableCompleteButton(bool enable)
{
if (enable)
m_completeButton->Enable();
else
m_completeButton->Disable();
}
void SUIArenaPracticeReadyWnd::setSelectMenuItem(int mainMenuId, int subMenuId)
{
bool isAllSelected;
m_menuSystem.setSelectMenuItem(mainMenuId, subMenuId, isAllSelected);
if (isAllSelected)
setEnableCompleteButton(true);
}
void SUIArenaPracticeReadyWnd::setUnSelectMenu(int mainMenuId)
{
if (m_menuSystem.isSelected(mainMenuId))
{
m_menuSystem.setSelect(mainMenuId, -1, false);
setEnableCompleteButton(false);
}
}
bool SUIArenaPracticeReadyWnd::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));
return g_pCurrentGameSystem->isValidArenaJoinSituation(situationCondition);
}
void SUIArenaPracticeReadyWnd::procMsgBattleInfo(SGameMessage* msg)
{
msg->bUse = true;
close();
}
void SUIArenaPracticeReadyWnd::setRank()
{
sArenaRankInfo rankInfo;
rankInfo.setRank(GetChild("mark_rookie"));
}