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

📄 radar.cpp

📁 网络游戏魔域源代码 测试可以完整变异
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// Radar.cpp: implementation of the CRadar class.
//
//////////////////////////////////////////////////////////////////////

#include "Radar.h"
#include "GameDataSet.h"
#include "3DGameMap.h"
#include "GamePlayerSet.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
const int _MAP_FRAME_SIZEX = 128;
const int _MAP_FRAME_SIZEY = 128;
const int _POS_FRAME_SIZE = 8;

CRadar::CRadar()
{
	m_setNpcInfo.clear();
	this->LoadNpc();
}

CRadar::~CRadar()
{
	m_setNpcInfo.clear();
}
//--------------------------------------------------------------------------------------
void CRadar::LoadNpc()
{
	FILE* fp = fopen("ini/Radar.ini", "r");
	if(!fp)
		return;
	while(true)
	{
		NpcInfo info;
		int nResult = fscanf(fp, "%u %u %u %d\n", &info.idMapDoc, &info.posNpc.x, &info.posNpc.y,&info.NpcType);
		if(nResult == EOF)
		{
			fclose(fp);
			return;
		}
		if(nResult == 4)
		{
			m_setNpcInfo.push_back(info);
		}
	}
}
//--------------------------------------------------------------------------------------
void CRadar::Show(CMyPos posScr, OBJID idMap, int nMode)
{
//	return;
	const char szAniFile[] = "ani/MiniMap.ani";
	char szAniName[256] = "";
	sprintf(szAniName, "%u", idMap);
	CAni* pAni = g_objGameDataSet.GetDataAni((char*)szAniFile, szAniName);
	CAni* pHeroAni = g_objGameDataSet.GetDataAni((char*)szAniFile, "Hero");
	CAni* pAniLeader = g_objGameDataSet.GetDataAni((char*)szAniFile, "TeamLeader");
	CAni* pAniNpc = g_objGameDataSet.GetDataAni((char*)szAniFile, "Npc");
	CAni* pAniTransPoint = g_objGameDataSet.GetDataAni((char*)szAniFile,"TransPoint");
	
	if(!pAni)
		return;
	if(pAni->GetFrameAmount() != 3)
		return;
	CMySize sizeAni;
	float   fMapMode;
	switch(nMode)
	{
	case _MODE_128:
		fMapMode = 128;
		sizeAni = pAni->GetSize(0);
		break;
	case _MODE_256:
		fMapMode = 256;
		sizeAni = pAni->GetSize(1);
		break;
	case _MODE_512:
		fMapMode = 512;
		sizeAni = pAni->GetSize(2);
		break;
	}
	CMyPos posScreenCenter;
	posScreenCenter.x = _SCR_WIDTH/2;
	posScreenCenter.y = _SCR_HEIGHT/2;
	CMyPos posWorldCenter;
	g_objGameMap.Screen2World(posScreenCenter.x, posScreenCenter.y,
	posWorldCenter.x, posWorldCenter.y);
	CMyPos posBgCenter;
	g_objGameMap.World2Bg(posWorldCenter.x, posWorldCenter.y, posBgCenter.x, posBgCenter.y);
			
	// get BgSize
	CMySize sizeBg;
	g_objGameMap.GetBgSize(sizeBg);

	// get scale 
	float fScaleX =(float) sizeAni.iWidth / sizeBg.iWidth;
	float fScaleY =(float) sizeAni.iHeight / sizeBg.iHeight;
	
	// get ani center pos
	CMyPos posAniCenter;
	posAniCenter.x = posBgCenter.x * fScaleX;
	posAniCenter.y = posBgCenter.y * fScaleY;
	CMyPos posAni;
	posAni.x = posAniCenter.x - _MAP_FRAME_SIZEX/2;
	posAni.y = posAniCenter.y - _MAP_FRAME_SIZEY/2;
	
	if(posAni.x < 0)
		posAni.x = 0;
	if(posAni.y < 0)
		posAni.y = 0;
	if(posAni.x > sizeAni.iWidth-_MAP_FRAME_SIZEX)
		posAni.x = sizeAni.iWidth-_MAP_FRAME_SIZEX;
	if(posAni.y > sizeAni.iHeight-_MAP_FRAME_SIZEY)
		posAni.y = sizeAni.iHeight-_MAP_FRAME_SIZEY;
	CMyBitmap* pBmp = pAni->GetFrame(nMode);
	if(!pBmp)
		return;
	
	RECT rect = {posAni.x, posAni.y, posAni.x + _MAP_FRAME_SIZEX, posAni.y + _MAP_FRAME_SIZEY};
	pBmp->ShowEx(posScr.x, posScr.y, &rect, _MAP_FRAME_SIZEX, _MAP_FRAME_SIZEY);

	posScr.x -=_POS_FRAME_SIZE;
	posScr.y -=_POS_FRAME_SIZE;

	if (pAniNpc)
	{
		int nAmount = m_setNpcInfo.size();
		for(int i = 0; i < nAmount; i ++)
		{
			NpcInfo info = m_setNpcInfo[i];
			if(info.idMapDoc == g_objGameMap.GetIDDoc())
			{
				CMyPos posNpcCell, posNpcBg, posNpcScr, posNpcWorld;
				posNpcCell = info.posNpc;
				
				g_objGameMap.Cell2World(posNpcCell.x, posNpcCell.y, posNpcWorld.x, posNpcWorld.y);
				g_objGameMap.World2Bg(posNpcWorld.x, posNpcWorld.y, posNpcBg.x, posNpcBg.y);
				
				if (info.NpcType == 1)
				{
					posNpcScr.x = posScr.x - posAni.x + posNpcBg.x * fScaleX;
					posNpcScr.y = posScr.y - posAni.y + posNpcBg.y * fScaleY;
					if(posNpcScr.x > posScr.x && posNpcScr.y > posScr.y 
						&& posNpcScr.x < posScr.x + _MAP_FRAME_SIZEX  
						&& posNpcScr.y < posScr.y + _MAP_FRAME_SIZEY
						)
						pAniNpc->Show(0, posNpcScr.x, posNpcScr.y);
				}
				else if (info.NpcType == 2)
				{
					posNpcScr.x = posScr.x - posAni.x + posNpcBg.x * fScaleX ;
					posNpcScr.y = posScr.y - posAni.y + posNpcBg.y * fScaleY ;
					if(posNpcScr.x > posScr.x && posNpcScr.y > posScr.y 
						&& posNpcScr.x < posScr.x + _MAP_FRAME_SIZEX 
						&& posNpcScr.y < posScr.y + _MAP_FRAME_SIZEY
						)
						pAniTransPoint->Show(0, posNpcScr.x, posNpcScr.y);
				}
			}					
		}
	}
	//MATE
	CPlayer* pPlayer  = g_objPlayerSet.GetPlayer(g_objHero.GetMate());
	if(pPlayer )
	{
		CMyPos posMateCell, posMateBg, posMateScr, posMateWorld;
		
		pPlayer->GetPos(posMateCell);
		g_objGameMap.Cell2World(posMateCell.x, posMateCell.y, posMateWorld.x, posMateWorld.y);
		g_objGameMap.World2Bg(posMateWorld.x, posMateWorld.y, posMateBg.x, posMateBg.y);
		
		CAni* pMateAni = g_objGameDataSet.GetDataAni((char*)szAniFile, "Mate", EXIGENCE_IMMEDIATE);
		if (pMateAni)
		{
			posMateScr.x = posScr.x - posAni.x + posMateBg.x * fScaleX ;
			posMateScr.y = posScr.y - posAni.y + posMateBg.y * fScaleY ;
			if(posMateScr.x > posScr.x && posMateScr.y > posScr.y 
				&& posMateScr.x < posScr.x + _MAP_FRAME_SIZEX  
				&& posMateScr.y < posScr.y + _MAP_FRAME_SIZEY  
				)
				pMateAni->Show(0, posMateScr.x, posMateScr.y);
		}
	}	
	int i;		// team member ...
	int nTeamMemberAmount = g_objHero.GetTeamMemberAmount();
	for(i = 0; i < nTeamMemberAmount; i ++)
	{
		TeamMemberInfo* pInfo = g_objHero.GetTeamMemberInfo(i);
		if(!pInfo)
			continue;
		if (pInfo->id == g_objHero.GetID())
			continue;
		
		CMyPos posTeamCell, posTeamBg, posTeamScr, posTeamWorld;
		
		CPlayer* pPlayer  = g_objPlayerSet.GetPlayer(pInfo->id);
		if (i == 0)
		{
			if (!pPlayer)											
			{
				const DWORD dwTeamLeaderPosTimeout = 6 * 1000;

				posTeamCell = g_objHero.GetTeamLeaderPos();
				if (::TimeGet() - g_objHero.GetTeamLeaderFlashTime() >= dwTeamLeaderPosTimeout)
					continue;
			}
			else
			{
				if (!IsOnlyTeamMember(pInfo)) 
					continue;
				
				pPlayer->GetPos(posTeamCell);
			}
		}
		else
		{
			if(!pPlayer)
				continue;
			if (!IsOnlyTeamMember(pInfo)) 
				continue;
			
			pPlayer->GetPos(posTeamCell);
		}
		g_objGameMap.Cell2World(posTeamCell.x, posTeamCell.y, posTeamWorld.x, posTeamWorld.y);
		g_objGameMap.World2Bg(posTeamWorld.x, posTeamWorld.y, posTeamBg.x, posTeamBg.y);
		
		
		CAni* pTeamAni;
		if (i == 0)
			pTeamAni = g_objGameDataSet.GetDataAni((char*)szAniFile, "TeamLeader", EXIGENCE_IMMEDIATE);
		else 
			pTeamAni = g_objGameDataSet.GetDataAni((char*)szAniFile, "TeamMember", EXIGENCE_IMMEDIATE);
		if(pTeamAni)
		{
			posTeamScr.x = posScr.x - posAni.x + posTeamBg.x * fScaleX ;
			posTeamScr.y = posScr.y - posAni.y + posTeamBg.y * fScaleY ;
			if(posTeamScr.x > posScr.x && posTeamScr.y > posScr.y 
				&& posTeamScr.x < posScr.x + _MAP_FRAME_SIZEX  
				&& posTeamScr.y < posScr.y + _MAP_FRAME_SIZEY)
				pTeamAni->Show(0, posTeamScr.x, posTeamScr.y);
		}		
		//		pPlayer->SetShowIcon(true);
	}		
	BOOL bShowTeam = true;
	if(g_objHero.GetTeamMemberAmount() == 0)
		bShowTeam = false;
	if(::TimeGet() - g_objGameMap.GetFriendBeginShow() > 3 * 1000)
		bShowTeam = false;
	if(bShowTeam)
	{
		CMyPos posTeamCell, posTeamBg, posTeamScr, posTeamWorld;
		
		g_objGameMap.GetFriendPos(posTeamCell);
		g_objGameMap.Cell2World(posTeamCell.x, posTeamCell.y, posTeamWorld.x, posTeamWorld.y);
		g_objGameMap.World2Bg(posTeamWorld.x, posTeamWorld.y, posTeamBg.x, posTeamBg.y);
		
		CAni* pTeamAni = g_objGameDataSet.GetDataAni((char*)szAniFile, "TeamMember", EXIGENCE_IMMEDIATE);
		if(pTeamAni)
		{					
			posTeamScr.x = posScr.x - posAni.x + posTeamBg.x * fScaleX ;
			posTeamScr.y = posScr.y - posAni.y + posTeamBg.y * fScaleY ;
			
			int nFrame = 0;
			if((::TimeGet() - g_objGameMap.GetFriendBeginShow())%100 < 20)
				nFrame = 1;
			
			if(posTeamScr.x > posScr.x && posTeamScr.y > posScr.y 
				&& posTeamScr.x < posScr.x + _MAP_FRAME_SIZEX  
				&& posTeamScr.y < posScr.y + _MAP_FRAME_SIZEY )
				pTeamAni->Show(nFrame, posTeamScr.x, posTeamScr.y);
		}		
	}
	// friend ...
	int nFriendAmount = g_objHero.GetFriendAmount();
	for(i = 0; i < nFriendAmount; i ++)
	{
		CFriend* pFriend = g_objHero.GetFriendByIndex(i);
		if(!pFriend)
			continue;
		CPlayer* pPlayer = g_objPlayerSet.GetPlayer(pFriend->GetID());
		if(!pPlayer)
			continue;
//				if(pPlayer->GetShowIcon())
//					continue;
		
		CMyPos posFriendCell, posFriendBg, posFriendScr, posFriendWorld;
		pPlayer->GetPos(posFriendCell);
		g_objGameMap.Cell2World(posFriendCell.x, posFriendCell.y, posFriendWorld.x, posFriendWorld.y);
		g_objGameMap.World2Bg(posFriendWorld.x, posFriendWorld.y, posFriendBg.x, posFriendBg.y);
		
		CAni* pFriendAni = g_objGameDataSet.GetDataAni((char*)szAniFile, "Friend", EXIGENCE_IMMEDIATE);
		if(pFriendAni)
		{
			posFriendScr.x = posScr.x  - posAni.x + posFriendBg.x * fScaleX ;
			posFriendScr.y = posScr.y  - posAni.y + posFriendBg.y * fScaleY ;
			if(posFriendScr.x > posScr.x && posFriendScr.y > posScr.y 
				&& posFriendScr.x < posScr.x + _MAP_FRAME_SIZEX 
				&& posFriendScr.y < posScr.y + _MAP_FRAME_SIZEY  
				)
			pFriendAni->Show(0, posFriendScr.x, posFriendScr.y);
		}
	//	pPlayer->SetShowIcon(true);
	}
	// enemy ...
	int nEnemyAmount = g_objHero.GetEnemyAmount();
	for(i = 0; i < nEnemyAmount; i ++)
	{
		CEnemy* pEnemy = g_objHero.GetEnemyByIndex(i);
		if(!pEnemy)
			continue;
		CPlayer* pPlayer = g_objPlayerSet.GetPlayer(pEnemy->GetID());
		if(!pPlayer)
			continue;
		//if(pPlayer->GetShowIcon())
		//	continue;
		
		CMyPos posEnemyCell, posEnemyBg, posEnemyScr, posEnemyWorld;
		pPlayer->GetPos(posEnemyCell);
		
		g_objGameMap.Cell2World(posEnemyCell.x, posEnemyCell.y, posEnemyWorld.x, posEnemyWorld.y);
		g_objGameMap.World2Bg(posEnemyWorld.x, posEnemyWorld.y, posEnemyBg.x, posEnemyBg.y);
		
		CAni* pEnemyAni = g_objGameDataSet.GetDataAni("ani/Minimap.ani", "Enemy", EXIGENCE_IMMEDIATE);
		if(pEnemyAni)
		{					
			posEnemyScr.x = posScr.x  - posAni.x + posEnemyBg.x * fScaleX ;
			posEnemyScr.y = posScr.y  - posAni.y + posEnemyBg.y * fScaleY ;
			if(posEnemyScr.x > posScr.x && posEnemyScr.y > posScr.y 
				&& posEnemyScr.x < posScr.x + _MAP_FRAME_SIZEX  
				&& posEnemyScr.y < posScr.y + _MAP_FRAME_SIZEY  
				)
				pEnemyAni->Show(0, posEnemyScr.x, posEnemyScr.y);
		}
		//pPlayer->SetShowIcon(true);
	}	

	if(pHeroAni)
	{
		CMyPos posHeroCell, posHeroBg, posHeroScr, posHeroWorld;
		g_objHero.GetPos(posHeroCell);
		g_objGameMap.Cell2World(posHeroCell.x, posHeroCell.y, posHeroWorld.x, posHeroWorld.y);
		g_objGameMap.World2Bg(posHeroWorld.x, posHeroWorld.y, posHeroBg.x, posHeroBg.y);
		
		posHeroScr.x = posScr.x - posAni.x + posHeroBg.x * fScaleX ;
		posHeroScr.y = posScr.y - posAni.y + posHeroBg.y * fScaleY ;
		if(posHeroScr.x > posScr.x + _MAP_FRAME_SIZEX - _POS_FRAME_SIZE)
			posHeroScr.x = posScr.x + _MAP_FRAME_SIZEY - _POS_FRAME_SIZE;
		else if (posHeroScr.x < posScr.x)
			posHeroScr.x = posScr.x;
		if (posHeroScr.y < posScr.y )
			posHeroScr.y = posScr.y ;
		else if (posHeroScr.y > posScr.y + _MAP_FRAME_SIZEX - _POS_FRAME_SIZE)
			posHeroScr.y = posScr.y + _MAP_FRAME_SIZEY - _POS_FRAME_SIZE;
		pHeroAni->Show(0, posHeroScr.x, posHeroScr.y);
	}
}

//--------------------------------------------------------------------------------------

void CRadar::ShowBigMap(CMyPos posScr, OBJID idMap, CMySize sizeDlgBg)

⌨️ 快捷键说明

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