Files
2022-10-26 12:25:11 +08:00

1040 lines
35 KiB
C++

/**
인터페이스 모듈 랩핑 및 다이얼로그 리스트 관리 클래스
@author
-Kim Min Wook < taiyo@webzen.co.kr >
@since
@remarks
- 소스 추가 / 정리(재영)
- InterfaceWndProc()를 메인 윈도 메시지 프로시저에서 호출되어야 한다.
- BOOL Init(), VOID Release(), VOID Render(), VOID Update()
-
@TODO
-
*/
#pragma once
#include <SolarHashTable.h>
#include <SCSlotHeader.h>
#include "IConMgr.h"
#include "SCSlot.h"
#include "Object.h"
#include "StringTableInfo.h"
#include "Pet.h"
#include "Rider.h"
#include "Player.h"
using namespace util;
class SCSlotContainer;
class CDrawBase;
class CDialogManager;
class SolarDialog;
struct MSG_BASE;
class MonsterGauge;
class SkillScriptInfo;
class Clone;
class SCItemSlot;
class PlayerAttributes;
class Rider;
class StatusIconManager;
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
class DiceCastManager;
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
class DamageMesh;
//------------------------------------------------------------------------------
// User Interface
#include "uiBase.h"
#include "uiBaseMan.h"
//------------------------------------------------------------------------------
extern const WzColor WzEliteNameColor;
extern const WzColor WzUniqueNameColor;
extern const WzColor WzLimitedItemColor;
typedef list<SKILL_EFFECT_IMAGE> SKILL_EFFECT_IMAGE_LIST;
typedef vector<DAMAGE_POPUP> DAMAGE_LIST;
typedef SolarHashTable<SolarDialog*>::iterator DIALOG_HASHTABLE_ITERATOR;
typedef void (*fn_Password)( bool bYes );
enum eIMG_TYPE
{
eIMG_NUMBER,
eIMG_SLASH,
eIMG_PERCENT,
eIMG_DOT,
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
eIMG_STAR,
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
};
enum eIMAGE_NUMBER_TYPE
{
eIMAGE_NUMBER_DEFAULT_YELLOW = 0,
eIMAGE_NUMBER_LARGE_YELLOW = 1,
eIMAGE_NUMBER_WHITE = 2,
eIMAGE_NUMBER_RED = 3,
eIMAGE_NUMBER_YELLOW = 4,
eIMAGE_NUMBER_GREEN = 5,
eIMAGE_NUMBER_BLUE = 6,
#ifdef _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
eIMAGE_NUMBER_ORANGE = 7,
#endif // _NA_008121_20150311_EQUIPMENT_AWAKENING_SYSTEM
};
struct FPOINT
{
float x;
float y;
FPOINT() : x(0), y(0){}
};
typedef struct Temp_Render_Struct
{
WzRenderInfo* proto_render_info_ptr;
WzColor render_color_[NUM_WRIC]; // 그리는 색상(Diffuse, Specular, Ambient)
}stTemp_RenderInfo;
#include "GameMessage.h"
//------------------------------------------------------------------------------
class InterfaceManager
: public GameMessage
{
public:
enum eITEM_TYPE
{
eITEM_WEAPON = 0,
eITEM_ARMOR,
eITEM_ACCESSORY,
eITEM_TYPEMAX,
};
enum eITEM_MARK_TYPE
{
MARK_TYPE_START = 0,
MARK_TYPE_QUEST = MARK_TYPE_START,
MARK_TYPE_QUEST_START,
MARK_TYPE_AC,
MARK_TYPE_CASH_ITEM,
MARK_TYPE_UNIQUE,
MARK_TYPE_ELITE,
MARK_TYPE_DEVINE,
MARK_TYPE_RARE,
MARK_TYPE_MAX
};
enum eBATTLE_ICON_TYPE
{
eBATTLE_ICON_PCBANG_SUPERMASTER_ROOM,
eBATTLE_ICON_ITEM_SUPERMASTER_ROOM,
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
eBATTLE_ICON_GUILD_PVP_ROOM,
#endif
#ifdef _DH_BATTLEZONE2_
eBATTLE_ICON_LOCKED_ROOM,
#endif//_DH_BATTLEZONE2_
#ifdef _NA_004204_20120131_BATTLE_ZONE_PARTY_OBTAIN
eBATTLE_ICON_PARTY_OBTAIN_ROOM, // 아이템 모두분배 배틀존
#endif //_NA_004204_20120131_BATTLE_ZONE_PARTY_OBTAIN
eBATTLE_ICON_MAX,
};
enum eDIALOG_ID
{
DIALOG_LOGIN=0,
DIALOG_SERVER_SELECTION,
DIALOG_EQUIP,
DIALOG_INVENTORY,
DIALOG_EVENT_INVENTORY,
DIALOG_CHAT,
DIALOG_CHATMENU,
DIALOG_QUICK,
DIALOG_RADAR,
DIALOG_RADAR_PLUS,
DIALOG_RADAR_FULL,
DIALOG_HEROGAUGE,
//./DIALOG_HEROGAUGECONTROL,
DIALOG_MAIN,
DIALOG_MAIN_OPTION,
// from uiBase
DIALOG_LOGIN_BACK,
DIALOG_LOGIN_ACCOUNT,
DIALOG_LOGIN_NOTICE,
DIALOG_LOGIN_SERVER_LIST,
DIALOG_LOGIN_CHANNEL_LIST,
DIALOG_LOGIN_15YEAR,
DIALOG_TRADE,
#ifdef _K2P_SOFTWARE_NUMBER_KEYBOARD_000913
DIALOG_TRADE_NUMBER_KEYBOARD,
#endif
#ifndef _NA_000000_20130114_RENEWER_UI
DIALOG_OPTION_MENU,
DIALOG_OPTION_SYSTEM,
DIALOG_OPTION_GAME,
DIALOG_OPTION_KEYHELP,
DIALOG_OPTION_SOUND,
#else
DIALOG_OPTION,
#endif
DIALOG_OPTION_KEYBINDING,
DIALOG_VENDOR_SELL,
DIALOG_VENDOR_BUY,
DIALOG_VENDOR_POPUP,
DIALOG_VENDOR_TITLE_POPUP,
DIALOG_BATTLEZONE_LIST,
DIALOG_BATTLEZONE_CREATE,
DIALOG_BATTLEZONE_PASSWORD,
DIALOG_BATTLEZONE_RELAY,
DIALOG_BATTLEZONE_READY_MISSIONCFG,
DIALOG_BATTLEZONE_READY_HUNTINGCFG,
DIALOG_BATTLEZONE_READY_CHUNTINGCFG,
DIALOG_BATTLEZONE_CHUNTING_WIN,
DIALOG_BATTLEZONE_CHUNTING_SCORE_BOARD,
DIALOG_BATTLEZONE_CHUNTING_DOING,
DIALOG_PARTY_LEADER,
DIALOG_PARTY_MEMBER1,
DIALOG_PARTY_MEMBER2,
DIALOG_PARTY_MEMBER3,
DIALOG_PARTY_MEMBER4,
DIALOG_PARTY_MEMBER5,
DIALOG_PARTY_MEMBER6,
DIALOG_PARTY_MEMBER7,
DIALOG_PARTY_MEMBER8,
DIALOG_PARTY_MEMBER9,
DIALOG_PARTY_OPTION,
DIALOG_GUILD_CREATE,
DIALOG_GUILD_WINDOW,
DIALOG_GUILD_MENU,
DIALOG_GUILD_MAIN,
DIALOG_GUILD_INPUTMESSAGE,
DIALOG_SYSTEM_VERIFY,
DIALOG_SYSTEM_CONFIRM,
DIALOG_SYSTEM_IDNUMBER_CONFIRM,
DIALOG_SYSTEM_INPUTMSG_CONFIRM,
DIALOG_SEARCH_ID,
DIALOG_INPUT_PASSWD,
DIALOG_CHARSELECT,
DIALOG_FONT_CHARSELECT,
DIALOG_SHOP,
DIALOG_INPUT_NUM,
DIALOG_BANK,
DIALOG_CHAR_STATUS,
DIALOG_SYSTEM,
DIALOG_HELP,
DIALOG_MISSION_SELECTION,
DIALOG_CREATE_CHARACTER,
DIALOG_ASK, //확인,취소 지완 추가
DIALOG_WARNING,
DIALOG_TARGET,
DIALOG_SUMMON_TARGET,
// DIALOG_TOOLTIP,
DIALOG_REWARD,
DIALOG_ENCHANT,
DIALOG_RANKDOWN,
DIALOG_SELECT_COMPOSITE_MENU,
DIALOG_STYLE_CONTAINER,
DIALOG_SUMMON_SKILL_CONTAINER,
DIALOG_DELAY_CASTING, // 현재는 마을로 돌아갈때 사용되는 캐스팅 창이다.
DIALOG_CASTING,
DIALOG_BATTLE_LOBBY,
DIALOG_CREATECHARACTER_LEFT,
DIALOG_CREATECHARACTER_BOTTOM,
DIALOG_CREATECHARACTER_SELECT,
DIALOG_CREATECHARACTER_ROTATE,
DIALOG_MAGAZINE,
DIALOG_PVP_SCORE,
DIALOG_SKILL_QUEUE,
DIALOG_NPC_PORTAL,
DIALOG_BATTLE_CONFIG,
DIALOG_CHAR_POPUP_MENU,
DIALOG_HELP_MENU,
DIALOG_HELP_WINDOW,
DIALOG_HELP_ANNOUNCE_WINDOW,
DIALOG_ITEM_COMPOSITE,
DIALOG_ITEM_ETC_COMPOSE,
DIALOG_TIREDSYSTEM,
DIALOG_VOICE_CHAT,
DIALOG_AREA_CONQUEST,
DIALOG_QUEST_COMMON_FORWARD,
DIALOG_QUEST_REWARD,
DIALOG_QUEST_LIST_MISSION,
DIALOG_QUEST_LIST_CONTENT,
DIALOG_QUEST_MISSION_LIST,
DIALOG_QUEST_TIME_INFO,
DIALOG_QUEST_AUTO_ACEEPT_ALRAM,
DIALOG_EVENT_WINDOW,
#ifdef __NA_001027_20080423_RANDOM_REWARD_EVENT_
DIALOG_GUILD_EVENT_WINDOW,
#endif
DIALOG_EVENT_ITEM_SELECT,
DIALOG_EVENT_X_MAS_CONFIRM,
DIALOG_EVENT_X_MAS_SANTADLG,
DIALOG_EVENT_X_MAS_DONATION_CONFIRM,
DIALOG_EVENT_X_MAS_DONATION_REWARD,
DIALOG_EVENT_X_MAS_SOLOCOUPLE_REWARD,
DIALOG_EVENT_X_MAS_SANTA_REWARD,
#ifdef _KIKI_UI_WEB_DIALOG
DIALOG_WEB_DIALOG,
#endif
DIALOG_ITEM_DIV,
DIALOG_ENDURANCE,
DIALOG_ITEM_TOTAL_COMPOSITE,
DIALOG_SYSTEM_CHAT,
DIALOG_WAYPOINT,
DIALOG_PCBANG_EVENT_TIME,
DIALOG_MISSION_RANK_TIMER,
DIALOG_MISSION_RANK_ENDING,
DIALOG_MISSION_RANK_LIST,
DIALOG_MISSION_RANK_GAMBLE,
DIALOG_GUILD_POINT_EXCHANGE,
DIALOG_GUILD_DONATE_UP,
DIALOG_GUILD_NOTICE,
DIALOG_GUILD_RANKUP,
#ifdef _JBH_MOD_VENDOR_SELECT_BUY_NUM
DIALOG_VENDOR_BUY_POPUP,
#endif
DIALOG_HELP_MISSION,
DIALOG_VENDOR_LIST,
DIALOG_COMMUNITY_DLG,
DIALOG_COMMUNITY_INFO,
DIALOG_COMMUNITY_READ_MAIL,
DIALOG_COMMUNITY_WRITE_MAIL,
DIALOG_VENDOR_SEARCH,
DIALOG_CHAT_PROPERTY,
DIALOG_CASH_ITEM_SHOP,
DIALOG_CASH_ITEM_SHOP_BUY,
DIALOG_CASH_ITEM_SHOP_BUY_CHECK,
DIALOG_CASH_ITEM_SHOP_BUY_COMPLETE,
DIALOG_CASH_ITEM_SHOP_CART,
DIALOG_CASH_ITEM_SHOP_NPC_POPUP,
DIALOG_CASH_ITEM_SHOP_PRESENT_DLG,
DIALOG_CASH_ITEM_SHOP_PRESENT_CHECK,
DIALOG_CASH_ITEM_SHOP_PRESENT_COMPLETE,
DIALOG_CASH_ITEM_SHOP_PACKAGE_DLG,
DIALOG_CASH_ITEM_SHOP_PACKAGE_CHECK,
DIALOG_CASH_ITEM_SHOP_PACKAGE_COMPLETE,
#ifdef __NA_00387_20070605_SHOP_MILEAGE2
DIALOG_CASH_ITEM_SHOP_MILEAGE_DLG,
DIALOG_CASH_ITEM_SHOP_MILEAGE_BUY,
DIALOG_CASH_ITEM_SHOP_MILEAGE_CHECK,
DIALOG_CASH_ITEM_SHOP_MILEAGE_COMPLETE,
#endif // __NA_00387_20070605_SHOP_MILEAGE2
DIALOG_CASH_ITEM_SHOP_EXTENSION_BUY,
DIALOG_CASH_ITEM_SHOP_EXTENSION_COMPLETE,
DIALOG_SOCKET_REMOVE,
DIALOG_TUTORIAL_MISSION_INVITE,
DIALOG_PASSWORD_DLG,
#ifdef __CN_269_MATRIX_CARD_AUTH
DIALOG_MATRIX_CARD_AUTH,
#endif //__CN_269_MATRIX_CARD_AUTH
DIALOG_MISSION_RELAY,
DIALOG_CHANGE_ROOM_NAME,
DIALOG_CHAT_PERSONAL_OPTION_DIALOG,
DIALOG_PARTY_ITEM_SHARE_SYSTEM,
DIALOG_GUILD_DUTY_VEST,
DIALOG_GUILD_RIGHT_DELEGATION,
DIALOG_GUILD_MEMBER_RIGHT_VIEW,
DIALOG_GUILD_CORPS_CHANGE,
DIALOG_GUILD_MARK_COMBINATION,
DIALOG_GUILD_MARK_REGISTE_CONFIRM,
DIALOG_GUILD_ALLIANCE,
DIALOG_GUILD_HOSTILITY,
DIALOG_GUILD_ONE_SIDE_HOSTILITY,
DIALOG_GUILD_RELATION_ASK,
DIALOG_GUILD_ALLIANCE_REQUEST,
DIALOG_FATE_ITEM_SYSTEM,
DIALOG_GUILD_WAREHOUSE,
DIALOG_GUILD_WAREHOUSE_RIGHT,
DIALOG_GUILD_WAREHOUSE_LOG,
#ifdef _YJ_FISHING_SYSTEM_000933
DIALOG_FISHING_SHOP,
DIALOG_FISHING_TRADE,
DIALOG_FISHING_ACTION,
#endif //_YJ_FISHING_SYSTEM_000933
DIALOG_PERSONAL_WAYPOINT,
DIALOG_CASH_ITEM_PUSCHASE_DLG,
#ifdef _DEV_VER
#ifdef _NA_006519_20130311_TEXTURE_VIEWER
DIALOG_TEXTURE_VIEWER, // Texture_Viewer를 띄우기 위한 Dialog -20130311홍성현-
#endif
#endif
DIALOG_MAX
};
private:
static BOOL backup_old2dmode;
static BOOL backup_oldrealsize;
static BOOL backup_zwrite;
static BOOL backup_ztest;
static BOOL backup_fog;
static DWORD backup_alpharef;
static WzColor backup_oldcolor;
static ENUM_CMP_FUNC backup_alphafunc;
static ENUM_CMP_FUNC backup_zfunc;
static ENUM_ALPHABLEND backup_alphablendmode;
static ENUM_CULL_FACE backup_cullfacemode;
static ENUM_MESH_DRAW backup_drawmode;
public:
static void Begin2DMode(RECT* viewport,
DWORD clear_flags = CR_DEPTH/*CR_DEFAULT*/,
WzColor* clear_color = NULL,
float* clear_z = NULL,
DWORD* clear_stencil = NULL);
#ifdef _NA_007127_20140326_OPEN_INVENTORY_FRAME_DROP_ADJUST
static void BeginPlayerRender2DMode(Object* objectr_ptr, RECT* viewport = NULL,
DWORD clear_flags = CR_DEPTH/*CR_DEFAULT*/,
WzColor* clear_color = NULL,
float* clear_z = NULL,
DWORD* clear_stencil = NULL);
#endif // _NA_007127_20140326_OPEN_INVENTORY_FRAME_DROP_ADJUST
static void End2DMode();
public:
InterfaceManager();
~InterfaceManager();
BOOL Init( HWND hWnd, CDrawBase * pDrawBase);
VOID Release();
VOID Render();
VOID Update();
RECT * GetWindowRC()
{
return &m_rcWindow;
}
void SetWindowRC(RECT* rcWindow)
{
m_rcWindow = *rcWindow;
}
BOOL IsIntersectRect(POINT & rPoint);
VOID NetworkProc( eDIALOG_ID id, MSG_BASE * pMsg );
VOID NetworkProc( WzID id, MSG_BASE * pMsg );
BOOL InterfaceWndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam ,SI_MESSAGE *stMessage);
public:
BOOL LoadInterface( SolarDialog * pSolarDialog, char * pszFileName, DWORD dwCompareID, BOOL bShow = FALSE, BOOL bCompare = TRUE );
BOOL LoadInterfaceChangeID( SolarDialog * pSolarDialog, char * pszFileName, DWORD dwChangeID, BOOL bShow );
BOOL CloneInterface( SolarDialog * pSolarDialog, char * pszFileName, DWORD dwNewKey );
void ReleaseDialogTexture();
DWORD NewInterface( SolarDialog * pSolarDialog, char * pszFileName, BOOL bShow );
#ifdef _NA_000000_20140120_SMART_NPC_SYSTEM
BOOL InsertInterface(SolarDialog * solar_dialog, CDialogWZ* dialog, BOOL is_show); // 로드된 ui를 연결
#endif //_NA_000000_20140120_SMART_NPC_SYSTEM
BOOL DeleteInterface( DWORD dwCompareID );
CDialogManager * GetDialogManager( void ) { return m_pDialogManager; }
SolarDialog * GetDialog( eDIALOG_ID eDlgID );
SolarDialog * GetDialog( WzID DlgWzID );
void RemoveDialog( WzID DlgWzID ); // to use in uibaseMan, maybe caution other place using this func.
void SetDialogWzIDToChangeID(eDIALOG_ID eDlgID, DWORD dwID) {m_wzId[eDlgID] = dwID;}
WzID GetDialogWzID( eDIALOG_ID eDlgID );
// 최상위 윈도우 세팅관련
VOID AttachFirstDialog(eDIALOG_ID eDlgID);
VOID AttachFirstDialog(WzID DlgWzID);
VOID DeAttachFirstDialog(eDIALOG_ID eDlgID);
VOID DeAttachFirstDialog(WzID DlgWzID);
VOID MoveWindow( WzID DlgWzID, int x, int y );
VOID MoveWindow( eDIALOG_ID eDlgID, int x, int y );
void MoveDefaultWindowPos();
VOID ShowGameInterface( BOOL bFlag );
BOOL IsShowGameInterface() {return m_bShowGameInterface;}
BOOL ShowWindow( WzID wzDlgID, BOOL val );
BOOL ShowWindow( eDIALOG_ID id, BOOL val );
BOOL ShowWindow(SolarDialog* dialog, BOOL val);
BOOL ShowDialog( eDIALOG_ID id, BOOL val );
BOOL ShowDialog( WzID wzDlgID, BOOL val );
VOID ShowDialogInterface( eDIALOG_ID id );
BOOL IsShowDialog( eDIALOG_ID id ) const;
BOOL IsShowDialog( WzID id ) const;
BOOL IsHaveFocus( eDIALOG_ID id ) const;
BOOL IsHaveFocus( WzID id ) const;
BOOL IsValid() { return m_bValid; }
BOOL IsHaveFocusAtEdit();
StatusIconManager* GetStatusIconManager() { return status_icon_manager_; }
//-----------------------------------------------------------------------------------------------
// 데미지 띠우는데 필요한것들
//-----------------------------------------------------------------------------------------------
void AddDamageList(DAMAGE_POPUP &popup);
void ResetDamageList();
void RenderDamageList(DWORD dwTick);
//-----------------------------------------------------------------------------------------------
// 이동포인터
//-----------------------------------------------------------------------------------------------
void SetMovePointer(BOOL bFlag,WzVector *pPos);
void RenderMovePointer(DWORD dwTick);
//-----------------------------------------------------------------------------------------------
// 지역 지정 포인터
//-----------------------------------------------------------------------------------------------
void SetAreaPointer(BOOL bShow, WzVector* pPos, float fAreaSize, WzColor color=0xffffffff);
void SetAreaTargetPointerTexture( HANDLE AreaTargetTexture );
HANDLE GetAreaTargetTextureHandle( eCHAR_TYPE CharacterType );
void RenderAreaPointer(DWORD dwTick);
//-----------------------------------------------------------------------------------------------
// attack 포인터
//-----------------------------------------------------------------------------------------------
void RenderTargetPointer(DWORD dwTick);
void RenderTargetEffect();
#ifdef MAP_EDIT_MODE
void RenderTerrainTargetPointer(DWORD dwTick);
#endif
//-----------------------------------------------------------------------------------------------
// 인터페이스 숨기기 관련
//-----------------------------------------------------------------------------------------------
void SaveAppearWindows();
void LoadAppearWindows();
void HideAllWindows();
//void UpdateAllWindowPosition();
void ShowInterface(BOOL bFlag);
BOOL GetShowFlag();
VOID SetRenderState( BOOL bRender ) { m_bRender = bRender; }
////-----------------------------------------------------------------------------------------------
//// 메시지 출력관련
////-----------------------------------------------------------------------------------------------
//void ShowMessageBox( LPCTSTR szMessage,int iDelay=1000, WzColor *pTextColor = NULL ,WzID strID=0 );
//void ShowCenterMessageBox( LPCTSTR szMessage,int iDelay, WzColor *pTextColor = NULL, BOOL bDrawBox = TRUE );
//void ShowMissionAreaInfo( LPCTSTR szMessage,int iDelay, WzColor *pTextColor = NULL );
//void HideMessageBox();
//void HideCenterMessageBox();
//void RenderMessageBox();
//void RenderCenterMessageBox();
void ShowGetMoneyMessage(MONEY money);
//void RenderMissionAreaMessageBox();
void Process(DWORD dwTick);
//-----------------------------------------------------------------------------------------------
// 에러 코드에 의한 정보 출력 관련
//-----------------------------------------------------------------------------------------------
BOOL GetStringZoneError( DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen);
BOOL GetStringPVPError( DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen);
BOOL GetStringQuestError( DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen);
BOOL GetStringRewardError( DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen);
BOOL GetStringWarehouseError( DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen );
BOOL GetStringEnterVillageError( DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen );
BOOL GetStringACError(DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen );
BOOL GetStringStatusError(DWORD dwErrorCode, TCHAR * pszOutMessage, int iLen );
void UpdateQuestInfo();
void RenderRectWithTextureAndZTest(RECT area, float fDepth, HANDLE tex_handle);
void RenderRectWithTextureAndZTest(RECT rt, float fDepth,int iRow, int iColumn);
void RenderGuildMark4MapObject(WzVector* pPos1, WzVector* pPos2, int iRow, int iColumn);
void RenderGuildMarkBackGround(RECT rc, float fDepth, eGUILD_MARK_RELATION eRelation);
void RenderCharNameBackGround(LONG lx, LONG ly, LONG lTextx, LONG lTexty, float fDepth, eGUILD_MARK_RELATION eRelation, bool bGuild, bool bGuildMark);
void RenderRect(RECT rc,WzColor color);
void RenderRectWithZTest(RECT rc,WzColor color,float fDepth);
void RenderChatRect(RECT rc,WzColor color, float fDepth = 0.f);
void RenderShadowRect(RECT rc,WzColor color);
public:
// 기타
void RenderActivateMark(int x,int y,int w =0, int h=0);
void RenderActiveAutobot(int x, int y);
void RenderActivateMarkIcon(int dx,int dy, int dw, int dh, int animation_index);
#ifdef _NA_007019_20140107_PERK_CHANGE_SYSTEM
void RenderActivateMarkPerkGroup(int x, int y, int width, int height);
#endif // _NA_007019_20140107_PERK_CHANGE_SYSTEM
#ifdef _NA_20120426_DISPLAY_SKILL_COMBO_ICON_EFFECT
void RenderComboIconEffect(int x,int y,int w, int h);
#endif
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
DiceCastManager* GetDiceCastManager() {return dice_cast_manager_;}
WzVector GetDiceAngle(int party_index, int dice_value, DWORD animation_tick);
WzColor GetDiceColor(DWORD player_key, DWORD high_number_player, DWORD animation_tick);
void SetDiceAngle();
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
void GetInterfaceString( int iStringIndex,TCHAR *szText,int bufsize = INTERFACE_STRING_LENGTH );
LPCTSTR GetInterfaceString( int iStringIndex );
bool GetInterfaceStringWithCheck(int iStringIndex,TCHAR *szText,int bufsize);
LPCTSTR GetItemName( CODETYPE ItemCode );
BOOL GetItemName( CODETYPE ItemCode, TCHAR * OUT pszOutNameResult, int iLen = MAX_ITEMNAME_LENGTH );
BOOL GetItemClassName(CODETYPE ItemCode, TCHAR * OUT pszOutClassName, int iLen = MAX_ITEMNAME_LENGTH);
void GetInterfaceStringFormat(OUT TCHAR* msg, int msg_size, int format_string_idx, ...);
void SetShowItemName( BOOL bShow );
BOOL ShowItemName();
BOOL IsLoadFontAndString() { return m_bLoadFontAndString;}
BOOL IsLockDlg() { return m_bLockDlg;}
void RestoreCaptionFromStringTable();
BYTE GetFontCharacterSet();
protected:
BOOL _loadDialog( char * pszFileName, DWORD dwCompareID, BOOL bCompare );
private:
BOOL m_bRender;
BOOL m_bLockDlg;
CDrawBase * m_pDraw;
CDialogManager * m_pDialogManager;
BOOL m_bValid;
SolarHashTable<SolarDialog *> * m_pDialogHashTable;
SolarHashTable<SolarDialog *> * m_pNotLoadDlgTable;
util::CObjKeyGenerator<DWORD> * m_pDynamicDialogKeyGenerator;
static WzID m_wzId[ DIALOG_MAX ];
DamageMesh* m_DamageMgr;
// 이동 포인터
BOOL m_bMovePointerFlag;
WzVector m_vMovePointerPos;
CWzUnit *m_pMovePointerUnit;
CWzUnitDraw *m_pMovePointerUnitDraw;
// 지역 지정 포인터
BOOL m_bAreaPointerFlag;
WzVector m_vAreaPointerPos;
CWzUnit *m_pAreaPointerUnit;
CWzUnitDraw *m_pAreaPointerUnitDraw;
WzSimpleMesh *m_pAreaPointer;
HANDLE m_hTextureAreaPointer;
HANDLE m_hTextureAreaPointerForMystic;
#ifdef _NA_000000_20140409_ADD_SHADOW_AREA_SKILL_POINTER
HANDLE m_hTextureAreaPointerForShadow;
#endif //_NA_000000_20140409_ADD_SHADOW_AREA_SKILL_POINTER
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
HANDLE texture_area_pointer_for_witchblade_;
#endif // _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
WzColor m_AreaColor;
// attack target
HANDLE m_hTextureTargetPointer;
CWzUnit *m_pTargetPointerUnit;
CWzUnitDraw *m_pTargetPointerUnitDraw;
// activate
HANDLE m_hTextureActivate;
HANDLE m_hTextureChat;
#ifdef _NA_20120426_DISPLAY_SKILL_COMBO_ICON_EFFECT
HANDLE m_hTextureLinkSkill;
#endif
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
HANDLE button_activate_texture_handle_;
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
HANDLE m_hTextureActivateAutobot;
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
DiceCastManager* dice_cast_manager_;
CWzUnit* dice_unit_;
CWzUnitDraw* dice_unit_draw_;
float dice_angle_x_[MAX_PARTYMEMBER_NUM];
float dice_angle_z_[MAX_PARTYMEMBER_NUM];
public:
CWzUnitDraw* dice_unit_draw() { return dice_unit_draw_; }
HANDLE GetPartyDiceTexture(int dice_tex_index);
private:
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
// 아그들 3d얼굴 텍스쳐
HANDLE m_hTextureMyHead;
HANDLE m_hTextureTargetHead;
HANDLE m_hTextureSummonTargetHead;
HANDLE m_hTexturePartyHead[MAX_PARTYMEMBER_NUM];
//! 파티원 주사위
HANDLE m_hTexturePartyDice[MAX_PARTYMEMBER_NUM];
BOOL m_bUpdateMyHeadTexture;
BOOL m_bUpdateTargetHeadTexture;
BOOL m_bUpdateSummonTargetHeadTexture;
BOOL m_bUpdatePartyHeadTexture[MAX_PARTYMEMBER_NUM];
HANDLE m_hTestRenderTarget;
HANDLE m_hTextureBuffBG; // 버프 백그라운드 텍스쳐
Clone *m_pHeadClone;
vector<DWORD> m_vecShowWindow;
WzSimpleMesh *m_pMessageMesh;
RECT m_rcWindow;
const SCSlot *m_pInfoSlot;
StatusIconManager* status_icon_manager_;
BOOL m_bHaveFocusAtEdit;
DWORD m_dwInterfaceTick;
BOOL m_bShowItemName;
BOOL m_bShowGameInterface;
// 임시 스트링 그때그때 바뀐다.
std::string m_tempString;
IconImage* pet_etheria_icon_;
IconImage* etheria_icon_;
HANDLE warning_check_item_;
HANDLE grid_effect_texture_;
FRECT grid_rectangles_[8];//8방향
#ifdef _NA_002935_20110704_ITEM_SCORE
#ifndef _NA_000000_20130114_RENEWER_UI
HANDLE item_score_texture;
#endif // _NA_000000_20130114_RENEWER_UI
#endif //_NA_002935_20110704_ITEM_SCORE
HANDLE battle_icon_texure_;
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
std::vector<std::map<WORD, WORD> > sun_ranking_grade_mark_vector_;
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
#ifdef _NA_007114_20140313_CHAOSZONE_GOLDRUSH
std::map<WORD, int> gold_rush_mark_map_;
public:
int get_gold_rush_mark_index(const WORD& gold_grade) const;
#endif // _NA_007114_20140313_CHAOSZONE_GOLDRUSH
#ifdef _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
int get_ranking_mark_index(const eSUN_RANKING_TYPE& ranking_type, const eSUN_RANKING_GRADE_TYPE& grade);
#endif // _NA_008016_20150203_SUN_RANKING_SYSTEM_GRADE
// CK UI
public:
HANDLE m_hMonsterGauageTexture;
IconImage* item_mark_ptr[MARK_TYPE_MAX];
IconImage* pet_etheria_icon() const { return pet_etheria_icon_; }
void set_pet_etheria_icon(IconImage* val) { pet_etheria_icon_ = val; }
IconImage* etheria_icon() const { return etheria_icon_; }
void set_etheria_icon(IconImage* val) { etheria_icon_ = val; }
HANDLE get_warning_check_item() const { return warning_check_item_; }
void set_warning_check_item(HANDLE handle) { warning_check_item_ = handle; }
void RenderCheckItem(RECT& rect);
HANDLE m_hPetInfoTexure;
IconImage * m_pPetIconLockImg;
IconImage * m_pIdentifyPossessionImg;
#ifndef _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES
IconImage * m_pIdentifyDamegeImg[eITEM_TYPEMAX];
#endif // _NA_006774_20130617_ARRANGE_UNNECESSARY_RESOURCES
POINT RenderDrawSign(POINT &rPos, eIMG_TYPE eType, eIMAGE_NUMBER_TYPE nIndex = eIMAGE_NUMBER_DEFAULT_YELLOW );
POINT RenderDrawNumber(RECT &rc,int nNumber,DWORD dwStyle, eIMAGE_NUMBER_TYPE nIndex = eIMAGE_NUMBER_DEFAULT_YELLOW );
#ifdef _NA_002935_20110704_ITEM_SCORE
#ifndef _NA_000000_20130114_RENEWER_UI
void RenderDrawItemScore(RECT start_rect,int score);
#endif // _NA_000000_20130114_RENEWER_UI
#endif //_NA_002935_20110704_ITEM_SCORE
void RenderBattleRoomIcon(eBATTLE_ICON_TYPE icon_type,
float dest_x, float dest_y,
float dest_width, float dest_height);
void RenderBattleRoomIcon(eBATTLE_ICON_TYPE icon_type,
RECT* dest_rect);
bool InitInterfaceManagerGroups();
void ReleaseInterfaceManagerGroups();
uiBaseMan* GetUserInterfaceManager(UINT uID);
void SetUserInterfaceManager(UINT uID, uiBaseMan* pBaseMan){m_vUserInterfaceMans[uID] = pBaseMan;}
int GetUserInterfaceManagerNum();
void UpdateUserInterfaceManagerNetworkMessage(MSG_BASE *pMsg);
void UpdateUserInterfaceManagetNetworkMessageWorld(MSG_BASE *pMsg);
void PreRenderInterfaceManager(DWORD dwTick);
void PostRenderInterfaceManager(DWORD dwTick);
SCSlotContainer* GetUISkillSlotContainer();
uiBase* GetUISkillCurrentDialog();
void SetSkillInfos(const SKILL_TOTAL_INFO & SkillInfo);
void InitSkillInfos();
void ReadySkillInfos();
void RefreshQuickSlotFromSkillInfos();
void CloseUIPartys();
void ShowUIPartys();
void ResetUIPartys();
void ToggleUIPartys();
void RenderRect2(RECT rc, WzColor color, DWORD eSpecialTooltip = eSPECIAL_TOOLTIP_NONE);
void RenderObjectOnRect(Object *pObject,RECT viewport,float fVolumeWidth,float fVolumeHeight, WzColor wzColor = 0xffffffff);
void RenderCloneOnRect(Clone *pClone,RECT viewport,float fVolumeWidth,float fVolumeHeight,WzColor wzColor=0x000000ff);
void RenderRiderOnRect(Rider *pRider,RECT viewport,float fVolumeWidth,float fVolumeHeight,WzColor wzColor=0xffffffff);
void RenderUnitDrawOnRect(CWzUnitDraw* unit_draw, RECT area, float rot_radin_value, FPOINT org, float zoom);
void RenderUnitDrawOnRect(CWzUnitDraw* unit_draw,
RECT area,
WzVector& pos,
WzVector& rot,
FPOINT org,
float zoom,
DWORD clear_flags,
WzColor& clear_color);
void RenderUnitToTexture(CWzUnitDraw* unit_draw,
HANDLE tex_handle,
WzVector& pos,
WzVector& rot,
FPOINT org,
float zoom,
DWORD clear_flags,
WzColor& clear_color);
void RenderPetOnRect(Pet* pet, WzBoundingVolume* bounding_volume, RECT area, float rot_radin_value, FPOINT org, float zoom);
void RenderRiderOnRect(Rider* rider, RECT area, float rot_radin_value, FPOINT org, float zoom);
void RenderPlayerOnRect(Player* player, RECT area, float rot_radin_value, FPOINT org, float zoom);
#ifdef _NA_007086_20140318_MONSTERBOOK
void RenderMonsterOnRect(Monster* monster, RECT area, float rot_radin_value, FPOINT org, float zoom);
#endif //_NA_007086_20140318_MONSTERBOOK
RECT CalcuateViewPortWithRect(RECT rc);
void LockDlgsAll();
void LockDlgs(DWORD dwLockDlg,BOOL bWzStyle = FALSE);
void UnLockDlg(WzID dialog_id, bool is_monopoly_msg);
void UnLockDlgs();
void UpdateMyHeadTexture();
void UpdateTargetHeadTexture();
void UpdateSummonTargetHeadTexture();
void UpdatePartyHeadTexture(int iIndex);
void UpdateRenderTarget();
#ifdef _NA_003033_20110831_DICECAST_ITEM_ROUTING
void RenderToDiceTexture();
#endif //_NA_003033_20110831_DICECAST_ITEM_ROUTING
HANDLE GetMyHeadTexture();
HANDLE GetTargetHeadTexture();
HANDLE GetSummonTargetHeadTexture();
HANDLE GetPartyHeadTexture(int iIndex);
int ProcessWordWrapByLine( TCHAR (*szMessage)[MAX_MESSAGE_LENGTH], LPCTSTR szText, int MaxLine );
/*!
* 로드 되지 않은 다이얼로그를 저장한다.
* \param[in] dwKey 다이얼로그 키
* \param[in] pDlg 생성한 다이얼로그 포인터
*/
BOOL RegisterDialog( DWORD dwKey, SolarDialog * pDlg );
SolarDialog* FocusDialog();
void MouseMoveLock(bool Lock);
char* InterfaceManager::Trim(char *str);
#ifdef _DEV_VER
DWORD LoadItemNameCode();
#ifdef _DH_GM_NPC_WINDOW
DWORD LoadNpcNameCode();
#endif//_DH_GM_NPC_WINDOW
#endif//_NA_0_20091208_VENDOR_ITEM_SEARCH
private:
uiBaseMan * m_vUserInterfaceMans[UIMAN_MAX];
BOOL m_bLoadFontAndString;
HANDLE m_hNumberTexture;
void GetNumberImgInfo(eIMAGE_NUMBER_TYPE nIndex, RECT *rcOut, eIMG_TYPE eType);
#ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
HANDLE common_bg01_texture_;
#endif //_NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
void InitBlinkGrid();
//---------------------------------------------------------------------------------------------
// 옵션 설정
//---------------------------------------------------------------------------------------------
public:
//// 택스쳐 퀄리티( 0, 1, 2 --> 상, 중 하 개념 ) : 실제 값 설정은 알아서 3단계로 처리하시오
//int GetTextureQuality( void );
//int GetLOD( void );
//int GetNormalTextureQuality( void );
//int GetShadowQuality( void );
//// 이펙트 관련( TRUE, FALSE ) --> 켜고 끄기
//BOOL GetBlurState( void );
//BOOL GetFogState( void );
//BOOL GetMapDistantView( void );
// 현재 설정된 값들 모두 적용( 다이얼로그에서 "확인" 버튼 누르면 전체 적용되니 남발하지 마시오 )
void ApplyOption( BOOL bCheckApply = TRUE ,BOOL bProgramInit = FALSE);
BOOL LoadFontAndStringTable();
#ifdef _GS_ADD_BIGEVENT_MSG_1122
void ShowBigEventMsg();
#endif//_GS_ADD_BIGEVENT_MSG_1122
void SetDiplayDropItem(BOOL bProcess);
void ResetUIManager();
void ResetSolarDialog();
HANDLE GetNumberTexture() { return m_hNumberTexture; }
#ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
HANDLE common_bg01_texture() { return common_bg01_texture_; }
#endif //_NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
void SetUIBlinkGrid(DWORD dialog_id, DWORD control_id, bool is_blink);
HANDLE grid_effect_texture(){ return grid_effect_texture_; }
FRECT* grid_rectangles(){ return grid_rectangles_; }
};
//------------------------------------------------------------------------------
/**
*/
inline
uiBaseMan *
InterfaceManager::GetUserInterfaceManager(UINT uID)
{
assert(uID<UIMAN_MAX);
if (uID >= UIMAN_MAX)
return NULL;
return m_vUserInterfaceMans[uID];
}
//------------------------------------------------------------------------------
/**
*/
inline
int
InterfaceManager::GetUserInterfaceManagerNum()
{
return UIMAN_MAX;
}
// 러시아DX폰트 생성시 문자셋 설정이 필요함.
// DEFAULT_CHARSET 로 세팅하여 폰트를 생성하면 ::GetTextExtentPoint() 함수의 값이 정확하지 않음
inline BYTE InterfaceManager::GetFontCharacterSet()
{
#if defined(_RUSSIA)
BYTE character_set = RUSSIAN_CHARSET;
#else
BYTE character_set = GB2312_CHARSET;
#endif
return character_set;
}
//------------------------------------------------------------------------------