⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statusicondlg.cpp

📁 墨香最新私服
💻 CPP
字号:
// StatusIconDlg.cpp: implementation of the CStatusIconDlg class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "StatusIconDlg.h"
#include "./Interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "./Input/UserInput.h"
#include "./Interface/cFont.h"
#include "MHFile.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

GLOBALTON(CStatusIconDlg)
CStatusIconDlg::CStatusIconDlg()
{
	m_pDescriptionArray = NULL;
	m_pObject = NULL;
	memset(m_IconCount,0,sizeof(WORD)*eStatusIcon_Max);
	memset(m_StatusIcon,0,sizeof(cImage*)*eStatusIcon_Max);

	m_CurIconNum = 0;
}

CStatusIconDlg::~CStatusIconDlg()
{
	if(m_pDescriptionArray)
	{
		delete [] m_pDescriptionArray;
	}
}


void CStatusIconDlg::AddIcon(CObject* pObject,WORD StatusIconNum)
{
	if(pObject != m_pObject)
		return;
	if(StatusIconNum >= eStatusIcon_Max)
		__asm int 3;
	
	++m_IconCount[StatusIconNum];

	if( m_IconCount[StatusIconNum] == 1 )
		++m_CurIconNum;
}

void CStatusIconDlg::RemoveIcon(CObject* pObject,WORD StatusIconNum)
{
	if(pObject != m_pObject)
		return;

	if(StatusIconNum >= eStatusIcon_Max)
		__asm int 3;

	if(m_IconCount[StatusIconNum] == 0)
		return;
	
	--m_IconCount[StatusIconNum];

	if( m_IconCount[StatusIconNum] == 0 )
		--m_CurIconNum;
}

void CStatusIconDlg::LoadDescription()
{
	CMHFile file;
	if(file.Init("image/buf_msg.bin","rb",MHFILE_FLAG_DONOTDISPLAY_NOTFOUNDERROR) == FALSE)
		return;
	
	char buf[256];
	m_MaxDesc = file.GetInt();
	file.GetLine(buf,256);	// read enter
	m_pDescriptionArray = new StaticString[m_MaxDesc+1];
	for(int n=1;n<=m_MaxDesc;++n)	// 酒捞能 锅龋啊 1何磐 矫累茄促.
	{
		file.GetLine(buf,256);
		m_pDescriptionArray[n] = buf;
	}
	
	file.Release();
}

void CStatusIconDlg::Init(CObject* pObject,VECTOR2* pDrawPosition,int MaxIconPerLine)
{
	memset(m_IconCount,0,sizeof(WORD)*eStatusIcon_Max);
	memset(m_StatusIcon,0,sizeof(cImage*)*eStatusIcon_Max);

	m_pObject = pObject;
	m_DrawPosition = *pDrawPosition;
	m_MaxIconPerLine = MaxIconPerLine;

	// image load
	for(int n=1;n<eStatusIcon_Max;++n)
	{
		SCRIPTMGR->GetImage( n-1, &m_StatusIcon[n] , PFT_BUFFPATH );
	}
	
	//Description Load
	if(m_pDescriptionArray == NULL)
	{
		LoadDescription();
	}

	cImage ToolTipImg;
	SCRIPTMGR->GetImage( 63, &ToolTipImg, PFT_HARDPATH );
	m_toolTip.Init( 0, TTTC_DEFAULT, &ToolTipImg, TTCLR_ITEM_CANEQUIP );
	m_toolTip.SetImageAlpha( TOOLTIP_ALPHA );

	m_CurIconNum = 0;
}

void CStatusIconDlg::Release()
{
	m_pObject = NULL;
	m_CurIconNum = 0;
	memset(m_IconCount,0,sizeof(WORD)*eStatusIcon_Max);
	memset(m_StatusIcon,0,sizeof(cImage*)*eStatusIcon_Max);
}

void CStatusIconDlg::Render()
{
	if(m_pObject == NULL)
		return;

	int mx = g_UserInput.GetMouse()->GetMouseX();
	int my = g_UserInput.GetMouse()->GetMouseY();
	
	int curx = 0;
	int cury = 0;
	VECTOR2 curpos;
	int IconNum = 0;
	for(int n=1;n<eStatusIcon_Max;++n)
	{
		if(m_IconCount[n] == 0)
			continue;
		if(m_StatusIcon[n].IsNull())
			continue;

		curpos.x = m_DrawPosition.x + curx*40;
		curpos.y = m_DrawPosition.y + cury*40;
		m_StatusIcon[n].RenderSprite(NULL,NULL,0,&curpos,0xffffffff);
		
		if(++curx >= m_MaxIconPerLine)
		{
			curx = 0;
			++cury;
		}
/*
		if( m_toolTip.IsValid() )
		{
			WINDOWMGR->SetToolTipWindow( &m_toolTip );
			m_toolTip.SetXY(m_ttX+TOOLTIP_MOUSESIZE_X, m_ttX+TOOLTIP_MOUSESIZE_Y);
		}
*/		

		if( !WINDOWMGR->IsMouseOverUsed() )
		{
			int dx = int(mx - curpos.x);
			int dy = int(my - curpos.y);
			if(0 < dx && dx < 40 && 0 < dy && dy < 40)
			{
				//RECT rect = { (long)curpos.x, (long)curpos.y, (long)curpos.x+100, (long)curpos.y+20 };
				m_toolTip = m_pDescriptionArray[n];
				m_toolTip.SetXY( mx+TOOLTIP_MOUSESIZE_X, my+TOOLTIP_MOUSESIZE_Y );
				WINDOWMGR->SetToolTipWindow( &m_toolTip );
//				m_toolTip.Render();
//				CFONT_OBJ->RenderFont( 0, m_pDescriptionArray[n], strlen(m_pDescriptionArray[n]), &rect, 0xffffffff );
			}
		}

		if( ++IconNum >= m_CurIconNum )
			break;
		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -