#pragma once //#include //#include #include #include #include #include "STitleDB.h" #include "SGameUIMgr.h" #include "SStringDB.h" const int c_Max_SubTitle_Num = 5; const int c_Available_SUbTitle_Max_Rank = 6; //6 랭크 이상은 부호칭으로 사용 못한다. namespace TITLEMGR { enum { TITLE_STATUS_OPEN = ( 1 << 0 ), // 공개 된거 TITLE_STATUS_ACHIEVE = ( 1 << 1 ), // 획득 한거 TITLE_STATUS_BOOKMARK = ( 1 << 2 ) // 즐겨찾기 }; enum{ EMPTY_TITLE = -1, MAIN_TITLE = 0, SUB_TITLE =1 }; struct stCondition{ int nTypeID; // 타입 id __int64 nCount; // 횟수 __int64 nCurCount; // 현재 횟수 bool bState; // 달성조건, 공개조건 int nCategoryID; // 카테고리 ID int nCategoryValue[3]; // 카테고리 상세값 bool IsAchieveCondition( ){ return bState; } // 획득조건 }; struct stTitleRes{ TitleResource m_title; std::vector vCondition; }; struct stTitleUI{ stTitleUI(int _id, int _stringID, bool _bookmark, bool _bUsing, bool _bArchive, bool _bOpen, bool _bIsNew ): nID(_id),iStringID(_stringID), bBookMark(_bookmark), bUsing(_bUsing), bAchieve(_bArchive), bOpen(bOpen),bIsNew(_bIsNew) {} int nID; // 호칭 ID int iStringID; // 호칭 타이틀 bool bBookMark; // 즐겨찾기 bool bUsing; // 장착중인가 bool bAchieve; // 획득 bool bOpen; // 공개 bool bIsNew; // 새로 획득,공개 된 호칭 }; struct stTitleUsingID{ stTitleUsingID(){ nMain = EMPTY_TITLE; nBeforeMain =EMPTY_TITLE; for(int i=0 ; i &c_TitleRes; const std::multimap &c_TitleConRes; const std::map &c_TitleConTypeRes; std::map m_TitleRes; // 통합 타이틀 리소스 std::map> m_CheckRes; // ConditionType을 키로 갖는 호칭ID의 벡터 들의 맵.. std::vector m_TitleUiRes; // ui 출력을 위한 데이터 std::vector m_TitleUiResSort; // UI 출력을 위한 정렬된 데이터 ->실제로 사용되는것은 이놈.. stTitleUsingID m_UsingID; // 사용중인 주,부 ID std::vector m_SortingList; // 정렬된 아이디 벡터 stTitleSort m_SortState; // 정렬상태 관리 std::map m_QuestInfo; // 퀘스트 상세정보창에 호칭보상 스트링을 얻기 위한 맵 void Init(); void InitMakeCondition( int id , stTitleRes& titleRes); void InitCheckRes( int TitleID, int TypeID ); bool m_IsNewTitleExist; // 새로 획득한 호칭이 있는지 여부(이 플래그에 따라 정렬방식이 다르다.) void SetNewTitleExist(bool flag); // m_IsNewTitleExist 설정 및 알람 호출 void SendNewTitleNotify(); // ui에 새로운 호칭 상태 변경 알림 void SetInfoForQeust(stTitleRes &titleRes); // 퀘스트 상세정보창에 호칭 보상 스트링 저장 맵 구성 함수 public: STitleMgr(); virtual ~STitleMgr(); static STitleMgr &GetInstance() { static STitleMgr _inst; return _inst; } void SetMsgTitleData( struct SGameMessage*pMsg ); void SetMsgTitleList( SGameMessage *pMsg ); // 호칭 리스트 void SetMsgConditionList( SGameMessage *pMsg ); // 조건 리스트 void SetMsgMainTitleUsing( SGameMessage *pMsg ); // 주호칭 장착 void SetMsgSubTitleUsing( SGameMessage *pMsg ); // 부호칭 장착 void SetMsgRemainTimeTitle( SGameMessage *pMsg ); // 주호칭 남은 쿨타임 void SetMsgCondition( SGameMessage *pMsg ,bool update = false); // 호칭 조건의 상태 변경 void SetMsgBookmark( SGameMessage *pMsg); // 북마크 void SetMsgOpenTitle( SGameMessage *pMsg); // 호칭 공개 void SetMsgAchieveTitle( SGameMessage *pMsg); // 호칭 획득 void SetCondition( int id , __int64 count); // 호칭 조건 값 변경 int GetTitleStringID( int nID ); // 호칭 아이디로 호칭 스트링 아이디 얻기 TITLEMGR::stTitleUI* GetTitleUiByID( int nID ); const std::vector& GetTitleUI() {return m_TitleUiResSort;} int GetAchieveTitleCount(); // 획득한 호칭 갯수 stTitleUsingID& GetEquipList() {return m_UsingID;} bool IsAllEquip(); void SetMainTitleUsingState( int id ,AR_HANDLE handle); // 호칭사용상태 변경 void SetSubTitleUsingState(int id, int index); void SetTitleUsingStateBoth(int id, int _id); // 원본벡터와 소팅벡터의 장착상태를 변경시켜준다. // 정렬용 int ReQuestSorting(int Kind); // 정렬을 하고 상태값을 넘긴다. void TitleSorting(int kind, int state); void Refresh() { m_TitleUiResSort = m_TitleUiRes; } void RequestSetUpMainTitle( int nID ); void RequestSetUpSubtitle( int nID, int nIndex ); void RequestSetDownMainTitle(); void RequestSetDownSubtitle( int nID, int nIndex ); void RequestSetBookmark( int nID ); int GetTitleCount() { return m_TitleUiRes.size(); } const bool getTitleRes( int nID , stTitleRes& res); int GetTitleValue( int id ); // (조건타입의 첫번째 상세값을 얻는다) bool IsNewTitleExist() {return m_IsNewTitleExist;} // 새 호칭이 있는지 void SetNewTitleClose() ; bool IsEquipID( int nID ); void ResetTitle(); std::string GetTitleNameForQuest( int questID ); // 퀘스트 ID로 해당 호칭 이름 얻기 };