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

📄 2dmapitem.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
字号:
// 2DMapItem.cpp: implementation of the C2DMapItem class.
//
//////////////////////////////////////////////////////////////////////

#include "2DMapItem.h"
#include "GameDataSet.h"
#include "3DGameMap.h"
#include "Item.h"


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

C2DMapItem::C2DMapItem(OBJID idItemType)
{
	m_dwFrame		= 0;
	m_idItemType	= idItemType;
	strcpy(m_szName, "");
	ItemEffectInfo* pInfo = g_objGameDataSet.GetItemEffectInfo(m_idItemType);
	if(pInfo)
	{
		if(!m_objEffectEx.TestEffect((char*)pInfo->strMapItemEffect.c_str()))
			m_objEffectEx.Add((char*)pInfo->strMapItemEffect.c_str());
	}
	m_dwBegin	= ::TimeGet();
	m_bShowName = false;
}

C2DMapItem::~C2DMapItem()
{
	m_objEffectEx.Clear();
}

//----------------------------------------------------------------------
C2DMapItem* C2DMapItem::CreateNew(CMyPos posCell, OBJID idItem,OBJID idType,char* szName)
{
	if(idType == ID_NONE)
		return NULL;
	
	C2DMapItem* pItem = new C2DMapItem(idType);
	MYASSERT(pItem);
	
	pItem->m_idItem = idItem;
	pItem->SetPos(posCell);
	if (szName && strlen(szName))
		pItem->SetShowName(szName);
	return pItem;
}

//----------------------------------------------------------------------
void C2DMapItem::Show(void* pInfo)
{
	this->GetWorldPos(m_posWorld);

	char szAni[256] = "";
	sprintf(szAni, "%u", m_idItemType);

	CAni* pAni = g_objGameDataSet.GetDataAni("ani/MapItemIcon.Ani", szAni);
	if (!pAni)
	{
		pAni = g_objGameDataSet.GetDataAni("ani/MapItemIcon.Ani", "Default");
		if (!pAni)
			return;		
	}
	CMyPos posScr = m_posCell;
	CMyPos posWorld, posBg;
	g_objGameMap.Cell2World(m_posCell.x, m_posCell.y, posWorld.x, posWorld.y);
	g_objGameMap.World2Bg(posWorld.x, posWorld.y, posBg.x, posBg.y);
	m_objEffectEx.Process();
	g_objGameMap.Cell2Screen(m_posCell.x, m_posCell.y, posScr.x, posScr.y);
	CMySize sizeAni = pAni->GetSize(m_dwFrame);
	CMyPos posShow = { posScr.x-sizeAni.iWidth/4, posScr.y-sizeAni.iHeight/4};
	CMyBitmap* pBmp = pAni->GetFrame(m_dwFrame++);
	if(pBmp)
	{
		unsigned char ucA, ucR, ucG, ucB;
		ucA = m_dwARGB >> 24;
		ucR = (m_dwARGB & 0x00ff0000) >> 16;
		ucG = (m_dwARGB & 0x0000ff00) >> 8;
		ucB = m_dwARGB & 0x000000ff;
		pBmp->SetColor(ucA, ucR, ucG, ucB);
		CMyPos posBmpShow = {posShow.x, posShow.y};
		g_objGameMap.MapScaleShowPos(posBmpShow.x, posBmpShow.y);
		CMySize sizeBmp;
		pBmp->GetSize(sizeBmp.iWidth, sizeBmp.iHeight);
		int nScale = g_objGameMap.GetScale ();
		CMySize sizeShow;
		sizeShow.iWidth =  sizeBmp.iWidth*nScale/256;
		sizeShow.iHeight = sizeBmp.iHeight*nScale /256;
		pBmp->ShowEx(posBmpShow.x,posBmpShow.y , NULL,sizeShow.iWidth,sizeShow.iHeight );
	
		if (m_bShowName || g_objGameMap.GetShowMapObjInfoFlag())
		{
			const OBJID idMoney = 300000;
			if (strlen(m_szName) == 0)
			{
				ItemTypeInfo info;
				if (!CItem::s_ItemData.GetItemTypeInfo(m_idItemType, info))
					strcpy(info.szName, g_objGameDataSet.GetStr(idMoney));
				strcpy(m_szName,info.szName);
			}
			int nMsgLen = strlen(m_szName)*(CMyBitmap::GetFontSize()/2);
			CMyPos posShowName = {posBmpShow.x + (sizeShow.iWidth - nMsgLen)/2, posBmpShow.y};
	//		if(m_bShowName)
	//		{
	//			CMyBitmap::ShowString(posShowName.x, posShowName.y-10, _COLOR_YELLOW,m_szName);
	//		}
	//		else	
			CMyBitmap::ShowString(posShowName.x, posShowName.y, _COLOR_YELLOW,m_szName);
	//		g_objGameMap.m_InfoViewManager.AddStringView(m_szName, posShowName, _COLOR_YELLOW);
		}
	}
	m_objEffectEx.Show(posBg);
}

//----------------------------------------------------------------------
void C2DMapItem::Process(void* pInfo)
{
	if (::TimeGet() - m_dwBegin < 500) 
		return;



	if (g_objGameMap.IsPosVisible(m_posCell))
	{
		CInteractiveLayer* pLayer = g_objGameMap.GetInteractiveLayer();
		if(pLayer)
			pLayer->ApplyShow(this);
	}
}
//----------------------------------------------------------------------
BOOL C2DMapItem::IsFocus()
{
	CMyPos posMouse, posCell;
	::MouseCheck(posMouse.x, posMouse.y);
	g_objGameMap.Mouse2Cell(posMouse.x, posMouse.y, posCell.x, posCell.y);
	if((posCell.x == m_posCell.x) && (posCell.y == m_posCell.y))
	{
		m_bShowName = true;
		return true;
	}
	else
	{
		m_bShowName = false;
		return false;
	}
}
//----------------------------------------------------------------------




















⌨️ 快捷键说明

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