#include "StdAfx.h" #include "gameResourceManager.h" #include "Skill_Common.h" #include "SkillScript.h" #include "SkillManager.h" #include "SkillStepListWindow.h" #include "SkillStepListBox.h" #include "SkillExecuter.h" #include "SkillIcon.h" #include "SkillWindow.h" #include "DragWindow.h" #include "ObjectManager.h" #include "Hero.h" cSkillStepListWindow::cSkillStepListWindow( eUINodeType type ) : cUIWindow( type ) , mpSkillStepListBox(0) , mCurrentJobStep(0) { SetExceptSnap( true ); mUpdateSkillInfo = false; } cSkillStepListWindow::~cSkillStepListWindow() { Clear(); } void cSkillStepListWindow::Clear() { if( mpSkillStepListBox ) mpSkillStepListBox->Clear(); mUpdateSkillInfo = false; } bool cSkillStepListWindow::OnCreate( cUINodeProperty* pProperty ) { if( cUIWindow::OnCreate( pProperty ) == false ) return false; mpSkillStepListBox = (cSkillStepListBox*)GetChild( eUIID_GAME_SKILL_STEPLISTBOX ); if( !mpSkillStepListBox ) return false; // ½ºÅ³ ¾ÆÀÌÄÜ N°³ »ý¼º Default : 10 // Á÷¾÷ °¹¼ö¸¸ Å­ ¸®½ºÆ® ¿µ¿ªÀ» ºÐÇÒÇÏ¿© »ý¼ºÇÑ´Ù. ³ªÁß¿¡ ij¸¯ÅÍÀÇ ÇöÀç Á÷¾÷ °¹¼ö »óŸ¦ ¾ò¾î¿Í¼­ ¼ÂÆÃÇÏ°Ô ¹Ù²Û´Ù. mpSkillStepListBox->CreateSplitSize( gSplitCount, gSplitSize ); mpSkillStepListBox->CreateSkillICon(); Hide(); return true; } void cSkillStepListWindow::OnProcess( unsigned long deltaTime, unsigned long accumTime ) { if( mUpdateSkillInfo == true ) { UpdateSkill(); mUpdateSkillInfo = false; } cUIWindow::OnProcess( deltaTime, accumTime ); } bool cSkillStepListWindow::SetSkin( const cUINodeSkin* pskin ) { if( false == cUIWindow::SetSkin( pskin ) ) return false; return true; } void cSkillStepListWindow::Open() { } // ÇØ´ç Á÷¾÷ void cSkillStepListWindow::UpdateSkill() { if( NULL == mpSkillStepListBox ) return; // ÇØ´ç Á÷¾÷ ¿µ¿ªÀÇ ½ºÅ³ ºÎºÐ¸¸ Ŭ¸®¾î ÇÑ´Ù. mpSkillStepListBox->ClearSplitRange(mCurrentJobStep); tPointerHashMap* haveSkillMap = SKILLMAN->GetKeepSkillMap(); // »ç¿ëÀÚÀÇ º¸À¯ ½ºÅ³ ¸ñ·Ï if( haveSkillMap != NULL ) { cStringT strLvAndStep; unsigned long skillidx = 0; sKeepSkill* pHaveSkill = NULL; sPlayerSkillBaseInfo* pSkillInfo = NULL; sPlayerSkillStepInfo* pSkillStep = NULL; tPointerHashMap::cIterator iter = haveSkillMap->Begin(); tPointerHashMap::cIterator iterEnd = haveSkillMap->End(); // º¸À¯ ½ºÅ³ ¸ñ·ÏÀ» °¡Á®¿Â´Ù. while( iter != iterEnd ) { // º¸À¯ÇÑ ½ºÅ³ÀÇ Á¤º¸¸¦ ¾ò¾î ¿Â´Ù. skillidx = (*iter).mFirst; pHaveSkill = (sKeepSkill*)((*iter).mSecond); pSkillInfo = SKILLSCRIPT->GetPlayerSkillInfo( skillidx ); ++iter; if( !pHaveSkill || !pSkillInfo ) { assert(NULL); continue; } //================================================================== // ±âº»°ø°Ý, ÆÐ½Ãºê, ¿À¶ó ½ºÅ³ Á¦¿Ü if( mCurrentJobStep != pSkillInfo->mJobStep ) continue; if( pSkillInfo->mType == eSKILLTYPE_PASSIVE ) continue; if( skillidx <= NORMAL_ATTACK_SKILL_MAX ) continue; if( pSkillInfo->mShotType == eSHOTTYPE_AURA ) continue; //================================================================== // ½ºÅ³ ½Àµæ ´Ü°è¸¸Å­ ÄÁÅ×À̳ʿ¡ »ðÀÔ for( unsigned char nStep = 0; nStep <= pHaveSkill->mStep; nStep++ ) { sSkillInfoEx *pExSkillData = new sSkillInfoEx; pExSkillData->mpSkillInfo = pSkillInfo; pExSkillData->mSkillStep = nStep; pSkillStep = &pSkillInfo->mpSetpInfoArray[nStep]; // ½ºÅ³ À̸§ / ½Àµæ¿ä±¸ ·¹º§, ½ºÅ³´Ü°è LPCTSTR strSkillname = GAMERESOURCEMAN->GetSkillNameText( pSkillInfo->mNameIdx ); int rowIdx = mpSkillStepListBox->AddRowAt( mCurrentJobStep, strSkillname, COLOR_WHITE, static_cast( pExSkillData ) ); if( rowIdx != -1 ) { strLvAndStep.Format( UIMAN->GetUIText( 107 ), pSkillStep->mPlayerLevel, nStep+1 ); mpSkillStepListBox->AddColume( rowIdx, (LPCTSTR)strLvAndStep.Cstr(), COLOR_WHITE ); } else { SAFE_DELETE(pExSkillData); } } } // ´Ü°èº° ¸®½ºÆ® ¹Ú½º Á¤·Ä mpSkillStepListBox->Sort(); // ½ºÅ³ ¾ÆÀÌÄÜ ¸®½ºÆ® ¹Ú½º Render Data °ª °»½Å mpSkillStepListBox->UpdateIConListInfo(); } } // ÇöÀç Á÷¾÷ À妽º ¹× ¸®½ºÆ® ¹Ú½º ºÐÇÒ ¿µ¿ª ¼³Á¤ void cSkillStepListWindow::SetCurrentJobStep( unsigned char jobStep ) { if( mpSkillStepListBox ) { mCurrentJobStep = jobStep; mpSkillStepListBox->SetCurrentSplitIndex( jobStep ); } } // ij¸¯ÅÍÀÇ ¸ðµç ½ºÅ³ °³½Å //void cSkillStepListWindow::UpdateAllSkill() //{ // for( unsigned char iJob = 0; iJob < mCntJobs; iJob++ ) // { // mCurrentJobStep = iJob; // UpdateSkill(); // } //} void cSkillStepListWindow::OnListBoxSelected( cUINode* pcaller, unsigned int id) { OnIconDoubleClicked( pcaller, id ); } void cSkillStepListWindow::OnIconDragged( cUINode* caller, unsigned int id, const cUIPos& pos, bool shift ) { cIcon* icon = (cIcon*)caller; if( icon == 0 ) return; if( icon->GetIconType() == eICON_SKILL ) { UIMAN->ShowDrag( this, DRAG_FROM_SKILLWINDOW, icon, pos, shift ); } else if( icon->GetIconType() == eICON_COMMUNITY ) { UIMAN->ShowDrag( this, DRAG_FROM_COMMUNITYWINDOW, icon, pos, shift ); } else { assert(0); } } void cSkillStepListWindow::OnIconDoubleClicked(cUINode* pcaller, unsigned int id) { cSkillIcon* p = (cSkillIcon*)pcaller; unsigned long skillIdx = p->GetSkillIdx(); unsigned char skillStep = p->GetSkillStep(); HERO->SetWaitMoveFlag( eWAITMOVE_NONE ); if( skillIdx < NORMAL_ATTACK_SKILL_MAX ) { if( HERO->GetState() != eOBJECT_STATE_ATTACK ) SKILLEXECUTER->ExecuteAttack( HERO->GetTargetObject() ); } else { if( SKILLMAN->IsUsedKeepSkill( skillIdx, skillStep ) == true ) { SKILLEXECUTER->ExecuteSkill( skillIdx, skillStep ); } } } // ¸®½ºÆ® ¹Ú½ºÀÇ ½ºÅ³ ¾ÆÀÌÄÜ Àç ¼³Á¤ ¿äû void cSkillStepListWindow::UpdateIConListInfo() { if( mpSkillStepListBox ) mpSkillStepListBox->UpdateIConListInfo(); }