/* ========================================================================== * ÆÄ ÀÏ : QuickManager.h * ¸ñ Àû : Äü½½·Ô ¸Å´ÏÀú * ÀÛ ¼º ÀÚ : ±è°¡¶÷ * ÀÛ ¼º ÀÏ : 2007-09-20 * ÁÖÀÇ»çÇ× : *===========================================================================*/ #pragma once #include "Icon.h" #include "Player_Common.h" #include "Item_Common.h" /// ¸ó½ºÅÍ ½ºÅ³¾ÆÀÌÄÜ À̹ÌÁö À妽º ( 3 ~ 5 ) const int MONICON_PARAMINDEX = 3; /// °¢°¢ Äü½½·ÔÀÇ ¾ÆÀÌÄÜ °³¼ö const int QUICKSLOT_ICON_COUNT_FOR_EACH = 10; /// Äü½½·Ô ¾ÆÀÌÄÜ À妽º Á¤ÀÇ enum eQuickSlotIconIndex { /// ÀÏ¹Ý Äü½½·Ô QUICKSLOT_ICON_COMMON_BEGIN = 0, QUICKSLOT_ICON_COMMON_END = QUICKSLOT_ICON_COMMON_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// Ãß°¡1 Äü½½·Ô QUICKSLOT_ICON_COMMON_EXTRA1_BEGIN, QUICKSLOT_ICON_COMMON_EXTRA1_END = QUICKSLOT_ICON_COMMON_EXTRA1_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// Ãß°¡2 Äü½½·Ô QUICKSLOT_ICON_COMMON_EXTRA2_BEGIN, QUICKSLOT_ICON_COMMON_EXTRA2_END = QUICKSLOT_ICON_COMMON_EXTRA2_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// FS Äü½½·Ô QUICKSLOT_ICON_FS_BEGIN, QUICKSLOT_ICON_FS_END = QUICKSLOT_ICON_FS_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// MONSTER Äü½½·Ô( FS Äü½½·Ô 1,2,3¹øÂ° »ç¿ë ) QUICKSLOT_ICON_MON_BEGIN = QUICKSLOT_ICON_FS_BEGIN, QUICKSLOT_ICON_MON_END = QUICKSLOT_ICON_MON_BEGIN + 3 - 1, QUICKSLOT_ICON_COUNT = QUICKSLOT_ICON_FS_END + 1, }; /// ½½·Ô Á¤ÀÇ enum eQuickSlotIndex { /// ÀÏ¹Ý Äü½½·Ô QUICKSLOT_COMMON_BEGIN = 0, QUICKSLOT_COMMON_END = QUICKSLOT_COMMON_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// Ãß°¡1 Äü½½·Ô QUICKSLOT_COMMON_EXTRA1_BEGIN, QUICKSLOT_COMMON_EXTRA1_END = QUICKSLOT_COMMON_EXTRA1_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// Ãß°¡2 Äü½½·Ô QUICKSLOT_COMMON_EXTRA2_BEGIN, QUICKSLOT_COMMON_EXTRA2_END = QUICKSLOT_COMMON_EXTRA2_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// FS Äü½½·Ô QUICKSLOT_FS1_BEGIN, QUICKSLOT_FS1_END = QUICKSLOT_FS1_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, QUICKSLOT_FS2_BEGIN, QUICKSLOT_FS2_END = QUICKSLOT_FS2_BEGIN + QUICKSLOT_ICON_COUNT_FOR_EACH - 1, /// MONSTER Äü½½·Ô QUICKSLOT_MON_BEGIN, QUICKSLOT_MON_END = QUICKSLOT_MON_BEGIN + 3 - 1, QUICKSLOT_COUNT = QUICKSLOT_FS2_END - QUICKSLOT_COMMON_BEGIN + 1, /// ÀÏ¹Ý Äü(30) + FSÄü(20) QUICKSLOT_COUNT_MON = QUICKSLOT_MON_END - QUICKSLOT_MON_BEGIN + 1, /// ¸ó½ºÅÍÄü(3) QUICKSLOT_TOTAL = QUICKSLOT_COUNT + QUICKSLOT_COUNT_MON, }; /// Äü½½·Ô ŸÀÔ Á¤ÀÇ enum eQuickSlotType { QUICKTYPE_COMMON, /// ÀÏ¹Ý Äü½½·Ô QUICKTYPE_COMMON_EXTRA1, /// Ãß°¡1 Äü½½·Ô QUICKTYPE_COMMON_EXTRA2, /// Ãß°¡2 Äü½½·Ô QUICKTYPE_FS, /// FS Äü½½·Ô QUICKTYPE_MON, /// MONSTER Äü½½·Ô QUICKTYPE_COUNT, QUICKTYPE_BEGIN = QUICKTYPE_COMMON, QUICKTYPE_END = QUICKTYPE_MON, QUICKTYPE_COMMON_COUNT = QUICKTYPE_COMMON_EXTRA2 - QUICKTYPE_COMMON + 1, /// ÀÏ¹Ý Äü½½·Ô(1) + Ãß°¡ Äü½½·Ô(2) }; class cIcon; class cQuickData { public: cQuickData(); cQuickData( cQuickData& other ); /// ´ëÀÔ void operator=( const cQuickData& other ); void operator=( unsigned int i ); public: /// µ¥ÀÌÅÍ Å¸ÀÔ ( 0 : ¾ÆÀÌÅÛ·ù, 1 : ½ºÅ³·ù ) char mType; /// °íÀ¯ À妽º unsigned long mDBIndex; /// ¾ÆÀÌÅÛ À妽º unsigned long mItemIndex; /// ½ºÅ³ À妽º unsigned long mSkillIndex; unsigned char mSkillStep; /// ¾ÆÀÌÄÜ Ä÷¯ NiColorA mColor; /// ¾Ö´Ï¸ÞÀÌ¼Ç sAniParam* mAniParam; /// ·¹¾îµµ °ü·Ã ÆÁ ŸÀÔ ( À̹ÌÁö Å׵θ® ) unsigned int mTipType; }; inline cQuickData::cQuickData() : mType( eSHORTCUT_NONE ) , mDBIndex(0) , mItemIndex(0) , mSkillIndex(0) , mSkillStep(0) , mColor( NiColorA::WHITE ) , mAniParam(0) , mTipType( eTOOLTIP_NONE ) { } inline cQuickData::cQuickData( cQuickData& other ) : mType( eSHORTCUT_NONE ) , mDBIndex(0) , mItemIndex(0) , mSkillIndex(0) , mSkillStep(0) , mColor( NiColorA::WHITE ) , mAniParam(0) , mTipType( eTOOLTIP_NONE ) { operator=( other ); } inline void cQuickData::operator=( const cQuickData& other ) { mType = other.mType; mDBIndex = other.mDBIndex; mItemIndex = other.mItemIndex; mSkillIndex = other.mSkillIndex; mSkillStep = other.mSkillStep; mColor = other.mColor; mAniParam = other.mAniParam; mTipType = other.mTipType; } inline void cQuickData::operator=( unsigned int i ) { if( i <= 0 ) { mType = eSHORTCUT_NONE; mDBIndex = 0; mItemIndex = 0; mSkillIndex = 0; mSkillStep = 0; mColor = NiColorA::WHITE; mAniParam = 0; mTipType = eTOOLTIP_NONE; } else { assert(0); } } /// ¾ÆÀÌÄÜ ¹­À½ class cBindIcon { public: cBindIcon(); /// ´ëÀÔ void operator=( const cBindIcon& other ); void operator=( cIcon& other ); void Clear(); void SetParam( cIconParam* param ); void SetCount( unsigned int count ); void ShowNumber( bool show ); void SetColor( const NiColorA& color ); void SetColor( float r, float g, float b, float a ); void SetAniParam( sAniParam* param ); void SetTipType( unsigned int type ); void StopDelay(); public: cIcon* mRowIcon; cIcon* mColumnIcon; }; inline cBindIcon::cBindIcon() : mRowIcon(0) , mColumnIcon(0) { } inline void cBindIcon::operator=( const cBindIcon& other ) { cIcon* icon = other.mColumnIcon; operator=( *icon ); } inline void cBindIcon::operator=( cIcon& other ) { SetParam( other.GetIconParam() ); SetCount( other.GetNumber() ); ShowNumber( other.IsShowNumber() ); SetAniParam( other.GetAniParam() ); SetTipType( other.GetTipType() ); mRowIcon->ChangeGauge( other.GetGauge() ); mColumnIcon->ChangeGauge( other.GetGauge() ); } inline void cBindIcon::Clear() { SetParam(0); SetAniParam(0); SetColor( NiColorA::WHITE ); SetCount(0); StopDelay(); ShowNumber( false ); SetTipType( eTOOLTIP_NONE ); } inline void cBindIcon::SetParam( cIconParam* param ) { if( mRowIcon ) mRowIcon->ChangeImage( param ); if( mColumnIcon ) mColumnIcon->ChangeImage( param ); } inline void cBindIcon::SetCount( unsigned int count ) { if( mRowIcon ) mRowIcon->SetNumber( count ); if( mColumnIcon ) mColumnIcon->SetNumber( count ); } inline void cBindIcon::SetColor( float r, float g, float b, float a ) { if( mRowIcon ) mRowIcon->SetColor( r, g, b, a ); if( mColumnIcon ) mColumnIcon->SetColor( r, g, b, a ); } inline void cBindIcon::SetColor( const NiColorA& color ) { if( mRowIcon ) mRowIcon->SetColor( color ); if( mColumnIcon ) mColumnIcon->SetColor( color ); } inline void cBindIcon::ShowNumber( bool show ) { if( mRowIcon ) mRowIcon->ShowNumber( show ); if( mColumnIcon ) mColumnIcon->ShowNumber( show ); } inline void cBindIcon::SetAniParam( sAniParam* param ) { if( mRowIcon ) mRowIcon->SetAniParam( param ); if( mColumnIcon ) mColumnIcon->SetAniParam( param ); } inline void cBindIcon::SetTipType( unsigned int type ) { if( mRowIcon ) mRowIcon->SetTipType( type ); if( mColumnIcon ) mColumnIcon->SetTipType( type ); } inline void cBindIcon::StopDelay() { if( mRowIcon ) mRowIcon->StopDelay(); if( mColumnIcon ) mColumnIcon->StopDelay(); } /// Äü½½·Ô ¸Å´ÏÀú class cQuickManager { public: static cQuickManager* mSingleton; public: cQuickManager(); ~cQuickManager(); /// void Open(); /// ¸ðµç µ¥ÀÌÅÍ »èÁ¦ void Clear(); /// ³×Æ®¿öÅ© ¼¼ÆÃ void NetSetData( unsigned int dataIndex, const sShortcut& shortcut ); void NetUpdateData(); void SkillReset(); /// Äü½½·Ô »ç¿ë - ´ÜÃàŰ void OnKeyDown( int iconID ); void OnMouseDown( unsigned int iconId, bool IsFS = false ); /// Äü½½·Ô ¾÷µ¥ÀÌÆ® void UpdateUI(); bool UpdateIcon( int i, int iconId, bool countCheck = true ); void UpdateSkillStep( unsigned long skillIndex, unsigned char step ); // Æ©Å丮¾ó »óÅ¿¡¼­ Äü½½·Ô °»½Å void UpdateTutorial( unsigned int tabindexfs ); /// heroÀÇ Âø¿ë ¹«±â¿Í ½ºÅ³ ÀûÇÕ ¿©ºÎ °Ë»ç void CheckSkillIcon(); void CheckAllIcon(); /// ÀÏÁ¤ »óȲ¿¡¼­¸¸ ÇöÀç º¸ÀÌ´Â ÅǸ¸ °Ë»çÇÑ´Ù void CheckItemIcon(); /// Äü½½·Ô ÅÇüÀÎÁö void ChangeTabFS( unsigned int tabindex ); /// Äü½½·ÔÀÇ ¾ÆÀÌÄÜ À§Ä¡¿Í º¹»çÇÒ ¾ÆÀÌÄÜ Á¤º¸ void AddData( unsigned int iconId, cIcon* srcIcon, bool toIsFS ); void MoveData( unsigned int iconId, cIcon* srcIcon, bool toIsFS ); void DeleteData(); void DeleteData( unsigned int iconId, unsigned int dataIndex ); /// µî·Ï µ¥ÀÌÅͰ¡ ÀÖ´ÂÁö ¿©ºÎ bool IsUseSlot( unsigned int iconId, bool IsFS = false ); eSHORTCUT_TYPE GetQuickType( unsigned int iconId, bool IsFS = false ); unsigned long GetItemIndex( unsigned int iconId, bool IsFS = false ); unsigned long GetSkillIndex( unsigned int iconId, bool IsFS = false ); unsigned char GetSkillStep( unsigned int iconId, bool IsFS = false ); short GetMonSkillIndex( unsigned int iconId ); void DragIcon( cIcon* icon ); void UnDragIcon(); /// UI ¾ÆÀÌÄܰú ¹ÙÀεù void BindRowIcon( unsigned int index, cIcon* icon ); void BindColumnIcon( unsigned int index, cIcon* icon ); void BindFSRowIcon( unsigned int index, cIcon* icon ); void BindFSColumnIcon( unsigned int index, cIcon* icon ); void SetRowQuick( bool IsRow , int type = QUICKTYPE_COMMON ); bool IsRowQuick( int type = QUICKTYPE_COMMON ); void SetRowQuickFS( bool IsRow ); bool IsRowQuickFS() { return mIsRowQuickFS; } /// ¾ÆÀÌÄÜ ¾Ö´Ï¸ÞÀÌ¼Ç µ¹¸®±â void SetSkillAniAura( unsigned long skillIndex, sAniParam* param ); void SetCharge( unsigned long skillIndex, bool charge ); void SetMonCharge( unsigned long skillIndex, bool charge ); /// ¸ó½ºÅÍ ½ºÅ³ íÁö void LoadCoolTime(); void LoadCoolTimeMon(); /// ½ºÅ³°ü·Ã ÄðŸÀÓ void StartSkillCoolTime( unsigned long skillIndex, unsigned long cool ); void StartMonSkillCoolTime( short skillIdx, unsigned long cool ); void ClearCoolTime( unsigned long exceptSkillIdx ); /// ¸ó½ºÅÍ ½ºÅ³ °ü·Ã void ChangeMonster( unsigned long monIndex ); private: /// Äü½½·Ô »ç¿ë void UseQuickSlot( unsigned int iconId, bool IsFS = false ); void UseMonsterQuickSlot( unsigned int iconId ); bool UsableSkillIcon( eWEAPON_STATE heroWeaponState, unsigned long skillindex, unsigned char skillstep ); bool UsableMonSkillIcon( unsigned long skillindex ); public: static cQuickManager* GetSingleton(); private: /// Äü½½·Ô Á¤º¸ ( ÀÏ¹Ý Äü(30) + FS Äü(20) + ¸ó½ºÅÍ Äü(3) ) cQuickData mQuick[QUICKSLOT_TOTAL]; /// Äü½½·Ô ¾ÆÀÌÄÜ Á¤º¸ ( ÀÏ¹Ý Äü ¾ÆÀÌÄÜ(30) + FS Äü ¾ÆÀÌÄÜ(10) ) cBindIcon mBindIcon[QUICKSLOT_ICON_COUNT]; /// ¸ó½ºÅÍ º¯½ÅÀ¸·Î ÀÎÇÑ Äü½½·Ô ¶ô bool mIsLockByMonster; /// Äü½½·Ô ÅÇ À妽º unsigned int mTabIndexFS; /// FS ½½·Ô À妽º( ¹«±â ½º¿ÒÇÒ¶§ ¸¶´Ù ¹Ù²ñ. ) /// ¼¼·ÎÇü Äü½½·Ô ¿©ºÎ ( 0 : °¡·ÎÇü, 1 : ¼¼·ÎÇü ) bool mIsRowQuick[QUICKTYPE_COMMON_COUNT]; bool mIsRowQuickFS; /// FS ½½·Ô /// µå·¡±×ÁßÀÎ ¾ÆÀÌÄÜ cIcon* mDragIcon; }; inline void cQuickManager::BindRowIcon( unsigned int index, cIcon* icon ) { assert( icon ); if( index < QUICKSLOT_ICON_COMMON_BEGIN || index >= QUICKSLOT_ICON_COUNT ) { assert(0); return; } mBindIcon[index].mRowIcon = icon; } inline void cQuickManager::BindColumnIcon( unsigned int index, cIcon* icon ) { assert( icon ); if( index < QUICKSLOT_ICON_COMMON_BEGIN || index >= QUICKSLOT_ICON_COUNT ) { assert(0); return; } mBindIcon[index].mColumnIcon = icon; } inline void cQuickManager::BindFSRowIcon( unsigned int index, cIcon* icon ) { assert( icon ); if( index < QUICKSLOT_ICON_FS_BEGIN || index > QUICKSLOT_ICON_FS_END ) { assert(0); return; } mBindIcon[index].mRowIcon = icon; } inline void cQuickManager::BindFSColumnIcon( unsigned int index, cIcon* icon ) { assert( icon ); if( index < QUICKSLOT_ICON_FS_BEGIN || index > QUICKSLOT_ICON_FS_END ) { assert(0); return; } mBindIcon[index].mColumnIcon = icon; } inline cQuickManager* cQuickManager::GetSingleton() { return mSingleton; } #define QUICKMAN cQuickManager::GetSingleton()