#include "stdafx.h" #include "CharacterInfo/SUICharacterInfoSubBasicWnd.h" #include "CharacterInfo/SUICharacterInfoWnd.h" #include "SPlayerInfoMgr.h" //#include "Util.h" //----------------------------------------------------------------------------------------------------------------- // 생성자 //----------------------------------------------------------------------------------------------------------------- SUICharacterInfoSubBasicWnd::SUICharacterInfoSubBasicWnd(SGameManager* pGameManager) : SUICharacterInfoSubMainWnd(pGameManager) , m_strPlusColorValue( "000000" ) , m_strMinusColorValue( "000000" ) { } //----------------------------------------------------------------------------------------------------------------- // 윈도우 생성 //----------------------------------------------------------------------------------------------------------------- SUIWnd* SUICharacterInfoSubBasicWnd::CreateWnd( const char* szFile, KUIWndManager* pWndManager, KPoint kPos, int nWindowID ) { SUIWnd::CreateWnd( szFile, pWndManager, kPos, nWindowID ); KUIWnd* pChildWnd_Plus( GetChild("static_plus01_value_01") ); if( pChildWnd_Plus ) { std::string strPlusColorValue( pChildWnd_Plus->GetCaption() ); CStringUtil::GetTextColorValue( strPlusColorValue, m_strPlusColorValue ); } else { SDEBUGLOG( "[SUICharacterInfoSubBasicWnd] Can't Find Plus Color Value Sample Control" ); assert( NULL ); } KUIWnd* pChildWnd_Minus( GetChild("static_minus01_value_01") ); if( pChildWnd_Minus ) { std::string strMinusColorValue( pChildWnd_Minus->GetCaption() ); CStringUtil::GetTextColorValue( strMinusColorValue, m_strMinusColorValue ); } else { SDEBUGLOG( "[SUICharacterInfoSubBasicWnd] Can't Find Minus Color Value Sample Control" ); assert( NULL ); } return this; } void SUICharacterInfoSubBasicWnd::refreshBaseStat() { CreatureStat stat; ::memcpy( &stat, &(m_PlayerInfoMgr.GetStat()), sizeof(stat) ); setOriValue( "static_status01_value", stat.strength , false, S(1410)); // 힘 setOriValue( "static_status02_value", stat.agility , false, S(1412)); // 민첩 setOriValue( "static_status03_value", stat.intelligence , false, S(1413)); // 지력 setOriValue( "static_status04_value", stat.luck , false, S(1416)); // 행운 setOriValue( "static_status05_value", stat.vital , false, S(1411)); // 체력 setOriValue( "static_status06_value", stat.dexterity , false, S(1415)); // 집중 setOriValue( "static_status07_value", stat.mentality , false, S(1414)); // 정신 } void SUICharacterInfoSubBasicWnd::refreshBattleStat() { CreatureAttribute attribute; ::memcpy( &attribute, &(m_PlayerInfoMgr.GetAttribute()), sizeof(attribute) ); setOriValue("static_basic01_value", attribute.nAttackPointRight, false, S(1417)); // 공격력 오른손 /*KUIControlStatic* pStatic = dynamicCast< KUIControlStatic* > (GetChild( "static_basic01_value" )); if ( !m_bLeft ) { m_nBasicY = pStatic->GetRect().top; m_bLeft = TRUE; }*/ /*if ( attribute.nAttackPointLeft == 0 ) { SetChildShow ( "static_basic01_left_value", false ); // SetMovePos ( "static_basic01_value", pStatic->GetRect().left,m_nBasicY+5 ); } else { SetChildShow ( "static_basic01_left_value", true ); // SetMovePos ( "static_basic01_value", pStatic->GetRect().left,m_nBasicY ); }*/ setOriValue("static_basic01_left_value", attribute.nAttackPointLeft, false, S(1417)); // 공격력 왼손 setOriValue("static_basic02_value", attribute.nAccuracyRight, false, S(1418)); // 명중 // setOriValue("static_basic02_left_value", attribute.nAccuracyLeft, false, S(1418)); // 명중 setOriValue("static_basic03_value", attribute.nDefence, false, S(1421)); // 방어력 setOriValue("static_basic04_value", attribute.nAvoid, false, S(1423)); // 회피 //AziaMafia Fix Attack Speed //float fAttackSpeedPerSec = (attribute.nAttackSpeed + m_PlayerInfoMgr.GetItemAttribute().nAttackSpeed) / 115.f; float fAttackSpeedPerSec = (attribute.nAttackSpeed + m_PlayerInfoMgr.GetItemAttribute().nAttackSpeed) / 100.f; setOriValue("static_basic05_value", attribute.nAttackSpeed, false, SR( 1425, "#@VALUE@#", fAttackSpeedPerSec ).c_str()); // 공격 속도 setOriValue("static_basic06_value", attribute.nCritical, true, S(1432)); // 치명타율 setOriValue("static_basic07_value", attribute.nBlockChance, true, S(1432)); // 블럭률 setOriValue("static_basic08_value", attribute.nMagicPoint, false, S(1419)); // 마력 setOriValue("static_basic09_value", attribute.nMagicAccuracy, false, S(1420)); // 마명중 setOriValue("static_basic10_value", attribute.nMagicDefence, false, S(1422)); // 마법 방어 setOriValue("static_basic11_value", attribute.nMagicAvoid, false, S(1424)); // 마법 저항 float fCastingDelay = 100.f - (100.f / (attribute.nCastingSpeed + m_PlayerInfoMgr.GetItemAttribute().nCastingSpeed)*100.f); setOriValue("static_basic12_value", attribute.nCastingSpeed, false, SR( 1427, "#@VALUE@#", fCastingDelay ).c_str()); // 시전 속도 setOriValue("static_basic13_value", attribute.nCriticalPower, true, S(1435)); // 치명타위력 setOriValue("static_basic14_value", attribute.nBlockDefence, false, S(1433)); // 블럭방어력 setOriValue("static_basic15_value", attribute.nPerfectBlock, true, S(1437)); // 퍼펙트 블럭률 setOriValue("static_basic16_value", attribute.nMoveSpeed, false, S(1426)); // 이동 속도 refreshExpandBattleStat(attribute); } void SUICharacterInfoSubBasicWnd::refreshExpandBattleStat(CreatureAttribute const& attribute) { setOriValue("static_expand01_value", attribute.nHPRegenPercentage, true, S(1428)); // hp 재생률 setOriValue("static_expand02_value", attribute.nMPRegenPercentage, true, S(1430)); // mp 재생률 setOriValue("static_expand03_value", attribute.nPhysicalPenetration, false, S(1440)); // 물리피해무시 setOriValue("static_expand04_value", attribute.nPhysicalDefIgnore, false, S(1438)); // 물리방어무시 setOriValue("static_expand05_value", attribute.nHPRegenPoint, false, S(1429)); // hp 회복력 setOriValue("static_expand06_value", attribute.nMPRegenPoint, false, S(1431)); // mp 회복력 setOriValue("static_expand07_value", attribute.nMagicalPenetration, false, S(1441)); // 마법피해관통 setOriValue("static_expand08_value", attribute.nMagicalDefIgnore, false, S(1439)); // 마법방어무시 //setOriValue("static_expand05_value", attribute.nCoolTimeSpeed, false, S(1436)); // 재시전속도 //setOriValue("static_expand04_value", attribute.nCritical, true, S(1434)); // 치명타률 //setOriValue("static_expand03_value", attribute.nPhysicalPenetrationRatio, false, S(1444)); // 물리피해관통% //setOriValue("static_expand04_value", attribute.nPhysicalDefIgnoreRatio, false, S(1442)); // 물리방어무시% //setOriValue("static_expand10_value", attribute.nBlockDefence, false, S(1433)); // 블럭 방어력 //setOriValue("static_expand07_value", attribute.nMagicalPenetrationRatio, false, S(1445)); // 마법피해관통% //setOriValue("static_expand17_value", attribute.nMagicalDefIgnoreRatio, false, S(1443)); // 마법방어무시% } void SUICharacterInfoSubBasicWnd::refreshBaseItemStat(CreatureStat const& stat) { setItemValue( "static_status01_plus_value" , stat.strength ); // 힘 setItemValue( "static_status02_plus_value" , stat.agility ); // 민첩 setItemValue( "static_status03_plus_value" , stat.intelligence ); // 지력 setItemValue( "static_status04_plus_value" , stat.luck ); // 행운 setItemValue( "static_status05_plus_value" , stat.vital ); // 체력 setItemValue( "static_status06_plus_value" , stat.dexterity ); // 집중 setItemValue( "static_status07_plus_value" , stat.mentality ); // 정신 setSignString( "static_status01_p", stat.strength ); setSignString( "static_status02_p", stat.agility ); setSignString( "static_status03_p", stat.intelligence ); setSignString( "static_status04_p", stat.luck ); setSignString( "static_status05_p", stat.vital ); setSignString( "static_status06_p", stat.dexterity ); setSignString( "static_status07_p", stat.mentality ); } void SUICharacterInfoSubBasicWnd::refreshBattleItemStat(CreatureAttribute const& attribute) { memcpy(&m_creatureAttribute, &attribute, sizeof (m_creatureAttribute)); setItemValue("static_basic01_plus_value", attribute.nAttackPointRight); // 공격력 오른손 setItemValue("static_basic01_left_plus_value", attribute.nAttackPointLeft); // 공격력 왼손 setItemValue("static_basic02_plus_value", attribute.nAccuracyRight); // 명중 오른손 //setItemValue("static_basic02_left_plus_value", attribute.nAccuracyLeft); // 명중 왼손 setItemValue("static_basic03_plus_value", attribute.nDefence); // 방어력 setItemValue("static_basic04_plus_value", attribute.nAvoid); // 회피 setItemValue("static_basic05_plus_value", attribute.nAttackSpeed); // 공격 속도 setItemValue("static_basic06_plus_value", attribute.nCritical, true); // 치명타률 setItemValue("static_basic07_plus_value", attribute.nBlockChance, true); // 블럭률 setItemValue("static_basic08_plus_value", attribute.nMagicPoint); // 마력 setItemValue("static_basic09_plus_value", attribute.nMagicAccuracy); // 마명중 setItemValue("static_basic10_plus_value", attribute.nMagicDefence); // 마법 방어 setItemValue("static_basic11_plus_value", attribute.nMagicAvoid); // 마법 저항 setItemValue("static_basic12_plus_value", attribute.nCastingSpeed); // 시전 속도 setItemValue("static_basic13_plus_value", attribute.nCriticalPower, true); // 치명타위력 setItemValue("static_basic14_plus_value", attribute.nBlockDefence, true); // 블럭방어력 setItemValue("static_basic15_plus_value", attribute.nPerfectBlock, true); // 퍼펙트 블럭률 setItemValue("static_basic16_plus_value", attribute.nMoveSpeed); // 이동 속도 setSignString("static_basic01_p", attribute.nAttackPointRight); // 공격력 오른손 setSignString("static_basic01_left_p", attribute.nAttackPointLeft); // 공격력 왼손 setSignString("static_basic02_p", attribute.nAccuracyRight); // 명중 오른손 //setSignString("static_basic02_left_p", attribute.nAccuracyLeft); // 명중 왼손 setSignString("static_basic03_p", attribute.nDefence); // 방어력 setSignString("static_basic04_p", attribute.nAvoid); // 회피 setSignString("static_basic05_p", attribute.nAttackSpeed); // 공격 속도 setSignString("static_basic06_p", attribute.nCritical); // 치명타률 setSignString("static_basic07_p", attribute.nBlockChance); // 블럭률 setSignString("static_basic08_p", attribute.nMagicPoint); // 마력 setSignString("static_basic09_p", attribute.nMagicAccuracy); // 마명중 setSignString("static_basic10_p", attribute.nMagicDefence); // 마법 방어 setSignString("static_basic11_p", attribute.nMagicAvoid); // 마법 저항 setSignString("static_basic12_p", attribute.nCastingSpeed); // 시전 속도 setSignString("static_basic13_p", attribute.nCriticalPower); // 치명타위력 setSignString("static_basic14_p", attribute.nBlockDefence); // 블럭방어력 setSignString("static_basic15_p", attribute.nPerfectBlock); // 퍼펙트 블럭률 setSignString("static_basic16_p", attribute.nMoveSpeed); // 이동 속도 refreshExpandBattleItemStat(attribute); } void SUICharacterInfoSubBasicWnd::refreshExpandBattleItemStat(CreatureAttribute const& attribute) { setItemValue("static_expand01_plus_value", attribute.nHPRegenPercentage, true); // hp 재생률 setItemValue("static_expand02_plus_value", attribute.nMPRegenPercentage, true); // mp 재생률 int nNum = ( attribute.nPhysicalPenetration * ( 100 + attribute.nPhysicalPenetrationRatio ) ) / 100; setItemValue("static_expand03_plus_value", nNum ); // 물리피해관통 nNum = ( attribute.nPhysicalDefIgnore * ( 100 + attribute.nPhysicalDefIgnoreRatio ) ) / 100; setItemValue("static_expand04_plus_value", nNum); // 물리방어무시 setItemValue("static_expand05_plus_value", attribute.nHPRegenPoint); // hp 회복력 setItemValue("static_expand06_plus_value", attribute.nMPRegenPoint); // mp 회복력 nNum = ( attribute.nMagicalPenetration * ( 100 + attribute.nMagicalPenetrationRatio ) ) / 100; setItemValue("static_expand07_plus_value", attribute.nMagicalPenetration*1.5f); // 마법피해관통 nNum = ( attribute.nMagicalDefIgnore * ( 100 + attribute.nMagicalDefIgnoreRatio ) ) / 100; setItemValue("static_expand08_plus_value", attribute.nMagicalDefIgnore*1.5f); // 마법방어무시 //setItemValue("static_expand03_plus_value", attribute.nBlockChance, true); // 블럭율 //setItemValue("static_expand05_plus_value", attribute.nCoolTimeSpeed); // 재시전속도 //setItemValue("static_expand06_plus_value", attribute.nPhysicalDefIgnore); // 물리방어무시 //setItemValue("static_expand07_plus_value", attribute.nPhysicalPenetration); // 물리피해관통 //setItemValue("static_expand03_plus_value", attribute.nPhysicalPenetrationRatio);// 물리피해관통% //setItemValue("static_expand04_plus_value", attribute.nPhysicalDefIgnoreRatio); // 물리방어무시% //setItemValue("static_expand10_plus_value", attribute.nBlockDefence); // 블럭 방어력 //setItemValue("static_expand07_plus_value", attribute.nMagicalPenetrationRatio); // 마법피해관통% //setItemValue("static_expand08_plus_value", attribute.nMagicalDefIgnoreRatio); // 마법방어무시% setSignString("static_expand01_p", attribute.nHPRegenPercentage); // hp 재생률 setSignString("static_expand02_p", attribute.nMPRegenPercentage); // mp 재생률 setSignString("static_expand03_p", attribute.nPhysicalPenetration); // 물리피해관통 setSignString("static_expand04_p", attribute.nPhysicalDefIgnore); // 물리방어무시 setSignString("static_expand05_p", attribute.nHPRegenPoint); // hp 회복력 setSignString("static_expand06_p", attribute.nMPRegenPoint); // mp 회복력 setSignString("static_expand07_p", attribute.nMagicalPenetration); // 마법피해관통 setSignString("static_expand08_p", attribute.nMagicalDefIgnore); // 마법방어무시 //setSignString("static_expand03_p", attribute.nBlockChance); // 블럭율 //setSignString("static_expand04_p", attribute.nCritical); // 치명타률 //setSignString("static_expand05_p", attribute.nCoolTimeSpeed); // 재시전속도 //setSignString("static_expand03_p", attribute.nPhysicalPenetrationRatio);// 물리피해관통% //setSignString("static_expand04_p", attribute.nPhysicalDefIgnoreRatio); // 물리방어무시% //setSignString("static_expand10_p", attribute.nBlockDefence); // 블럭 방어력 //setSignString("static_expand11_p", attribute.nCriticalPower); // 치명타위력 //setSignString("static_expand12_p", attribute.nPerfectBlock); // 퍼펙트 블럭률 //setSignString("static_expand13_p", attribute.nMagicalDefIgnore); // 마법방어무시 //setSignString("static_expand07_p", attribute.nMagicalPenetrationRatio); // 마법피해관통% //setSignString("static_expand08_p", attribute.nMagicalDefIgnoreRatio); // 마법방어무시% } void SUICharacterInfoSubBasicWnd::setOriValue(char const* controlId, int value, bool isPer, const char* szTooltip ) { if( NULL == controlId ) { SDEBUGLOG( "[SUICharacterInfoSubBasicWnd] Control Id Ptr is NULL" ); assert( NULL ); return ; } std::string strFilter = "%"; if( !isPer ) strFilter = ""; KUIWnd* pChildWnd( GetChild( controlId ) ); if( NULL == pChildWnd ) return ; string strChildCaption( "" ); CStringUtil::GetTextDecoration( pChildWnd->GetCaption(), strChildCaption ); strChildCaption.append( "%d%s" ); std::string str( CStringUtil::StringFormat( strChildCaption.c_str() , value, strFilter.c_str()) ); SetChildCaption(controlId, str.c_str()); // 툴팁 추가 if( szTooltip != NULL ) { SetChildTooltip( controlId, szTooltip ); } } void SUICharacterInfoSubBasicWnd::setItemValue(char const* controlId, int value, bool isPer) { if( NULL == controlId ) { SDEBUGLOG( "[SUICharacterInfoSubBasicWnd] Control Id Ptr is NULL" ); assert( NULL ); return ; } bool show = (value == 0) ? false : true; SetChildShow(controlId, show); if ( false == show ) return ; KUIWnd* pChildWnd( GetChild( controlId ) ); if( NULL == pChildWnd ) { SDEBUGLOG( "[SUICharacterInfoSubBasicWnd] Can't Find Control ID - [ %s ]", controlId ); return ; } string strChildCaption( "" ); CStringUtil::GetTextDecoration( pChildWnd->GetCaption(), strChildCaption ); string strValue( "" ); if( value > 0 ) CStringUtil::ReplaceTextColorValue( strChildCaption, m_strPlusColorValue ); else CStringUtil::ReplaceTextColorValue( strChildCaption, m_strMinusColorValue ); strChildCaption.append( "%d%s" ); std::string strFilter( "%" ); if( !isPer ) strFilter = ""; SetChildCaption(controlId, CStringUtil::StringFormat( strChildCaption.c_str(), abs(value), strFilter.c_str() ).c_str() ); } void SUICharacterInfoSubBasicWnd::setSignString(char const* controlId, int value) { if( NULL == controlId ) { SDEBUGLOG( "[SUICharacterInfoSubBasicWnd] Control Id Ptr is NULL" ); assert( NULL ); return ; } bool show = (value == 0) ? false : true; SetChildShow(controlId, show); if ( false == show ) return ; KUIWnd* pChildWnd( GetChild( controlId ) ); if( NULL == pChildWnd ) return ; string strChildCaption( "" ); CStringUtil::GetTextDecoration( pChildWnd->GetCaption(), strChildCaption ); string strSign( "" ); if (value > 0) { CStringUtil::ReplaceTextColorValue( strChildCaption, m_strPlusColorValue ); strSign = "+"; } else { CStringUtil::ReplaceTextColorValue( strChildCaption, m_strMinusColorValue ); strSign = "-"; } strChildCaption.append( "%s" ); SetChildCaption( controlId, CStringUtil::StringFormat( strChildCaption.c_str(), strSign.c_str() ).c_str() ); } void SUICharacterInfoSubBasicWnd::setExpand(bool expand, bool applyParent) { m_isExpand = expand; /// parent if (applyParent) { SUICharacterInfoWnd* parent = dynamicCast(GetParent()); parent->setExpand(expand); } bool show = expand ? true : false; SetChildShow("text_basic_03", show); SetChildShow("basic_table_03", show); for (int i = 1; i < 15; ++i) { SetChildShow(CStringUtil::StringFormat("static_expand%02d", i).c_str(), show); SetChildShow(CStringUtil::StringFormat("static_expand%02d_value", i).c_str(), show); } /// 확장이 보여질 때 아이템에 의한 값의 show/hide는 아이템의 값에 의해서 결정된다 if (show) { refreshExpandBattleItemStat(m_creatureAttribute); } else { for (int i = 1; i < 15; ++i) { SetChildShow(CStringUtil::StringFormat("static_expand%02d_p", i).c_str(), show); SetChildShow(CStringUtil::StringFormat("static_expand%02d_plus_value", i).c_str(), show); } } SetChildShow("tab_select_cyan_01", false); SetChildShow("tab_select_cyan_02", false); if (!expand) SetChildShow("tab_select_cyan_01", true); else SetChildShow("tab_select_cyan_02", true); setShowFoldButton(expand); }