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

168 lines
4.7 KiB
C++

#ifndef _ArenaMenuSystem_h_
#define _ArenaMenuSystem_h_
//#include "SUIWnd.h"
#pragma pack(push, 1)
/* 아레나의 ui의 메뉴의 항목들은 다른 ui의 항목들과는 다른 시스템으로 되어 있어서 따로 분류를 함
아레나의 메뉴 항목끼리를 같은 시스템이다.
sArenaMainMenu1
sArenaMenuItem
sArenaSubMenu1
sArenaMenuItem1
sArenaMenuItem2
sArenaMenuItem3
...
sArenaSubMenu2
sArenaSubMenu3
...
sArenaMainMenu2
sArenaMainMenu3
.
.
.
sArenaMenuItem
sArenaMenuItemWnd1
sArenaMenuItemWnd2
sArenaMenuItemWnd3
...
*/
struct sArenaMenuItemControl
{
sArenaMenuItemControl(KUIControl* control, int offsetY);
KUIControl* m_control;
int m_offsetY;
};
struct sArenaMenuItem
{
public:
~sArenaMenuItem();
void addControl(KUIControl* control, int offsetY);
void fold();
void unFold(int y);
void setShow(bool show);
void setEnable(bool enable);
void move(int y);
private:
std::list<sArenaMenuItemControl> m_controlList;
};
struct sArenaSubMenu
{
public:
sArenaSubMenu() : m_item(NULL), m_nameId(-1) {}
~sArenaSubMenu();
void setItem(sArenaMenuItem* item);
void fold();
void unFold(int y);
void setEnable(bool enable);
char const* getName();
void setNameId(int nameId) { m_nameId = nameId; }
void setId(int id) { m_id = id; }
int getId() const { return m_id; }
private:
sArenaMenuItem* m_item;
int m_nameId;
int m_id;
};
struct sArenaMainMenu
{
public:
sArenaMainMenu();
~sArenaMainMenu();
void setFoldButton(KUIWnd* control);
/// item들을 한번에 등록해서 submenu를 추가한다.
void addSubMenu(SUIWnd* wnd, int subMenuId, char const* basisControlId, int tooltipStringId, int selectNameStringId, int itemCount, ...);
void addSubMenu(sArenaSubMenu* subMenu);
void addItemControl(SUIWnd* wnd, char const* basisControlId, int selectStatus, int itemCount, ...);
void unfold(int& y);
void fold(int& y);
void setSelect(int subMenuId, bool select);
void setEnableSubMenu(int subMenuId, bool enable);
void setEnableFold(bool enable);
/// 선택되 폴드 상태에 따라서 m_foldButton의 애니 이름을 맞춘다.
void syncFoldButtonAniName();
void setNextMainMenu(sArenaMainMenu* mainMenu) { m_nextMainMenu = mainMenu; }
sArenaMainMenu* getNextMainMenu() const { return m_nextMainMenu; }
void setFoldButton(KUIControl* control) { m_foldButton = control; }
void setId(int id) { m_id = id; }
int getId() const { return m_id; }
bool isSelected() const { return m_isSelect; }
int getSelectSubMenuId() const { return m_selectSubMenuId; }
void setSelectSubMenuId(int subMenuId) { m_selectSubMenuId = subMenuId; }
void setSelectNameControl(KUIWnd* control) { m_selectNameControl = control; }
private:
void addItemControl(KUIControl* control, int basisY, int selectStatus);
void itemUnFold(int& y);
void subMenuUnFold(int& y);
void itemFold(int& y);
/// submenu의 fold는 hide 기능과 같기 때문에 y값 입력은 필요가 없다.
void subMenuFold();
/// fold, unfold, select, 에 따라서 aniname과 enable/disable 상태가 바뀐다
void checkFoldButtonStatus();
/// 선택된 subMenuId의 이름을 갖고와서 설정한다.
void setSelectSubMenuName(int subMenuId);
sArenaSubMenu* getSubMenu(int subMenuId);
public:
enum { NONSELECT_ITEM, SELECT_ITEM, COMMON_ITEM, MAX_ITEM };
private:
enum { UNFOLD_STATUS, FOLD_STATUS, MAX_FOLD_STATUS };
bool m_isSelect;
bool m_isFold;
int m_id;
sArenaMenuItem m_item[MAX_ITEM];
std::vector<sArenaSubMenu*> m_subMenuList;
KUIControl* m_foldButton;
KUIWnd* m_selectNameControl;
sArenaMainMenu* m_nextMainMenu;
int m_selectSubMenuId;
};
struct sArenaMenuSystem
{
public:
~sArenaMenuSystem();
void addMainMenu(sArenaMainMenu* mainMenu);
/// mainMenuIndex를 펼치고 다른 메인 메뉴는 접는다.
void unfold(int mainMenuId);
void allFold();
void setEnableFold(int mainMenuId, bool enable);
void setSelect(int mainMenuId, int subMenuId, bool setSelect);
void setSelectMenuItem(int mainMenuId, int subMenuId, bool& _isAllSelected);
void setEnableMenuItem(int mainMenuId, int subMenuId, bool enable);
void setNextUnFold(int mainMenuId);
bool isAllSelected() const;
bool isSelected(int mainMenuId) const;
void initMenu(int unfoldMainMenuId);
int getSelectSubMenuId(int mainMenuId) const;
void setBasisYControl(KUIWnd* control) { m_basisYControl = control; }
private:
/// 선택되지 않은 메뉴를 찾아서 unfold해준다
void setUnSelectedToUnFold();
sArenaMainMenu* findMainMenu(int mainMenuId) const;
int getBasisY() const;
private:
std::list<sArenaMainMenu*> m_mainMenuList;
KUIWnd* m_basisYControl; /// y 값이 기준이 되는 컨트롤
};
#pragma pack(pop)
#endif