#include "stdafx.h" #include "SGame.h" #include "SStringDB.h" #include "SMotionMgr.h" //#include "SGameMessageUI.h" #include "GameDefine.h" #include "SUISysMsgDefine.h" #include "SDebug_Util.h" SMotionSlot::SMotionSlot() { m_nMotionPos = 0; m_nMotionCommandID = 0; m_strMotionName.clear(); m_strMotionToolTip.clear(); m_bUse = false; m_bCasting = false; m_bShooting = false; m_dwCoolTime = 0; m_dwStartTime = 0; m_dwBeginTime = 0; m_dwMaxTime = 0; } SMotionSlot::~SMotionSlot() { } void SMotionSlot::AddMotion( int nPos, const char* szIconName, int nCommandID, const char* szMotionName, const char* szMotionToolTip ) { m_nMotionPos = nPos; m_strIconName = szIconName; m_nMotionCommandID = nCommandID; m_strMotionName = szMotionName; m_strMotionToolTip = szMotionToolTip; } void SMotionSlot::SetUse( bool bUse ) { m_bUse = bUse; } void SMotionSlot::Process( DWORD dwTime ) { /* if( !m_bUse ) return; if( m_dwStartTime == 0 ) { m_dwStartTime = dwTime; return; }*/ // if( (dwTime-m_dwStartTime) >= m_dwCoolTime ) { // SetUse( false ); } // 남은 시간 계산 : // 인터페이스에서 사용 /* if( m_bShooting ) { DWORD dwCurTime = dwTime - m_dwBeginTime; if( dwCurTime >= m_dwMaxTime ) { SetShooting(false); // 인터페이스에 알려준다 ProcMsgAtStatic( &SIMSG_UI_MOTION_TIME_UPDATE( m_nMotionCommandID ) ); } }*/ } ////////////////////////////////////////////////////////////////////////// // SMotionMgr::SMotionMgr() : SGameUIMgr() // 2011.03.29 - servantes { m_vecMotionList.clear(); InitMotionList(); } SMotionMgr::~SMotionMgr() { m_vecMotionList.clear(); } void SMotionMgr::ResetInfo() { m_dwTime = 0; } void SMotionMgr::InitMotionList() { SMotionSlot motion; //TODO : UI 아이콘 순서대로 인덱스가 설정 되어 있음. motion.AddMotion( ID_ATTACK , "icon_order_0001", MOTION_ATTACK , GetStringDB().GetString(SYS_NAME_ORDER_08), GetStringDB().GetString(SYS_TOOLTIP_ORDER_08) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_STANDUP , "icon_order_0002", MOTION_STANDUP , GetStringDB().GetString(SYS_NAME_ORDER_05), GetStringDB().GetString(SYS_TOOLTIP_ORDER_05) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_PICKUP , "icon_order_0003", MOTION_PICKUP , GetStringDB().GetString(SYS_NAME_ORDER_07), GetStringDB().GetString(SYS_TOOLTIP_ORDER_07) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_ASSIST , "icon_order_0004", MOTION_ASSIST , S(1035), S(2035) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_PKMODE , "icon_order_0009", MOTION_PKMODE , S(1036), S(2036) ); m_vecMotionList.push_back(motion); //motion.AddMotion( ID_RUN , "icon_order_0012", MOTION_RUN , GetStringDB().GetString(SYS_NAME_ORDER_06), GetStringDB().GetString(SYS_TOOLTIP_ORDER_06) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_MOUNT , "icon_order_0013", MOTION_MOUNT , S(1037), S(2037) ); m_vecMotionList.push_back(motion); // motion.AddMotion( ID_CAST_CANCEL, "icon_order_0001", MOTION_CAST_CANCEL , "취소", "현재 행동을 취소합니다" ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_CREATURE_ATTACK , "icon_order_0006", CREATURE_ATTACK , GetStringDB().GetString(SYS_NAME_ORDER_02), GetStringDB().GetString(SYS_TOOLTIP_ORDER_02) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_CREATURE_ALLATTACK, "icon_order_0007", CREATURE_ALLATTACK , GetStringDB().GetString(SYS_NAME_ORDER_01), GetStringDB().GetString(SYS_TOOLTIP_ORDER_01) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_CREATURE_BACKDOWN , "icon_order_0008", CREATURE_BACKDOWN , GetStringDB().GetString(SYS_NAME_ORDER_04), GetStringDB().GetString(SYS_TOOLTIP_ORDER_04) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_TRADE , "icon_order_0005", MOTION_TRADE , S(1038), S(2038) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_COMBINE, "icon_order_0010", MOTION_COMBINE , S(1039), S(2039) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_BOOTH , "icon_order_0011", MOTION_BOOTH , S(1040), S(2040) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_HI , "icon_emotion_0001", MOTION_HI , S(1041),S(2041) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_BOW , "icon_emotion_0002", MOTION_BOW , S(1042),S(2042) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_HAPPY , "icon_emotion_0003", MOTION_HAPPY , S(1043),S(2043) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_SORROW , "icon_emotion_0004", MOTION_SORROW , S(1044),S(2044) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_YES , "icon_emotion_0005", MOTION_YES , S(1045),S(2045) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_NO , "icon_emotion_0006", MOTION_NO , S(1046),S(2046) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_BORING , "icon_emotion_0007", MOTION_BORING , S(1047),S(2047) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_APOLOGIZE, "icon_emotion_0008", MOTION_APOLOGIZE , S(1048),S(2048) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_CHEER , "icon_emotion_0009", MOTION_CHEER , S(1049),S(2049) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_POUT , "icon_emotion_0010", MOTION_POUT , S(1050),S(2050) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_DANCE , "icon_emotion_0011", MOTION_DANCE , S(1051),S(2051) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_CLAP , "icon_emotion_0012", MOTION_CLAP , S(1052),S(2052) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_ANGRY , "icon_emotion_0013", MOTION_ANGRY , S(1053),S(2053) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_PROVOKE , "icon_emotion_0014", MOTION_PROVOKE , S(1054),S(2054) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_PARTY_CREATE, "icon_order_0014", MOTION_ANGRY , S(1055),S(2055) ); m_vecMotionList.push_back(motion); motion.AddMotion( ID_PARTY_INVITE, "icon_order_0015", MOTION_PROVOKE , S(1056),S(2056) ); m_vecMotionList.push_back(motion); //AziaMafia ADD EMOTE motion.AddMotion(ID_TP, "motion_normal_icon30", MOTION_YES, S(2100033373), S(2100033374)); m_vecMotionList.push_back(motion); motion.AddMotion(ID_LOOT, "motion_normal_icon31", MOTION_YES, S(2100033375), S(2100033376)); m_vecMotionList.push_back(motion); motion.AddMotion(ID_TAME, "motion_normal_icon32", MOTION_YES, S(2100033377), S(2100033378)); m_vecMotionList.push_back(motion); motion.AddMotion(ID_BUFF, "motion_normal_icon33", MOTION_YES, S(2101000037), S(2101000029)); m_vecMotionList.push_back(motion); motion.AddMotion(ID_BUFFGUILD, "motion_normal_icon34", MOTION_YES, S(2101000038), S(2101000039)); m_vecMotionList.push_back(motion); motion.AddMotion(ID_TPTAMINGZONE, "motion_normal_icon35", MOTION_YES, S(2101000030), S(2101000031)); m_vecMotionList.push_back(motion); motion.AddMotion(ID_ATRADE, "motion_normal_icon36", MOTION_YES, S(2101000032), S(2101000033)); m_vecMotionList.push_back(motion); //카드만 줍기(사용하지 않음) //motion.AddMotion( ID_PICKUP_CARD, "icon_order_0003", MOTION_PICKUP_CARD , S(-1008), S(-1009) ); m_vecMotionList.push_back(motion); } void SMotionMgr::UseMotion( int nPos ) { SIMSG_UI_ACT_USECOMMAND msg; msg.nCmdID = GetMotionCommandID(nPos); ProcMsgAtStatic(&msg); } const int SMotionMgr::GetMotionCommandID( int nPos ) const { if( m_vecMotionList.size() <= 0 ) return -1; std::vector::const_iterator it = m_vecMotionList.begin(); while( it != m_vecMotionList.end() ) { if( (*it).GetPos() == nPos ) return (*it).GetCommandID(); it++; } return -1; } const char* SMotionMgr::GetIconIconName( int nPos ) const { if( m_vecMotionList.size() <= 0 ) return "NotFound"; std::vector::const_iterator it = m_vecMotionList.begin(); while( it != m_vecMotionList.end() ) { if( (*it).GetPos() == nPos ) return (*it).GetIconName(); it++; } return "NotFound"; } const char* SMotionMgr::GetMotionName( int nPos ) const { if( m_vecMotionList.size() <= 0 ) return NULL; std::vector::const_iterator it = m_vecMotionList.begin(); while( it != m_vecMotionList.end() ) { if( (*it).GetPos() == nPos ) return (*it).GetName(); it++; } return NULL; } const char* SMotionMgr::GetToolTip( int nPos ) const { if( m_vecMotionList.size() <= 0 ) return NULL; std::vector::const_iterator it = m_vecMotionList.begin(); while( it != m_vecMotionList.end() ) { if( (*it).GetPos() == nPos ) return (*it).GetToolTip(); it++; } return NULL; } const SMotionSlot* SMotionMgr::GetMotion( int nPos ) const { if( m_vecMotionList.size() <= 0 ) return NULL; std::vector::const_iterator it = m_vecMotionList.begin(); while( it != m_vecMotionList.end() ) { if( (*it).GetPos() == nPos ) return &(*it); it++; } return NULL; } const bool SMotionMgr::IsEnableMotion( int nPos ) const { if( m_vecMotionList.size() <= 0 ) return false; std::vector::const_iterator it = m_vecMotionList.begin(); while( it != m_vecMotionList.end() ) { if( (*it).GetPos() == nPos ) return true; it++; } return false; } void SMotionMgr::AddCooling( int nMotionCmd ) { std::vector::iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionCmd ) { (*iter).SetUse( true ); break; } } } void SMotionMgr::SetCastingMotion( int nMotionCmd, bool bCasting ) { std::vector::iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionCmd ) { (*iter).SetCasting( bCasting ); break; } } } void SMotionMgr::SetShootingMotion( int nMotionCmd, bool bShooting, DWORD dwDelayTime ) { std::vector::iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionCmd ) { (*iter).SetCasting( false ); (*iter).SetShooting( bShooting ); (*iter).SetBeginTime( m_dwTime ); (*iter).SetMaxTime( dwDelayTime ); break; } } } const bool SMotionMgr::IsCastingMotion( int nMotionCmd ) const { std::vector::const_iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionCmd ) { return (*iter).IsCasting(); } } return false; } const bool SMotionMgr::IsShootingMotion( int nMotionCmd ) const { std::vector::const_iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionCmd ) { return (*iter).IsShooting(); } } return false; } const DWORD SMotionMgr::GetSkillMaxTime( int nMotionID ) const { std::vector::const_iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionID ) return (*iter).GetMaxTime(); } return 0; } const DWORD SMotionMgr::GetSkillCurTime( int nMotionID ) const { std::vector::const_iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).GetCommandID() == nMotionID ) return m_dwTime - (*iter).GetBeginTime(); } return 0; } void SMotionMgr::Process( DWORD dwTime ) { m_dwTime = dwTime; std::vector::iterator iter = m_vecMotionList.begin(); for(; iter != m_vecMotionList.end(); iter++ ) { if( (*iter).IsUse() == false ) continue; if( (*iter).m_dwStartTime == 0 ) { (*iter).m_dwStartTime = dwTime; continue; } // 남은 시간 계산 : // 인터페이스에서 사용 if( (*iter).m_bShooting ) { DWORD dwCurTime = dwTime - (*iter).m_dwBeginTime; if( dwCurTime >= (*iter).m_dwMaxTime ) { (*iter).SetShooting(false); // 인터페이스에 알려준다 ProcMsgAtStatic( &SIMSG_UI_MOTION_TIME_UPDATE( (*iter).m_nMotionCommandID ) ); } } } }