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

📄 pathmanager.cpp

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

#include "stdafx.h"
#include "PathManager.h"
#include "..\[CC]Header\GameResourceManager.h"
#include "STRPath.h"
#include "MHMap.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CPathManager);

CPathManager::CPathManager()
{
	m_pSTRPath = new CSTRPath;
	m_pMap = NULL;
}

CPathManager::~CPathManager()
{
	delete m_pSTRPath;
}
void CPathManager::SetMap(CMHMap * pMap, MAPTYPE mapNum, int width) 
{ 
	m_pMap = pMap; 
	m_MapType = mapNum; 
	m_pSTRPath->SetWidth(width); 
}

int CPathManager::GetPath(VECTOR3 * pSrcPos, VECTOR3 * pDestPos, VECTOR3 * pWayPointPos, WORD wBufCount, BYTE& wWayPointNum, CObject* pObject, BOOL bReverse, WORD wDepth)
{
	VECTOR3 TargetPos;

	// Ÿ°Ù ÁöÁ¡ÀÌ À̵¿ÇÒ ¼ö ÀÖ´Â °÷Àΰ¡?
	if(m_pMap->CollisionTilePos(pDestPos->x, pDestPos->z, pObject))
	{
		// À̵¿ÇÒ ¼ö ÀÖ´Â ÃÖ´Ü À§Ä¡ °è»ê
		if(m_pMap->CollisionLine(pSrcPos, pDestPos, &TargetPos, pObject))
		{
			pWayPointPos[0] = TargetPos; wWayPointNum = 1;
			if(m_pMap->CollisionTilePos(TargetPos.x, TargetPos.z, pObject))
			{
				return PATH_FAILED;
			}
			return PATH_SUCCESS;
		}
		else
		{	
			return PATH_FAILED;
		}
	}


	// Ÿ°Ù À̵¿ ÇÒ ¼ö ÀÖ´Ù¸é Ÿ°Ù±îÁö Á÷¼± °Å¸® Àΰ¡?
	if(!m_pMap->CollisionLine(pSrcPos, pDestPos, &TargetPos, pObject))
	{
		pWayPointPos[0] = TargetPos; wWayPointNum = 1;
		return PATH_SUCCESS;
	}
	

	// Á÷¼±ÀÌ ¾Æ´Ï¸é ±æÃ£±â
	m_pSTRPath->IsValidNode = CPathManager::ValidFunc;
	if(!m_pSTRPath->FindPath(pObject,pSrcPos, pDestPos, pWayPointPos, wBufCount, wWayPointNum, wDepth))
	{
		if(bReverse)
		{
			return PATH_BLOCKFAILED;
		}
		else
		{		
			// À̵¿ÇÒ ¼ö ÀÖ´Â ÃÖ´Ü À§Ä¡ °è»ê
			if(m_pMap->CollisionLine(pSrcPos, pDestPos, &TargetPos, pObject))
			{
				pWayPointPos[0] = TargetPos; wWayPointNum = 1;
				return PATH_SUCCESS;
			}
			else
			{
				return PATH_FAILED;
			}
		}
	}
	
	return PATH_SUCCESS;

}

BOOL CPathManager::ValidFunc(int cellX, int cellY,CObject* pObject)
{
	if(!PATHMGR->m_pMap->IsInTile(cellX, cellY, pObject))
		return FALSE;

	if(!PATHMGR->m_pMap->CollisionTileCell(cellX, cellY, pObject))
		return FALSE;

	return TRUE;
}

⌨️ 快捷键说明

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