#include "StdAfx.h" #include ".\duelbuff.h" #include "GameUIManager.h" #include "GameResourceManager.h" #include "Skill_Common.h" #include "SkillScript.h" #include "icon.h" #include "ObjectManager.h" #include "Hero.h" cDuelBuff::cDuelBuff() { mLeftAlign = true; } cDuelBuff::~cDuelBuff() { } void cDuelBuff::OnProcess( unsigned long deltaTime, unsigned long accumTime ) { cUIWindow::OnProcess( deltaTime, accumTime ); if( mVisible == false ) return; unsigned int count = 0; cBuffIconList::cIterator i = (--mIconList.End()); cBuffIconList::cIterator iend = (--mIconList.Begin()); for( ; i != iend; --i ) { sBuffIcon* p = (sBuffIcon*)(*i); if( p == 0 ) continue; if( count == mRow*mColumn ) continue; /// ¿µ¿ª Àç¼³Á¤ if( mUpdateList ) { unsigned int sx = mStartX; unsigned int sy = mStartY; if( mpParent ) { cUIRect parentAbsolute = mpParent->GetAbsoluteRect(); sx += parentAbsolute.mLeft; sy += parentAbsolute.mTop; } unsigned int x = 0; unsigned int y = 0; if( mLeftAlign ) x = sx + ((count%mColumn) * (mIconSize+mColumnSpace)); else x = sx + ((mColumn-(count%mColumn)-1) * (mIconSize+mColumnSpace)); y = sy + ((count/mColumn) * (mIconSize+mRowSpace)); p->mImage.SetScreenRect( cUIRect(x, y, x+mIconSize, y+mIconSize) ); p->mTextX = x; p->mTextY = y+mIconSize + 1; } if( mChangeOverIcon && mOverInfo.mOverIconIdx == count ) { EventOverIcon( p, mOverInfo.mPos ); mChangeOverIcon = false; } if( mRButtonClickIconIdx == count ) { mRButtonClickIconIdx = (unsigned int)-1; sInfluenceScript* pScript = SKILLSCRIPT->GetInfluenceInfo( p->mInfluenceIdx ); if( pScript ) { if( pScript->mTypeDetail == eINFLUENCETYPEDETAIL_NAME ) return; if( p->mAuraType == false ) { if( pScript->mType == eINFLUENCETYPE_BUF ) { MSG_REQ_INFLUENCE_DELETE Msg; Msg.Category = NM_SKILL; Msg.Protocol = NM_SKILL_INFLUENCE_DELETE_REQ; Msg.mUniqueIdx = p->mUniqueIdx; NETWORK->SendNetworkMsg( (char*)&Msg, sizeof( Msg ) ); /// ¶ô if( mpParent ) mpParent->NetLock(); } else if( pScript->mType == eINFLUENCETYPE_CASH ) { UIMAN->CreateMsgBox( eStage_Game, eMSGBOX_MODAL, eMBEVENT_DELETE_CASHBUFF, eSKIN_YESNO, GAMERESOURCEMAN->GetGameText( 6501 ), GAMERESOURCEMAN->GetGameText( 6500 ), (void*)p->mUniqueIdx ); } } } else assert(0); } count++; } } void cDuelBuff::OnRender( cUIFontItemKeeper* /*pKeeper*/ ) { if( mUpdateList ) { /// window Àç°è»ê cUIRect r; r.mRight = mStartX + mColumn*(mIconSize+mColumnSpace) - mColumnSpace; r.mTop = mStartY; if( mLeftAlign ) { r.mLeft = mStartX; } else { if( mIconList.GetSize() < mColumn ) r.mLeft = mStartX + (mColumn - mIconList.GetSize())*(mIconSize+mColumnSpace); else r.mLeft = mStartX; } unsigned int row = min((mIconList.GetSize()-1)/mColumn + 1, mRow); r.mBottom = mStartY + row * (mIconSize+mRowSpace) - mRowSpace; SetRelativeRect( r ); } unsigned int count = 0; cBuffIconList::cIterator i = (--mIconList.End()); cBuffIconList::cIterator iend = (--mIconList.Begin()); for( ; i != iend; --i ) { if( count == mRow*mColumn ) break; sBuffIcon* p = (sBuffIcon*)(*i); if( p->mShow ) p->mImage.Draw(); count++; } } void cDuelBuff::OnMouseMove( const cUIPos& pos ) { /// 1ÃÊ ´ÜÀ§ üũ if( mOverCheck == false ) return; mOverCheck = false; unsigned int x = mStartX; unsigned int y = mStartY; if( mpParent ) { x += mpParent->GetAbsoluteRect().mLeft; y += mpParent->GetAbsoluteRect().mTop; } unsigned int col; for( col=0; colIsJumping() == true ) return; if( IsNetLock() == true ) return; unsigned int x = mStartX; unsigned int y = mStartY; if( mpParent ) { x += mpParent->GetAbsoluteRect().mLeft; y += mpParent->GetAbsoluteRect().mTop; } unsigned int col; for( col=0; colGetBuffTip(); if( pTip ) { mBuffTipShow = true; UIMAN->ShowBuffTip( pTip, pos, p->mUniqueIdx, p->mInfluenceIdx, false ); } } void cDuelBuff::AddIcon( unsigned long uniqueIdx, unsigned long influenceIdx ) { cBuffIconList::cIterator i = mIconList.Begin(); cBuffIconList::cIterator end = mIconList.End(); sBuffIcon* tmpBuf = NULL; for( ; i != end ; ++i ) { tmpBuf = (sBuffIcon*)(*i); if( tmpBuf == NULL ) { assert(0); return; } if( tmpBuf->mInfluenceIdx == influenceIdx && tmpBuf->mUniqueIdx == uniqueIdx ) { return; } } sInfluenceScript* pInfo = SKILLSCRIPT->GetInfluenceInfo( influenceIdx ); if( pInfo == 0 ) { assert(0); return; } cIconParam* pParam = UIMAN->GetIconParam( pInfo->mIconIdx ); if( pParam == 0 ) { assert(0); return; } sBuffIcon* p = new sBuffIcon; p->mTotalTime = pInfo->mContinuanceTime; p->mAuraType = (pInfo->mTypeDetail == eINFLUENCETYPEDETAIL_AURA); p->mUniqueIdx = uniqueIdx; p->mInfluenceIdx = influenceIdx; /// À̹ÌÁö ¼ÂÆÃ p->mImage.SetTexture( pParam->mpTexture ); /// ÅØ½ºÃ³ ¿µ¿ª ¼³Á¤ unsigned int tx = pParam->mTexPos.mX; unsigned int ty = pParam->mTexPos.mY; p->mImage.SetTextureRect( tx, ty, tx + ICON_SIZE, ty + ICON_SIZE ); mIconList.PushBack( p ); HideTip(); mUpdateList = true; /// npc À©µµ¿ì°¡ º¸ÀÌ¸é ¿ì¼± ¿¹¾à Show(); mRButtonClickIconIdx = (unsigned int)-1; }