/* ==========================================================================
* 목    적 : 
* 작 성 자 : 김가람
* 작 성 일 : 2006-12-21
* 주의사항 :
*===========================================================================*/
#pragma once
#include "Chat_Common.h"

enum eWINPOSIDX
{
	CHATWIN_POS = 0,	/// hold
	ECHATWIN1_POS,
	ECHATWIN2_POS,
	ECHATWIN3_POS,

	HEROSTATWIN_POS,	/// hold
	HEROINFOWIN_POS,
	TARGETWIN_POS,

	INVENWIN_POS,
	BAGWIN1_POS,
	BAGWIN2_POS,
	BAGWIN3_POS,

	SKILLWIN_POS,
	OPTWIN_POS,
	MINIMAPWIN_POS,

	CQUICK_POS,			/// hold or hide
	RQUICK_POS,			/// hold or hide
	FSCQUICK_POS,		/// hold or hide
	FSRQUICK_POS,		/// hold or hide

	PARTYWIN_POS,
	PARTYSTATWIN1_POS,
	PARTYSTATWIN2_POS,
	PARTYSTATWIN3_POS,
	PARTYSTATWIN4_POS,
	PARTYSTATWIN5_POS,

	NOTEWIN_POS,
	FRIENDWIN_POS,
	TAROTCON_POS,
	SELLWIN_POS,
	SELLSEARCHWIN_POS,
	LOOTWIN_POS,

	QUESTWIN_POS,
	SQUESTWIN_POS,

	DISJOINT_POS,
	SENDNOTE_POS,
	RECEIVENOTE_POS,
	ENHANCEDWIN_POS,
	PUTCARD_POS,
	SOCIALWIN_POS,
	TITLEWIN_POS,
	GUILDWIN_POS,

	POS_END,
};

class cBaseObject;
enum eMSGBox_Event;

class cUIWindow;
class cUIBackWindow;
class cChatManager;
class cChatWindow;
class cTargetWindow;
class cHeroInfoWindow;
class cCastingBar;
class cDestroyWarningWindow;
class cDropWarningWindow;
class cHeroStateWindow;
class cNpcWindow;
class cNpcStoreWindow;
class cInventoryWindow;
class cBagWindow;
class cWareHouseWindow;
class cWareHouse2Window;
class cItemCountWindow;
class cItemMsgWindow;
class cTradeWindow;
class cSkillWindow;
class cBuffWindow;
class cDragWindow;
class cMenuButtonWindow;
class cMiniMapWindow;
class cOptionWindow;
class cSkillStoreWindow;
class cSmallMiniMapWindow;
class cColumnQuickSlot;
class cRowQuickSlot;
class cNoteWindow;
class cFriendWindow;
class cTarotWindow;
class cTarotControlWindow;
class cUserSellWindow;
class cUserSellSearchWindow;
class cItemTipWindow;
class cSkillTipWindow;
class cBuffToolTipWindow;
class cSimpleTipWindow;
class cExitWindow;
class cExitMsgWindow;
class cLootingWindow;
class cRevivalWindow;
class cPartyWindow;
class cPartyStateWindow;
class cPartyMenu;
class cPartyDivideMenu;
class cMoneyWindow;
class cQuestWindow;
class cNpcRewardWindow;
class cNpcDisjointWindow;
class cSendNoteWindow;
class cReceiveNoteWindow;
class cEnhancedWindow;
class cQuestSimpleWindow;
class cMoneyWindow;
class cPutCardWindow;
class cDuelMsgWindow;
class cDuelWindow;
class cCardBookWindow;
class cChatExtraWindow;
class cFSColumnQuickSlot;
class cFSRowQuickSlot;
class cSocialWindow;
class cDMScoreWindow;
class cDMResultWindow;
class cDMMsgWindow;
class cDMRevivalWindow;
class cDMRankingListWindow;
class cChatButtonWindow;
class cTitleWindow;
class cMenuHeroWindow;
class cMenuCommuityWindow;
class cMenuOptionWindow;
class cGuildWindow;
class cChatTipWindow;
class cRButtonMenuWindow;
class cGuildButtonWindow;
class cGuildMarkWindow;
class cGuildSendNoteWindow;
class cShortenKeyWindow;
class cNpcTarotWindow;
class cTodayWordWindow;
class cItemMixWindow;

enum eItemTry;
enum eMoneyType;

/// save window pos struct
struct sWindowPosHeader
{
	unsigned short	version;
	unsigned int	dataCount;
};

struct sWindowPosData
{
	unsigned long	index;
	NiPoint2		pos;
	unsigned char	showFlag; // 0: hide, 1: show, 2: holdView
};

struct sChatWinOption
{
	bool	checkNormal;
	bool	checkParty;
	bool	checkGuild;
	bool	checkShout;
	bool	checkTrade;
	bool	checkWhisper;
	bool	checkSystem;
};

struct sWindowOptCharacter
{
	unsigned short version;
	unsigned int questCount;
};

///

class cGameUIManager
{
	static cGameUIManager* mpSingleton;

public:
	cGameUIManager();
	~cGameUIManager();

	void Init();
	void Exit();
	void Open();
	void Close();
	void Process( unsigned long deltaTime, unsigned long accumTime );

	void InitHeroInfo();
	void UpdateHeroInfo();	/// 모든 스탯정보 갱신
	void UpdateHeroHPMP();	/// HP,MP만 갱신
	void UpdateExpSxp();
	void UpdateSkillPoint();
	void UpdataSkillStorWindow();		/// 보유목록 변경에 따른 내용 갱신
	void UpdateMinimap();

	/// 네트워크 
	void ReqFinish( bool exitEvent );

	void SendGameOut();
	void SendDisConnect();
	void NetLockParty( int lockTry );	/// 파티와 관련있는 모든 UI LOCK
	void NetUnLockParty( int lockTry );

	/// 퀵슬롯 탭 체인지 
	void ChangeTab();
	void ChangeTab( int tabIndex );

	/// 각종 윈도우의 상태 전환 함수들..
	void OnFocusChatWindow( unsigned long key, LPCTSTR addstring = _T("") );

	bool IsDuelMode() { return mDuelMode; }
	void SetDuelMode( bool mode );

	bool IsShowCardBook();

	/// hero 상태에 따른 ui 닫기 
	void HideUIByDie();

	/// 아이템 관련 세트 윈도우 닫기(조합창, 강화창, 카드장착창)
	void HideItemSetWindow( cUIWindow* exceptWin );

	///
	void ShowGameUI();
	void ToggleGameUI();
	void ToggleOptionWindow();
	void ToggleHeroInfoWindow();
	void ToggleInventoryWindow();
	void ToggleWareHouse2Window();
	void ToggleSmallMiniMapWindow();
	void ToggleNoteWindow();
	void ToggleFriendWindow();
	void ToggleMiniMapWindow();
	void ToggleSkillWindow();
	void TogglePartyMenu();			/// 파티메뉴
	void TogglePartyDivideMenu();	/// 파티 분배메뉴
	void ToggleBagWindow( unsigned int index );
	void ToggleQuestWindow();
	void ToggleUserSellSearchWindow();
	void TogglePutCardWindow();
	void ToggleCardBookWindow();
	void ToggleSocialWindow();
	void ToggleGuildWindow();
	void ToggleShortenKeyWindow();
	
	void ClearPartyWindow();		/// 파티윈도우
	void HidePartyMenu();			/// 파티메뉴
	void HidePartyDivideMenu();		/// 파티 분배메뉴
	void HideLootingWindow();		/// 루팅윈도우닫기 - 닫으면서 서버에 패킷 보냄
	void HideAllNpcWindow();		/// npc와 관련있는 윈도우 모두 닫기
	void HideTarotControlWindow();
	void HideTradeWindow();	
	void HideCardBookWindow();
	void HideTodayWordWindow();

    void ShowHeroInfoWindow();
	void ShowInventoryWindow();
	void ShowNoteWindow();
	void ShowFriendWindow();
	void ShowOptionWindow();
	void ShowLootingWindow();					/// 아이템 습득 상자 윈도우
	void ShowRevivalWindow();					/// 부활 윈도우
	void ShowTarotWindow( unsigned char page );	/// 타로개설, 설정 윈도우
	void ShowTarotControlWindow();
	void ShowItemCountWindow( eMSGBox_Event eventtype, unsigned int slotIndex0, unsigned int slotIndex1 );
	void ShowItemCountWindow( eMSGBox_Event eventtype, unsigned int itemIndex );
	void ShowItemCountWindow( eMSGBox_Event eventtype, unsigned int slotIndex, unsigned int itemIndex, unsigned int maxValue );
	void ShowMoneyWindow( eMoneyType type, eMSGBox_Event eventtype, unsigned int slotIndex = UINT_MAX );
	void ShowMoneyModifyWindow( eMoneyType type, eMSGBox_Event eventtype, unsigned int slotIndex = UINT_MAX );
	void ShowTradeWindow();
	void ShowWareHouse();
	void ShowNpcStoreWindow( unsigned long npcIndex );
	void ShowSkillWindow();
	void ShowSkillStore( unsigned long npcId );
	void ShowNpcWindow( unsigned int npcClassIdx, unsigned long npcIndex, LPTSTR npcName );
	void ShowExitWindow();
	void ShowQuestWindow();
	void ShowNpcDisjointWindow();
	void ShowCardBookWindow();
	void ShowColumnMonSlot();
	void ShowDMMsgWindow( unsigned long leftTime );
	void ShowGuildWindow();
	void ShowNpcTarotWindow( unsigned long deckIdx, unsigned long price, unsigned long* spreadArr, short size );
	void ShowTodayWordWindow();
	
	void ShowItemDumpAskWindow( unsigned int slotIndex );
	void ShowItemBuyAskWindow( unsigned long itemIndex, unsigned short count );
	void ShowItemSellAskWindow( unsigned int slotIndex, unsigned short count );
	void ShowItemUserSellBuyAskWindow( unsigned int slotIndex, unsigned long itemIndex, 
									   unsigned short count, unsigned long price );
	void ShowItemPutCard( eMSGBox_Event eventtype, unsigned int slotIndex0, unsigned int putSlot, unsigned long itemIndex );
	void ShowItemCardBook( eMSGBox_Event eventtype, unsigned int slotIndex0, unsigned int slotIndex1, unsigned long itemIndex );
	
	/// 루팅윈도우에 스페이스바 이벤트 주기
	void EventLootingSpacebar();

	cBaseObject* GetPartyObject( int i );

	cInventoryWindow*		GetInventoryWindow()	{ return mpInventoryWindow; }
	cTradeWindow*			GetTradeWindow()		{ return mpTradeWindow; }
	cItemTipWindow*			GetItemTip()			{ return mpItemTip; }
	cSkillTipWindow*		GetSkillTip()			{ return mpSkillTip; }
	cBuffToolTipWindow*		GetBuffTip()			{ return mpBuffTip; }
	cSimpleTipWindow*		GetSimpleTip()			{ return mpSimpleTip; }
	cBuffWindow*			GetBuffWindow()			{ return mpBuffWindow; }
	cBuffWindow*			GetDeBuffWindow()		{ return mpDeBuffWindow; }
	cSkillWindow*			GetSkillWindow()		{ return mpSkillWindow; }
	cTargetWindow*			GetTargetWindow()		{ return mpTargetWindow; }
	cHeroInfoWindow*		GetHeroInfoWindow()		{ return mpHeroInfoWindow; }
	cHeroStateWindow*		GetHeroStateWindow()	{ return mpHeroStateWindow; }
	cPartyWindow*			GetPartyWindow()		{ return mpPartyWindow; }
	cPartyDivideMenu*		GetPartyDivideMenu()	{ return mpPartyDivideMenu; }
	cTarotWindow*			GetTarotWindow()		{ return mpTarotWindow; }
	cTarotControlWindow*	GetTarotControlWindow() { return mpTarotControlWindow; }
	cLootingWindow*			GetLootingWindow()		{ return mpLootingWindow; }
	cSmallMiniMapWindow*	GetSmallMinimapWindow() { return mpSmallMiniMapWindow; }
	cMiniMapWindow*			GetMinimapWindow()		{ return mpMiniMapWindow; }
	cFriendWindow*			GetFriendWindow()		{ return mpFriendWindow; }
	cMenuButtonWindow*		GetMenuButtonWindow()	{ return mpMenuButtonWindow; }
	cMenuOptionWindow*		GetMenuOptionWindow()	{ return mpMenuOption; }
	cRevivalWindow*			GetReVivalWindow()		{ return mpRevivalWindow; }
	cNpcStoreWindow*		GetNpcStore()			{ return mpNpcStoreWindow; }
	cWareHouseWindow*		GetWareHouseWindow()	{ return mpWareHouseWindow; }
	cWareHouse2Window*		GetWareHouse2Window()	{ return mpWareHouse2Window; }
	cMoneyWindow*			GetMoneyWindow()		{ return mpMoneyWindow; }
	cQuestWindow*			GetQuestWindow()		{ return mpQuestWindow; }
	cNpcWindow*				GetNpcWindow()			{ return mpNpcWindow; }
	cNpcRewardWindow*		GetNpcRewardWindow()	{ return mpNpcRewardWindow; }
	cNpcDisjointWindow*		GetNpcDisjointWindow()	{ return mpNpcDisjointWindow; }
	cNoteWindow*			GetNoteWindow()			{ return mpNoteWindow; }
	cExitWindow*			GetExitWindow()			{ return mpExitWindow; }
	cExitMsgWindow*			GetExitMsgWindow()		{ return mpExitMsgWindow; }
	cEnhancedWindow*		GetEnhancedWindow()		{ return mpEnhancedWindow; }
	cQuestSimpleWindow*		GetQuestSimpleWindow()	{ return mpQuestSimpleWindow; }
	cUserSellWindow*		GetUserSellWindow()		{ return mpUserSellWindow; }
	cItemMsgWindow*			GetItemMsgWindow()		{ return mpItemMsgWindow; }
	cItemCountWindow*		GetItemCountWindow()	{ return mpItemCountWindow; }
	cUserSellSearchWindow*  GetUserSellSearchWindow() { return mpUserSellSearchWindow; }
	cPutCardWindow*			GetPutCardWindow()		{ return mpPutCardWindow; }
	cDuelMsgWindow*			GetDuelMsgWindow()		{ return mpDuelMsgWindow; }
	cDuelWindow*			GetDuelWindow()			{ return mpDuelWindow; }
	cCardBookWindow*		GetCardBookWindow()		{ return mpCardBookWindow; }
	cSendNoteWindow*		GetSendNoteWindow()		{ return mpSendNoteWindow; }
	cReceiveNoteWindow*		GetReceiveNoteWindow()	{ return mpReceiveNoteWindow; }
	cSkillStoreWindow*		GetSkillStoreWindow()	{ return mpSkillStoreWindow; }
	cColumnQuickSlot*		GetColumnQuick()		{ return mpColumnQuickSlot; }
	cRowQuickSlot*			GetRowQuick()			{ return mpRowQuickSlot; }
	cSocialWindow*			GetSocialWindow()		{ return mpSocialWindow; }
	cDMScoreWindow*			GetDMScoreWindow()		{ return mpDMScoreWindow; }
	cDMResultWindow*		GetDMResultWindow()		{ return mpDMResultWindow; }
	cDMRevivalWindow*		GetDMRevivalWindow()	{ return mpDMRevivalWindow; }
	cDMRankingListWindow*	GetDMRankingListWindow() { return mpDMRankingListWindow; }
	cChatButtonWindow*		GetChatButtonWindow()	{ return mpChatButtonWindow; }
	cChatWindow*			GetChatWindow()			{ return mpChatWindow; }
	cTitleWindow*			GetTitleWindow()		{ return mpTitleWindow; }
	cGuildWindow*			GetGuildWindow()		{ return mpGuildWindow; }
	cFSColumnQuickSlot*		GetFSColumnQuickSlot()  { return mpFSColumnQuickSlot; }
	cFSRowQuickSlot*		GetFSRowQuickSlot()		{ return mpFSRowQuickSlot; }
	cColumnQuickSlot*		GetColumnQuickSlot()	{ return mpColumnQuickSlot; }
	cRowQuickSlot*			GetRowQuickSlot()		{ return mpRowQuickSlot; }
	cGuildButtonWindow*		GetGuildButtonWindow()  { return mpGuildButtonWindow; }
	cGuildMarkWindow*		GetGuildMarkWindow()	{ return mpGuildMarkWindow; }
	cGuildSendNoteWindow*	GetGuildSendNoteWindow() { return mpGuildSendNoteWindow; }
	cTodayWordWindow*		GetTodayWordWindow()	{ return mpTodayWordWindow; }
	cItemMixWindow*			GetItemMixWindow()		{ return mpItemMixWindow; }

	cBagWindow*				GetBagWindow( unsigned int i ) { return mpBagWindow[i]; }
	cChatExtraWindow*		GetChatExtraWindow( unsigned int i ) { return mpChatExtraWindow[i]; }
	cPartyStateWindow*		GetPartyStateWindow( unsigned int i );

	cRButtonMenuWindow*		GetRButtonMenuWindow() { return mpRButtonMenuWindow; }

	void ApplyWinodwOption_Character();

public:
	/// 단일체를 리턴
	static cGameUIManager* GetSingleton();

protected:
	bool CheckHeroState();

	/// window player save pos
	bool LoadWindowPos( const cString& pathName );
	void SaveWindowPos( const cString& pathName );

	bool LoadWindowOption_Character( const cString& pathName );
	void SaveWindowOption_Character( const cString& pathName );

	void UpdateWindowOption_Character();

	void ApplyWindowPos();
	void UpdateWindowPos();

protected:
	/// 전체 ui 생성 여부.
	bool	mInitAllUI;

	/// 채팅 관리자
	cChatManager* mpChatManager;

	/// 채팅 윈도우
	cChatWindow* mpChatWindow;

	/// 채팅 확장 윈도우
	cChatExtraWindow* mpChatExtraWindow[3];

	/// 타겟 윈도우
	cTargetWindow* mpTargetWindow;

	/// Hero 정보 윈도우
	cHeroInfoWindow* mpHeroInfoWindow;

	/// Hero 상태 윈도우 ( 화면 왼쪽 상단 )
	cHeroStateWindow* mpHeroStateWindow;

	/// Npc 윈도우
	cUIBackWindow* mpNpcBackWindow;
	cNpcWindow* mpNpcWindow;
	cNpcStoreWindow* mpNpcStoreWindow;

	/// 인벤토리 윈도우
	cInventoryWindow* mpInventoryWindow;

	/// 가방 윈도우
	cBagWindow* mpBagWindow[3];

	/// 창고 윈도우
	cWareHouseWindow* mpWareHouseWindow;
	cWareHouse2Window* mpWareHouse2Window;
	cMoneyWindow*	mpMoneyWindow;

	/// 아이템
	cItemCountWindow* mpItemCountWindow;

	/// 아이템 메세지 윈도우
	cItemMsgWindow* mpItemMsgWindow;

	/// 거래 윈도우
	cTradeWindow* mpTradeWindow;

	/// 스킬 윈도우
	cSkillWindow* mpSkillWindow;

	cSkillStoreWindow* mpSkillStoreWindow;

	cBuffWindow* mpBuffWindow;
	cBuffWindow* mpDeBuffWindow;

	/// 드래그 윈도우
	cDragWindow* mpDragWindow;

	/// 팁 윈도우
	cItemTipWindow* mpItemTip;
	cSkillTipWindow* mpSkillTip;
	cBuffToolTipWindow* mpBuffTip;
	cSimpleTipWindow* mpSimpleTip;
	cChatTipWindow*	mpChatItemTip;

	/// 하단 버튼 윈ㄷ우
	cMenuButtonWindow* mpMenuButtonWindow;
	
	/// 하단 메뉴 윈도우
	cMenuHeroWindow*		mpMenuHero;
	cMenuCommuityWindow*	mpMenuCommu;
	cMenuOptionWindow*		mpMenuOption;

	/// 미니맵 윈도우
	cMiniMapWindow* mpMiniMapWindow;

	/// 캐스팅 게이지
	cCastingBar* mpCastingBar;

	/// 옵션 윈도우
	cOptionWindow* mpOptionWindow;

	/// small 미니맵 윈도우
	cSmallMiniMapWindow* mpSmallMiniMapWindow;

	/// 쪽지 매니저 윈도우
	cNoteWindow* mpNoteWindow;

	/// 쪽지 보내기
	cSendNoteWindow* mpSendNoteWindow;

	/// 쪽지 받기
	cReceiveNoteWindow* mpReceiveNoteWindow;

	/// 친구 윈도우
	cFriendWindow* mpFriendWindow;

	/// 퀵슬롯 (행)
	cColumnQuickSlot* mpColumnQuickSlot;

	/// 퀵슬롯 (열)
	cRowQuickSlot* mpRowQuickSlot;

	/// FS 퀵슬롯
	cFSColumnQuickSlot* mpFSColumnQuickSlot;

	/// FS 퀵슬롯
	cFSRowQuickSlot* mpFSRowQuickSlot;

	/// 타롯 점집 메인..
	cTarotWindow*		mpTarotWindow;

	/// 타롯 점집 관리 윈도우 ( 개설자 )
	cTarotControlWindow* mpTarotControlWindow;

	/// 노점상 개설 윈도우 
	cUserSellWindow* mpUserSellWindow;
	cUserSellSearchWindow* mpUserSellSearchWindow;

	/// 게임 종료 윈도우
	cExitWindow*	mpExitWindow;
	cExitMsgWindow* mpExitMsgWindow;

	/// 아이템 습득 상자 윈도우
	cLootingWindow*		mpLootingWindow;

	/// 부활 윈도우
	cRevivalWindow*		mpRevivalWindow;

	/// 파티 관리 윈도우
	cPartyWindow*	mpPartyWindow;

	/// 파티 상태 윈도우
	cPartyStateWindow*	mpPartyStateWindow[5];

	/// 파티 메뉴
	cPartyMenu*		mpPartyMenu;

	/// 파티 분배 메뉴
	cPartyDivideMenu*	mpPartyDivideMenu;

	/// 퀘스트 윈도우
	cQuestWindow*	mpQuestWindow;

	/// npc 보상 정보 윈도우
	cNpcRewardWindow*	mpNpcRewardWindow;

	/// npc 분해 윈도우
	cNpcDisjointWindow*	 mpNpcDisjointWindow;

	/// 아이템 강화 윈도우
	cEnhancedWindow*	mpEnhancedWindow;

	/// 퀘스트 간략정보 출력 윈도우
	cQuestSimpleWindow*	mpQuestSimpleWindow;

	/// 카드장착 윈도우
	cPutCardWindow*		mpPutCardWindow;

	/// 결투 윈도우
	cDuelMsgWindow*		mpDuelMsgWindow;
	cDuelWindow*		mpDuelWindow;
	bool				mDuelMode;

	/// 카드 컬렉션 북
	cCardBookWindow*	mpCardBookWindow;

	/// 사회 윈도우
	cSocialWindow*		mpSocialWindow;

	/// 데스매치 점수 윈도우
	cDMScoreWindow*		mpDMScoreWindow;
	cDMRankingListWindow* mpDMRankingListWindow;

	/// 데스매치 결과 윈도우
	cDMResultWindow*	mpDMResultWindow;

	///
	cDMMsgWindow*		mpDMMsgWindow;
	cDMRevivalWindow*	mpDMRevivalWindow;

	///
	cChatButtonWindow*	mpChatButtonWindow;

	/// 호칭관리 윈도우
	cTitleWindow*		mpTitleWindow;

	/// 길드 직위 버튼 윈도우
	cGuildButtonWindow* mpGuildButtonWindow;

	/// 길드관리 윈도우
	cGuildWindow*		mpGuildWindow;

	/// 길드마크 등록 윈도우
	cGuildMarkWindow*	mpGuildMarkWindow;

	/// 길드 전체 쪽지 윈도우
	cGuildSendNoteWindow*	mpGuildSendNoteWindow;

	/// 단축 정보 윈도우
	cShortenKeyWindow*	mpShortenKeyWindow;

	///
	cRButtonMenuWindow*	mpRButtonMenuWindow;

	/// 오늘의 한마디 윈도우
	cTodayWordWindow*	mpTodayWordWindow;

	/// 아이템 조합 윈도우
	cItemMixWindow*		mpItemMixWindow;

	/// save window pos
	typedef tPointerHashMap<unsigned long, void*> cSaveWindowPos;
	typedef tArray<unsigned long> cSaveQuestArr;
	cSaveWindowPos	mSaveWindowInfo;

	sChatWinOption	mChatWinOption[4];
	int				mChatBoxMaxRow;
	float			mMiniWinPer;

	unsigned long	mQuestCharacterIdx;
	cSaveQuestArr	mQuestCheckArr;
};

inline cPartyStateWindow* cGameUIManager::GetPartyStateWindow( unsigned int i )
{
	if( i >= 0 && i < 5 )
		return mpPartyStateWindow[i];
	else
		return 0;
}

inline cGameUIManager* cGameUIManager::GetSingleton()
{
	return mpSingleton;
}

#define GAMEUI cGameUIManager::GetSingleton()
