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

📄 terrainobjmanager.cpp

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

#include "TerrainObjManager.h"
#include "Hero.h"
#include "3DGameMap.h"
#include "3DRoleData.h"

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

CTerrainObjManager::CTerrainObjManager()
{

}

CTerrainObjManager::~CTerrainObjManager()
{
	this->Destroy();
}
//------------------------------------------------------------------
void	CTerrainObjManager::Process()
{
	// 判断删除
	CMyPos posHero = g_objHero.GetAlignPos();
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = nAmount-1; i >= 0; i--)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->idNpc != MOUSE_PLAYER_ID)
		{
			if(posHero.x > 0 && posHero.y > 0)
			{
				if(g_objGameMap.Outof9Block(posHero, pInfo->posCell))
				{
					CInteractiveLayer* pLayer = g_objGameMap.GetInteractiveLayer();
					if(pLayer)
					{
						pLayer->DelObj(pInfo->pObj);
					}
					
					m_setTerrainObjInfo.erase(m_setTerrainObjInfo.begin()+i);
					SAFE_DELETE(pInfo);
				}
			}
		}
	}
}
//------------------------------------------------------------------
void	CTerrainObjManager::Destroy()
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
		SAFE_DELETE(m_setTerrainObjInfo[i]);
	m_setTerrainObjInfo.clear();
}
//------------------------------------------------------------------
void	CTerrainObjManager::AddNpc(int nType, int nDir, OBJID id, CMyPos posCell)
{
	TerrainNpcTypeInfo* pInfo = g_obj3DRoleData.GetTerrainNpcInfo(nType);
	if(!pInfo)
		return;
	TerrainObjInfo* pTerrainInfo = new TerrainObjInfo;
	if(!pTerrainInfo)
		return;
	pTerrainInfo->idNpc = id;
	pTerrainInfo->nType = nType;
	pTerrainInfo->nDir = nDir;
	pTerrainInfo->posCell = posCell;
	strcpy(pTerrainInfo->szName,"");
	pTerrainInfo->pObj=new C2DMapTerrainObj;
	MYASSERT(pTerrainInfo->pObj);
	pTerrainInfo->pObj->Load((char*)pInfo->setStr[nDir%8].c_str());
	pTerrainInfo->pObj->SetPos(posCell);
	if(id == MOUSE_PLAYER_ID)
		pTerrainInfo->pObj->SetFixed(false);
	CInteractiveLayer* pLayer = g_objGameMap.GetInteractiveLayer();
	if(pLayer)
	{
		pLayer->AddMapObj(pTerrainInfo->pObj);
	}	
	m_setTerrainObjInfo.push_back(pTerrainInfo);
}
//------------------------------------------------------------------
void	CTerrainObjManager::Delete(OBJID id)
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = nAmount-1; i >= 0; i--)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if((pInfo) && (pInfo->idNpc == id))
		{
			CInteractiveLayer* pLayer = g_objGameMap.GetInteractiveLayer();
			if(pLayer)
			{
				pLayer->DelObj(pInfo->pObj);
			}
			m_setTerrainObjInfo.erase(m_setTerrainObjInfo.begin()+i);
			SAFE_DELETE(pInfo);
			break;
		}
	}
}
//------------------------------------------------------------------
OBJID	CTerrainObjManager::GetFocus()
{
	int nAmount = m_setTerrainObjInfo.size();
	TerrainObjInfo* pFocusInfo = NULL;
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->pObj && pInfo->pObj->IsFocus())
		{
			if(!pFocusInfo)
			{
				pFocusInfo = pInfo;
			}
			else if(pInfo->posCell.x + pInfo->posCell.y > pFocusInfo->posCell.x + pFocusInfo->posCell.y)			
			{
				pFocusInfo = pInfo;
			}
		}
	}
	if(pFocusInfo)
		return pFocusInfo->idNpc;
	else
		return ID_NONE;
}
//------------------------------------------------------------------
void	CTerrainObjManager::SetDir(OBJID id, int nDir)
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->idNpc == id)
		{
			TerrainNpcTypeInfo* pTypeInfo = g_obj3DRoleData.GetTerrainNpcInfo(pInfo->nType);
			if(!pTypeInfo)
				return;
			CInteractiveLayer* pLayer = g_objGameMap.GetInteractiveLayer();
			if(pLayer)
			{
				pLayer->DelObj(pInfo->pObj);
			}
			pInfo->nDir = nDir;
			pInfo->pObj=new C2DMapTerrainObj;
			MYASSERT(pInfo->pObj);
			pInfo->pObj->Load((char*)pTypeInfo->setStr[nDir%8].c_str());
			pInfo->pObj->SetPos(pInfo->posCell);
			if(id == MOUSE_PLAYER_ID)
				pInfo->pObj->SetFixed(false);
			if(pLayer)
			{
				pLayer->AddMapObj(pInfo->pObj);
			}	
			return;
		}
	}
}
//------------------------------------------------------------------
void	CTerrainObjManager::SetPos(OBJID id, CMyPos posNpc)
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->idNpc == id)
		{
			pInfo->pObj->SetPos(posNpc);
			pInfo->posCell = posNpc;
/*			TerrainNpcTypeInfo* pTypeInfo = g_obj3DRoleData.GetTerrainNpcInfo(pInfo->nType);
			if(!pTypeInfo)
				return;
			CInteractiveLayer* pLayer = g_objGameMap.GetInteractiveLayer();
			if(pLayer)
			{
				pLayer->DelObj(pInfo->pObj);
			}
			pInfo->pObj=new C2DMapTerrainObj;
			pInfo->posCell = posNpc;
			MYASSERT(pInfo->pObj);
			pInfo->pObj->Load((char*)pTypeInfo->setStr[pInfo->nDir%8].c_str());
			pInfo->pObj->SetPos(posNpc);
			if(id == MOUSE_PLAYER_ID)
				pInfo->pObj->SetFixed(false);
			if(pLayer)
			{
				pLayer->AddMapObj(pInfo->pObj);
			}
			
			return;*/
		}
	}
}
//------------------------------------------------------------------
int		CTerrainObjManager::GetLook(OBJID id)
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->idNpc == id)
		{
			int nLook = pInfo->nType * 10 + pInfo->nDir;
			return nLook;
		}
	}
	return 0;
}
//------------------------------------------------------------------
void	CTerrainObjManager::GetPos(OBJID id, CMyPos& posCell)
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->idNpc == id)
		{
			posCell = pInfo->posCell;
			return;
		}
	}
}
//------------------------------------------------------------------
BOOL	CTerrainObjManager::IsFocus(OBJID id)
{
	int nAmount = m_setTerrainObjInfo.size();
	for(int i = 0; i < nAmount; i ++)
	{
		TerrainObjInfo* pInfo = m_setTerrainObjInfo[i];
		if(pInfo && pInfo->idNpc == id)
		{
			return pInfo->pObj->IsFocus();
		}
	}
	return false;
}
//------------------------------------------------------------------

⌨️ 快捷键说明

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