/* ========================================================================== * ÆÄ ÀÏ : UIManager.h * ¸ñ Àû : * ÀÛ ¼º ÀÚ : À̼ø±Ô * ÀÛ ¼º ÀÏ : 2006.09.25 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "UIEvent.h" #include "UISkin.h" #include "UIProperty.h" #include "UIRect.h" #include "BaseStage.h" #include "IndexGenerator.h" #include "Item_Common.h" const unsigned int MAXEDIT_DEFAULTLENGTH = 8; const unsigned int DEFAULT_SCREENWIDTH = 1024; const unsigned int DEFAULT_SCREENHEIGHT = 768; const int MODEIMAGE_W = 256; const int MODEIMAGE_H = 60; const int MODEIMAGE_Y = 100; const int LANGUAGE_ICON_INDEX = 10000; class cUINode; class cUIContainer; class cUIRootNode; class cUIWindow; class cUICursor; class cUIIDList; class cUIText; class cUIImageFont; class cUIFuncText; class cUIFuncTextNode; class cUINpcTelling; class cMsgBox; class cDragWindow; class cUnionDragWindow; class cUnionIcon; class cApplication; class cIconParam; class cBaseIcon; class cUIRoundGauge; class cPage; class cCenterText; class cCenterNoticeText; class cModeCenterImage; class cPlaneObject; struct sSceneData; class cTipWindow; class cItemTipWindow; class cSkillTipWindow; class cBuffToolTipWindow; class cSimpleTipWindow; class cChatTipWindow; class cQuestTipWindow; enum eMSGBox_Type; enum eMSGBox_Event; enum eBoxSkin_Type; enum eDragFrom; enum eTip_Kind; struct sPlaneImage { cPlaneObject* mpImage; bool mShow; bool mLeftTop; // ÁÂÇ¥ ±âÁØ ( 1 : left top, 0 : right bottom ) cUIPos mOriginPos; unsigned char mAlign; sPlaneImage() { mpImage = 0; mShow = false; mLeftTop = true; mOriginPos.mX = 0; mOriginPos.mY = 0; mAlign = 0; } }; /// UI °ü¸®ÀÚ class cUIManager { friend class cApplication; static cUIManager* mpSingleton; public: cUIManager(); ~cUIManager(); /// ÃʱâÈ­ bool Init(); void Open(); void Close(); void SetCurrentStage( eSTAGE stageIndex ); /// ÃÖ»óÀ§·Î ¿Ã¶ó°¡¾ßÇÏ´Â Node¸¦ µî·ÏÇÑ´Ù. void GotoFrontNode( cUINode* node ); void RemoveFrontNode( unsigned long frontId ); /// ¸Þ¼¼Áö¹Ú½ºµéÀ» ¸Ç¾ÕÀ¸·Î º¸³½´Ù void GotoFrontMsgBox(); /// À©µµ¿ì ´Ý±â bool HideESC(); void NetUnLockAllUI(); // stage º¯°æ½ÃÁ¡ void UIOpen(); void UIClose(); /// ½ºÅ² üÀÎÁö void ChangeSkin( const cString& pathName ); /// ¾÷µ¥ÀÌÆ® void Process( unsigned long deltaTime, unsigned long accumTime ); void PreRender(); void Render(); /// root visible ¼¼ÆÃ void ShowGameUI(); void HideGameUI(); // ¸Þ¼¼Áö¹Ú½º »ý¼º bool CreateMsgBox( eSTAGE handler, eMSGBox_Type modaltype, eMSGBox_Event eventtype, eBoxSkin_Type skintype, LPCTSTR text, LPCTSTR caption, void* extraData = 0, cUIWindow* caller = 0, unsigned long total = 0, bool printTime = false, bool result = false, unsigned int enableLen = 0, unsigned int maxLen = MAXEDIT_DEFAULTLENGTH ); void SetModal( cUIWindow* window ); void DestroyMsgBox( eMSGBox_Event eventType ); void DestroyMsgBox( cUIWindow* window ); void DestroyAllMsgBox(); /// msgbox ŸÀÔ¸¸ ã¾Æ¼­ »èÁ¦ // ÃÖ»ó´Ü ¸Þ¼¼Áö ¹Ú½º¿¡ À̺¥Æ® Àü´Þ void SendEventTopMsgBox( bool result ); void SendEventToMsgbox( eMSGBox_Event eventtype, bool result ); void ChangeTextMsgBox( eMSGBox_Event type, LPCTSTR text ); // ÅØ½ºÆ® º¯°æ /// »ç¿ëÀڷκÎÅÍ À̺¥Æ®¸¦ ÅëÁö bool PostEventFromUser( const cUIEvent& event ); /// »õ·Î¿î À©µµ¿ì show ½Ã ¸®¼ÂÇÒ µ¥ÀÌÅÍó¸® void CheckEventNode( cUINode* n ); /// ¸¶¿ì½º ĸÃÄ ³ëµå¸¦ ¼³Á¤ ¹× ÇØÁ¦ void SetCaptureNode( cUINode* node ); void ReleaseCaptureNode( cUINode* node ); /// È£¹ö³ëµå ÇØÁ¦ void ReleaseHoverNode( cUINode* node ); /// Æ÷Ä¿½º ³ëµå¸¦ ¼³Á¤ ¹× ÇØÁ¦ void SetFocusedNode( cUINode* node ); void ReleaseFocusedNode( cUINode* node ); /// ¸¶¿ì½º À̺¥Æ® ¹Þ´Â ³ëµå ÃʱâÈ­( È£¹ö, ĸÃÄ ) void ReleaseEventNode(); /// ÇöÀç µî·ÏµÈ Æ÷Ä¿½º ³ëµå¸¦ °­Á¦ Á¦°ÅÇÑ´Ù. void ClearFocusedNode(); /// ÆÁ void ShowItemTip( eTip_Kind tipkind, const cUIPos& pos, unsigned long itemIndex, unsigned short slotIndex, bool forcedShowEquipTip ); void ShowItemTip( eTip_Kind tipkind, const cUIPos& pos, unsigned long itemIndex, unsigned char enhance ); void ShowOtherItemTip( eTip_Kind tipkind, const cUIPos& pos, sInventory& inven ); void ShowSkillTip( eTip_Kind tipkind, cSkillTipWindow* pTip, const cUIPos& pos, unsigned long skillIdx, unsigned char stepIdxskill, unsigned long jobIdx = ULONG_MAX); void ShowBuffTip( cBuffToolTipWindow* pTip, const cUIPos& pos, unsigned long uniqueIdx, unsigned long influenceIdx, bool showTime = true ); void ShowCommunityTip( cSimpleTipWindow* pTip, const cUIPos& pos, cStringT str ); void ShowQuestTip( cQuestTipWindow* pTip, const cUIPos& pos ); void ShowChatItemTip( const cUIPos& pos, sInventory& inven ); void ShowUITip( const cUIPos& pos, unsigned long tipIdx ); void HideTip(); /// µå·¡±× À©µµ¿ì void SetDragWindow( cDragWindow* dragWindow ); void ShowDrag( cUIWindow* pcaller, eDragFrom dragFrom, cBaseIcon* icon, const cUIPos& pos, bool shift ); bool IsVisibleDrag(); void SetUnionDragWindow( cUnionDragWindow* win ); void ShowUnionDrag( cUIWindow* pcaller, cUnionIcon* icon, const cUIPos& pos ); bool IsVisibleUnionDrag(); void HideDrag( cUIWindow* pcaller ); /// npc ´ëÈ­»óÅ¿¡¼­ ¿­·È´ø À©µµ¿ìµé( ´ëÈ­»óÅ ³¡³ª¸é ´Ý¾Æ¾ß ÇÏ´Â À©µµ¿ì¸®½ºÆ® ) void AddCloseByNpcHide( cUIWindow* n ); void CloseByNpcHide(); /// À©µµ¿ì show ¿¹¾à void SetRestoreShow( cUIWindow* n ); /// Ưº°ÇÑ À©µµ¿ìµéÀÇ show º¹±¸ ( npc ⠴ݾÒÀ»½Ã ) void RestoreShow(); /// ÀÚ±â ÀÚ½ÅÀÌ ¾Æ´Ñ ´Ù¸¥ À©µµ¿ì°¡ ¸¶¿ì½º Ŭ¸¯ À̺¥Æ® ¹Þ´Â°æ¿ì ÅëÁö ¸Þ¼¼Áö ¹ß»ý void AddEventOtherClick( cUIWindow* win ); /// äÆÃ ¾ÆÀÌÅÛ ÆÁ À©µµ¿ì void SetChatItemTipWindow( cChatTipWindow* win ); /// ÇöÀç ½ºÅ²À» ¸®ÅÏ cUISkin* GetSkin() const; /// ¼Ó¼ºÀ» ¸®ÅÏ cUIProperty* GetProperty() const; /// UI ID ¸®½ºÆ® Æ÷ÀÎÅÍ ¸®ÅÏ cUIIDList* GetUIIDList() const; /// ·çÆ® ³ëµå¸¦ ¸®ÅÏ cUIRootNode* GetRootNode() const; /// È£¹ö ³ëµå¸¦ ¸®ÅÏ cUINode* GetHoverNode() const; /// ¸¶¿ì½º ĸÃÄ ³ëµå¸¦ ¸®ÅÏ cUINode* GetCaptureNode() const; /// Æ÷Ä¿½º ³ëµå¸¦ ¸®ÅÏ cUINode* GetFocusedNode() const; /// cUINode* FindNodeByID( unsigned long id ); cUIWindow* GetTopMsgBox() { return mpTopMsgBox; } bool IsShowModalBox() { return (mModalList.IsEmpty() == false); } bool IsShowModalessBox() { return (mModallessList.IsEmpty() == false); } /// °¡Àå°¡±î¿î ÄÁÅ×ÀÌ³Ê ¸®ÅÏ cUIContainer* UpdateNearContainer( cUIContainer* con, bool axisX ) const; LPCTSTR GetUIText( unsigned int textId ); bool GetUIText( cStringT*, unsigned int textId ); /// À̹ÌÁö ÆùÆ® cUIImageFont* GetImageFont( unsigned int fontIndex ); /// ¾ÆÀÌÄÜ cIconParam* GetIconParam( unsigned int iconId ); /// Npc cUINpcTelling* GetNpcTelling( unsigned int npcId ) const; cUIFuncTextNode* GetNpcTextNode( unsigned int textId ); /// page bool AddPage( unsigned long pageIdx, cPage* page ); cPage* GetPage( unsigned long pageIdx ); /// scene sSceneData* GetSceneData( unsigned long sceneIdx ); // »óÀ§ºÎ¸ð·Î ¿Ã¶ó°¡¸é¼­ conÀÌ ºÎ¸ð·Î Æ÷ÇԵǴÂÁö °Ë»ç bool IsIncludeParent( cUINode* node, cUIContainer* con ); bool IsCameraEnableContainUI(); /// È­¸é Ãâ·Â ÅØ½ºÆ® void AddNoticeText( unsigned short fontIdx, LPCTSTR msg, unsigned long color, unsigned long height ); void DeleteNoticeText(); void AddEnhanceText( unsigned short fontIdx, LPCTSTR msg, unsigned long color, unsigned long height ); void DeleteEnhanceText(); // void AddDummyNoticeText( unsigned short fontIdx, LPCTSTR msg, unsigned long color, unsigned long height ); void DeleteDummyText(); // void SetMonModeImage( cPlaneObject* p ); void ClearMonModeImage( cPlaneObject* p ); void AddManagedSortUI( cUINode* node ); inline tPointerList* GetManagedSortUIList() { return &mManagedSortUIList; } // bool ModifyText( LPCTSTR text, TCHAR* out, int outSize, int maxWidth ); // À̹ÌÁö °ü¸® unsigned long AddImage( cPlaneObject* pImage, bool show, int originX, int originY, unsigned char align = 0, bool lefttop = true ); void DeleteImage( unsigned long id ); void UpdateImage( unsigned long id, bool show ); cPlaneObject* GetImage( unsigned long id ); // npc ´ëÈ­¹öưµé cUIWindow* AddNpcTalkButton( unsigned long npcIndex ); void DeleteNpcTalkButton( unsigned long npcIndex ); protected: /// ·Îµù bool LoadIDList( const cString& pathName ); bool LoadSkin( const cString& pathName ); bool LoadProperty( const cString& pathName ); bool LoadSkinText( const cStringW& pathName ); /// À̹ÌÁö ÆùÆ® bool LoadImageFonts( const cString& pathName ); /// ¾ÆÀÌÄÜ bool LoadIconParams( const cString& pathName ); /// Npc bool LoadNpcText( const cStringW& pathName ); bool LoadNpcScripts( const cString& pathName ); bool LoadNpcScript( const cString& pathName ); bool LoadNpcScene( const cString& pathName ); /// Reload ±â´É( ½ºÅ²½ºÅ©¸³Æ® º¯°æ½Ã ¸®·Îµå ) bool ReloadSkin( const cString& pathName ); /// ¸¶¿ì½º ĸÃÄ ³ëµå¸¦ °»½Å void UpdateHoveredNode( cUIContainer* root, const cUIPos& pos ); /// ÀÚ½ÅÀÌ ¾Æ´Ñ ´Ù¸¥ ¿µ¿ª Ŭ¸¯ void EventOtherClick( const cUIPos& pos ); void ShowTip(); bool MsgBoxEventProcess( const cUIEvent& event ); /// ÃÖ»óÀ§ µî·Ï Node°¡ ÀÖÀ¸¸é Àû¿ëÇÑ´Ù. void ApplyFrontNode( cUINode* node ); bool SetEquipItemTip( const cUIPos& pos, sInventory& inven, bool forcedShow ); public: /// ´ÜÀÏü¸¦ ¸®ÅÏ static cUIManager* GetSingleton(); void UpdateScreenSize( unsigned int width, unsigned int height ); protected: /// ½ºÅ² cUISkin* mpSkin; /// ¼Ó¼º cUIProperty* mpProperty; /// ÅØ½ºÆ® cUIText* mpSkinText; /// UI ID ¸®½ºÆ® cUIIDList* mpIDList; /// ·çÆ® ³ëµå cUIRootNode* mpRootNode; cUIRootNode* mpStageRootNode[eStage_Max]; /// ¸¶¿ì½º ĸÃÄ ³ëµå cUINode* mpCaptureNode; /// ¸¶¿ì½º ¿À¹ö ³ëµå cUINode* mpHoveredNode; /// Æ÷Ä¿½º ³ëµå cUINode* mpFocusedNode; /// ¸Þ½ÃÁö ¹Ú½º cUIWindow* mpTopMsgBox; /// ¸¶¿ì½º À̺¥Æ® ¹ß»ý½ÃÀÇ Æ÷Áö¼Ç°ª ÀúÀå cUIPos mMousePos; /// ÆÁ cTipWindow* mTipWindow; /// äÆÃ ÆÁ À©µµ¿ì cChatTipWindow* mChatItemTipWindow; /// µå·¡±×À©µµ¿ì cDragWindow* mpDragWindow; cUnionDragWindow* mpUnionDragWindow; /// Á¦°Å µÇ¾îÁú MsgBoxµé¿¡ ´ëÇÑ Ã³¸®.. typedef tPointerList cDestroyMsgBoxList; cDestroyMsgBoxList mDestroyMsgBoxList; typedef tPointerHashMap cApplyFrontMap; cApplyFrontMap mApplyFrontMap; cIndexGenerator mFrontIdGen; /// À̹ÌÁö ÆùÆ® typedef tHashMap cImageFontMap; cImageFontMap mImageFontMap; /// ¾ÆÀÌÄÜ typedef tHashMap cTextureMap; cTextureMap mIconTextureMap; typedef tHashMap cIconParamMap; cIconParamMap mIconParamMap; /// Npc cUIFuncText* mpNpcText; typedef tHashMap cNpcTellingMap; cNpcTellingMap mNpcTellingMap; /// ÆäÀÌÁö °ü¸®¿ë (ÆäÀÌÁöÀ妽º, ÆäÀÌÁö ³»¿ë) typedef tPointerHashMap cPageMap; cPageMap mPageMap; /// ÆäÀÌÁö Àå¸é À̹ÌÁö ½ºÅ©¸³Æ® typedef tPointerHashMap cSceneMap; cSceneMap mSceneMap; /// npc À©µµ¿ì°¡ ³¡³ª¸é º¸¿©Áà¾ßÇÒ À©µµ¿ì typedef tArray cRestoreShow; cRestoreShow mRestore; /// ¸Þ¼¼Áö¹Ú½º °ü¸®¿ë typedef tPointerList cMsgBoxList; cMsgBoxList mModalList; typedef tPointerList cMsgBoxList; cMsgBoxList mModallessList; /// eUIEVENT_MOUSE_OTHERCLICK ÅëÁö ¸Þ¼¼Áö º¸³¾ UI ¸ñ·Ï typedef tPointerList cOtherClickList; cOtherClickList mOtherClickList; /// npc À©µµ¿ì°¡ ´ÝÈú¶§ °°ÀÌ ´Ý¾ÆÁà¾ßÇÏ´Â À©µµ¿ìµé typedef tPointerArray cCloseByNpcHideArr; cCloseByNpcHideArr mCloseByNpcHideArr; /// °øÁö Ãâ·Â¿ë cCenterNoticeText* mNoticePrintText; cCenterNoticeText* mEnhancePrintText; cCenterNoticeText* mDummyNoticeText; // È­¸é Ãâ·Â¿ë À̹ÌÁö cPlaneObject* mpModeImage; // cIndexGenerator mImageIndexGenerator; // sPlaneImage typedef tHashMap cImageHashMap; cImageHashMap mImageHashMap; /// typedef tPointerList cManagedSortUIList; cManagedSortUIList mManagedSortUIList; typedef tPointerHashMap cNpcTalkButtonMap; cNpcTalkButtonMap mTalkButtonMap; }; inline void cUIManager::SetCurrentStage( eSTAGE i ) { mpRootNode = mpStageRootNode[i]; } inline void cUIManager::SetDragWindow( cDragWindow* dragWindow ) { if( dragWindow ) mpDragWindow = dragWindow; } inline void cUIManager::SetUnionDragWindow( cUnionDragWindow* win ) { if( win ) mpUnionDragWindow = win; } inline void cUIManager::SetChatItemTipWindow( cChatTipWindow* win ) { if( win ) mChatItemTipWindow = win; } inline cUISkin* cUIManager::GetSkin() const { return mpSkin; } inline cUIProperty* cUIManager::GetProperty() const { return mpProperty; } inline cUIIDList* cUIManager::GetUIIDList() const { return mpIDList; } inline cUIRootNode* cUIManager::GetRootNode() const { return mpRootNode; } inline cUINode* cUIManager::GetHoverNode() const { return mpHoveredNode; } inline cUINode* cUIManager::GetCaptureNode() const { return mpCaptureNode; } inline cUINode* cUIManager::GetFocusedNode() const { return mpFocusedNode; } inline cUIManager* cUIManager::GetSingleton() { return mpSingleton; } #define UIMAN cUIManager::GetSingleton()