#include "stdafx.h" #include "PartyBuff.h" #include "SkillScript.h" #include "icon.h" cPartyBuff::cPartyBuff() : mpBuffSkin(0) , mUpdatePos( false ) { } cPartyBuff::~cPartyBuff() { Clear(); } void cPartyBuff::Clear() { mOverInfo.mOverIconIdx = (unsigned int)-1; mOverCheck = false; mChangeOverIcon = false; mRButtonClickIconIdx = (unsigned int)-1; mChangeOverIcon = false; /// ¹öÇÁ ¸ñ·Ï { cBuffList::cIterator i = mBuffList.Begin(); cBuffList::cIterator end = mBuffList.End(); for( ; i != end; ++i ) { sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); SAFE_DELETE(p); } mBuffList.Clear(); } /// µð¹öÇÁ ¸ñ·Ï { cDeBuffList::cIterator i = mDeBuffList.Begin(); cDeBuffList::cIterator end = mDeBuffList.End(); for( ; i != end; ++i ) { sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); SAFE_DELETE(p); } mDeBuffList.Clear(); } /// ±âÁ¸¿¡ ¶°ÀÖ´ø ÆÁ ´Ý±â HideTip(); } void cPartyBuff::OnShow() { if( mBuffList.IsEmpty() && mDeBuffList.IsEmpty() ) { Hide(); return; } cUIWindow::OnShow(); } void cPartyBuff::OnHide() { cUIWindow::OnHide(); mOverInfo.mOverIconIdx = (unsigned int)-1; mChangeOverIcon = false; mOverCheck = false; } bool cPartyBuff::SetSkin( const cUINodeSkin* pskin ) { if( pskin->IsKindof( eUINODE_WINDOW ) == false ) { assert( 0 && "not window type" ); return false; } if( cUINode::SetSkin( pskin ) == false ) return false; cBuffWindowSkin* p = (cBuffWindowSkin*)pskin; if( !p ) return false; SetAlpha( p->mAlpha ); SetHoldView( p->mHoldView ); mRow = p->mRow; mColumn = p->mColumn; mRowSpace = p->mRowSpace; mColumnSpace = p->mColumnSpace; mIconSize = p->mIconSize; mTimerEnabled = true; mTimeOut = 100; mpBuffSkin = p; return true; } void cPartyBuff::UpdateSkin() { cUIWindow::UpdateSkin(); UpdateWindowSize(); } void cPartyBuff::OnMouseMove(const cUIPos& pos ) { /// 1ÃÊ ´ÜÀ§ üũ if( mOverCheck == false ) return; mOverCheck = false; UpdateMouseHover( pos ); } void cPartyBuff::UpdateMouseHover( const cUIPos &pos ) { if( mVisible == false ) { mChangeOverIcon = false; return; } unsigned int col; for( col=0; colGetInfluenceInfo( influenceIdx ); if( pInfo == 0 ) { assert(0); return; } cIconParam* pParam = UIMAN->GetIconParam( pInfo->mIconIdx ); if( pParam == 0 ) { assert(0); return; } if( !(pInfo->mType == eINFLUENCETYPE_BUF || pInfo->mType == eINFLUENCETYPE_DEBUF) ) return; sBuffBaseIcon* p = new sBuffBaseIcon; 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 ); // ¹öÇÁ, µð¹öÇÁ ºÐ·ù if( pInfo->mType == eINFLUENCETYPE_BUF ) { mBuffList.PushFront( p ); } else if( pInfo->mType == eINFLUENCETYPE_DEBUF ) { mDeBuffList.PushFront( p ); } /// ±âÁ¸¿¡ ¶°ÀÖ´ø ÆÁ ´Ý±â HideTip(); UpdateWindowSize(); } void cPartyBuff::DelBuff( unsigned long uniqueIdx ) { if( mBuffList.GetSize() <= 0 ) return; /// »èÁ¦ cBuffList::cIterator i = mBuffList.Begin(); cBuffList::cIterator iend = mBuffList.End(); for( ; i != iend; ++i ) { sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); if( p->mUniqueIdx == uniqueIdx ) { mBuffList.Erase( i ); SAFE_DELETE( p ); break; } } HideTip(); if( mBuffList.IsEmpty() && mDeBuffList.IsEmpty() ) Hide(); UpdateWindowSize(); } void cPartyBuff::DelDeBuff( unsigned long uniqueIdx ) { if( mDeBuffList.GetSize() <= 0 ) return; /// µð¹öÇÁ »èÁ¦ cDeBuffList::cIterator i = mDeBuffList.Begin(); cDeBuffList::cIterator end = mDeBuffList.End(); for( ; i != end; ++i ) { sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); if( p->mUniqueIdx == uniqueIdx ) { mDeBuffList.Erase( i ); SAFE_DELETE( p ); break; } } HideTip(); if( mBuffList.IsEmpty() && mDeBuffList.IsEmpty() ) Hide(); UpdateWindowSize(); } void cPartyBuff::UpdateRect() { cUIWindow::UpdateRect(); /// mUpdatePos = true; //UpdateWindowSize(); } void cPartyBuff::OnProcess( unsigned long deltaTime, unsigned long accumTime ) { if( mVisible == true ) { cUIWindow::OnProcess( deltaTime, accumTime ); if( mBuffList.GetSize() <= 0 && mDeBuffList.GetSize() <= 0) return; /// ¹öÇÁ¾ÆÀÌÄÜ { unsigned int count = 0; cBuffList::cIterator i = mBuffList.Begin(); cBuffList::cIterator end = mBuffList.End(); for( ; i != end; ++i ) { sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); if( !p ) continue; if( count >= mColumn ) break; /// ¹öÇÁ À̹ÌÁö »Ñ·ÁÁú À§Ä¡ Àç¼³Á¤ if( mUpdatePos ) { cUIRect rc = GetAbsoluteRect(); unsigned int x = rc.mLeft + (count%mColumn) * (mIconSize+mColumnSpace); unsigned int y = rc.mTop; p->mImage.SetScreenRect( cUIRect(x, y, x+mIconSize, y+mIconSize) ); } if( mChangeOverIcon && mOverInfo.mRow == 0 && mOverInfo.mOverIconIdx == count ) { EventOverIcon( p, mOverInfo.mPos ); mChangeOverIcon = false; } count++; } } /// µð¹öÇÁ¾ÆÀÌÄÜ { unsigned int count = 0; cDeBuffList::cIterator i = mDeBuffList.Begin(); cDeBuffList::cIterator end = mDeBuffList.End(); for( ; i != end; ++i ) { sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); if( !p ) continue; if( count >= mColumn ) break; /// ¹öÇÁ À̹ÌÁö »Ñ·ÁÁú À§Ä¡ Àç¼³Á¤ if( mUpdatePos ) { cUIRect rc = GetAbsoluteRect(); unsigned int x = rc.mLeft + (count%mColumn) * (mIconSize+mColumnSpace); unsigned int y = rc.mTop + (mIconSize+mRowSpace); if( mBuffList.GetSize() == 0 ) y = rc.mTop; p->mImage.SetScreenRect( cUIRect(x, y, x+mIconSize, y+mIconSize) ); } unsigned int row = 1; if( mBuffList.GetSize() == 0 ) row = 0; if( mChangeOverIcon && mOverInfo.mRow == row && mOverInfo.mOverIconIdx == count ) { EventOverIcon( p, mOverInfo.mPos ); mChangeOverIcon = false; } count++; } } mUpdatePos = false; } } void cPartyBuff::OnRender( cUIFontItemKeeper* pKeeper ) { cUIWindow::OnRender( pKeeper ); if( mBuffList.GetSize() <= 0 && mDeBuffList.GetSize() <= 0) return; /// ¹öÇÁ¾ÆÀÌÄÜ Âï±â { unsigned int count = 0; cBuffList::cIterator i = mBuffList.Begin(); cBuffList::cIterator end = mBuffList.End(); for( ; i != end; ++i ) { /// ÀÏÁ¤°¹¼ö ÀÌ»óÀº ÂïÁö ¾Ê´Â´Ù if( count >= mColumn ) break; sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); if( !p ) { assert(0); continue; } p->mImage.Draw(); count++; } } /// µð¹öÇÁ¾ÆÀÌÄÜ Âï±â { unsigned int count = 0; cDeBuffList::cIterator i = mDeBuffList.Begin(); cDeBuffList::cIterator end = mDeBuffList.End(); for( ; i != end; ++i ) { /// ÀÏÁ¤°¹¼ö ÀÌ»óÀº ÂïÁö ¾Ê´Â´Ù if( count == mColumn ) break; sBuffBaseIcon* p = (sBuffBaseIcon*)(*i); if( !p ) { assert(0); continue; } p->mImage.Draw(); count++; } } } void cPartyBuff::UpdateWindowSize() { /// window Àç°è»ê cUIRect rc; rc.mLeft = GetRelativeRect().mLeft; rc.mTop = GetRelativeRect().mTop; int buffCount = mBuffList.GetSize(); int debuffCount = mDeBuffList.GetSize(); if( buffCount > 0 ) rc.mRight = rc.mLeft + (mIconSize+mColumnSpace) * buffCount - mColumnSpace; else rc.mRight = 0; if( debuffCount > 0 ) { rc.mBottom = rc.mTop + (mIconSize+mRowSpace) * 2 - mRowSpace; /// µð¹öÇÁ°¡ ´õ ¸¸À¸¸é µð¹öÇÁ°¹¼ö·Î Àç°è½Ñ if( buffCount < debuffCount ) rc.mRight = rc.mLeft + (mIconSize+mColumnSpace) * debuffCount - mColumnSpace; } else rc.mBottom = rc.mTop + mIconSize; SetRelativeRect( rc ); } bool cPartyBuff::IsHaveBuff() { return ( mBuffList.GetSize() > 0 || mDeBuffList.GetSize() > 0 ); }