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

164 lines
5.1 KiB
C++

#pragma once
//#include "SUIWnd.h"
//#include "SUIUtil.h"
//#include <vector>
class SUIDisplayInfo;
class KUIControlQuestInfoManager;
class KUIControlCheck;
class SUIQuestListWnd : public SUIWnd
{
public:
SUIQuestListWnd( SGameManager* pGameManager, SUIDisplayInfo* pDisplayInfo )
: SUIWnd( pGameManager )
, m_pDisplayInfo( pDisplayInfo )
, m_nFocus( -1 )
, m_nScrollPos( 0 )
{
m_nSysMenuPosX = -99;
m_nSysMenuPosY = -99;
m_mouseX = 0;
m_mouseY = 0;
m_questInfoMgr = NULL;
m_closeButton = NULL;
m_updateRefreshTime = 0;
SUIQuestListWnd::setFirst(true);
}
virtual ~SUIQuestListWnd(); // 2011.05.17 - servantes
virtual void Process(DWORD dwTime);
virtual void PumpUpMessage( LPCSTR lpszControlID, DWORD nMessage, DWORD lparam, DWORD wparam );
virtual void* Perform( KID id, KArg& msg );
virtual void ProcMsgAtStatic( SGameMessage* pMsg );
virtual void OnNotifyUIWindowOpen( bool bOpen, bool bLimitWnd = true );
virtual bool InitControls( KPoint kPos );
virtual DWORD OnMouseMessage(DWORD dwMessage, int x, int y);
static bool isFirst() { return m_isFirst; }
static void setFirst(bool first) { m_isFirst = first; }
private:
std::string CoordinateQuestName( int nDifficulty, int nLimitLevel, const std::string & strQuestName );
void Refresh(bool sortCheck = false);
/// -1 이면 없앤다
void UpdateQuestInfo();
void addOpacityList();
void SetItemSlot( ItemBase::ItemCode code, int nCount, const char *szIconControl, const char *szNumberControl );
void IconFocus( int nIndex );
bool IsRewardQuest( QuestBase::QuestCode code );
void DelRewardQuest( QuestBase::QuestCode code );
/// 2011.10.31 아무것도 선택이 안되어 있을 때, 맨처음 퀘스트를 선택한다. - prodongi
void selectFirstQuest();
void selectQuest(int index);
protected:
/// 2011.09.15 - prodongi
void updateOpacity(DWORD elapsedtime);
void setChoiceCheck(char const* sectionStr, char const* controlID);
/// 2011.09.28 퀘스트 창의 투명모드 토글
void toggleOpacity();
void setOpacity(bool opacity);
void toggleChoice();
void setChoice(bool check);
/// 2011.11.03 정렬을 하면 인덱스가 바뀌기 때문에 선택된 인덱스를 재선택 해준다 - prodongi
void reselectIndexBySort();
/// 2011.11.03 controlID에서 str을 제외한 offset값을 구한다 - prodongi
int extractScrollOffset(char const* controlID, char const* str);
/// 2011.12.01 확장 - prodongi
void toggleExpansion();
void setExpansion(bool expansion);
void setAllFold(bool fold, bool refresh = true);
void toggleAllFold(bool refresh = true);
/// 2011.12.07 리스트들의 접힌 상태에 따라서 전체 접기 버튼 상태를 갱신해 준다 - prodongi
void updateAllFoldStatus();
/// 접히고 전체 퀘스트 보기 상태
void setDefaultStatus();
/// 2011.12.12 스크롤을 시작 위치로 초기화
void setScrollStartPosition();
protected:
std::vector< QuestBase::QuestCode > m_vRewardList; ///< 보상 받을 수 있는 퀘스트 리스트
size_t m_nScrollPos; ///< 스크롤바 처리
int m_nFocus;
QuestBase::QuestCode m_nQuestCode;
SUIDisplayInfo* m_pDisplayInfo;
int m_nSummaryIndex;
int m_nSysMenuPosX, m_nSysMenuPosY;
bool m_bTransparent;
int m_nDataIndex;
int m_oldDataIndex; /// 2011.09.19 - prodongi
//KRect m_BackRect;
/// 2011.09.09 - prodongi
int m_mouseX;
int m_mouseY;
sui::sOpacityMouseChecker m_opacityList;
KUIControlQuestInfoManager* m_questInfoMgr;
DWORD m_time;
KUIControlSimpleButton* m_closeButton;
bool m_isChangeInfoCheck;
AR_TIME m_updateRefreshTime;
/// 2011.12.01 타이틀 컨트롤 - prodongi
KUIControlStatic* m_titleBar;
/// 확장 상태
bool m_isExpansion;
/// nui의 원본 사이즈
KSize m_oriSize;
/// 2011.12.07 전체 접기 상태 - prodongi
bool m_isAllFoldStatus;
/// 2011.09.26 - prodongi
struct sCheckChoice
{
void init(KUIControl* wnd);
void toggle();
void setCheck(bool check);
bool m_isCheck;
KUIControl* m_wnd;
};
sCheckChoice m_checkChoice;
/// 2011.09.28 투명 모드 버튼 - prodongi
struct sOpacityButton
{
void init(KUIControlSimpleButton* wnd);
void setOpacity(bool opacity);
void toggle();
bool m_isOpacity;
KUIControlSimpleButton* m_wnd;
};
sOpacityButton m_opacityButton;
/// 2011.09.30 상세보기/월드맵 보기 버튼 설정 - prodongi
struct sDetailViewCheckButton
{
enum CHECK_TYPE { WORLDMAP, INFO, NONE };
void init(SUIWnd* parent);
void setCheck(CHECK_TYPE type, bool bCheck);
void update(DWORD elapsedtime, SGameInterface* gameInterface);
/// 퀘스트 창이 open 했을 때, 호출 되는 함수
void open(SGameInterface* gameInterface);
/// 월드맵과 인포창 중에서 어떤 창이 위에 있는지 체크
void checkTopWnd(SGameInterface* gameInterface);
KUIControlCheck* m_wndWorldMap;
KUIControlCheck* m_wndInfo;
float m_updateTime;
};
sDetailViewCheckButton m_detailViewCheckButton;
/// 2011.11.07 맨 처음 로드 ‰榮募?것을 나타냄, 새로 받은 퀘스트는 new 설정을 해줘야 되는데,
/// 새로 받은 퀘스트인지, 처음 접속해서 받은 퀘스트인지 구분하기 위해 쓰임 - prodongi
static bool m_isFirst;
};