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

📄 aiobstacle.cpp

📁 Racing and Sports AI很好的游戏AI算法源码!
💻 CPP
字号:
#include "aiObstacle.h"
#include "aiMath.h"

aiObstacle::aiObstacle(float Front,float Back,float LSide,float RSide,Matrix34 *pMatrix)
{
	m_fFrontBumperDistance=Front;
	m_fBackBumperDistance=Back;
	m_fLSideDistance=LSide;
	m_fRSideDistance=RSide;

	m_pMatrix=pMatrix;	// Position and Orientation
}

bool aiObstacle:: IsBlockingTarget(Vector3& Pos,Vector3& Target,float fMaxDist,float fVWidth)
{
	Vector3 TargetDir=Target-Pos;
	TargetDir.y=0.f;
	TargetDir.Normalize();
	Vector3 TargetDirPerp;
	TargetDirPerp.Set(-TargetDir.z,TargetDir.y,TargetDir.x);
	float fTargetDist=aiDist(Pos,Target);

	// Check the four corners of the obstacle
	Vector3 Corner[4];
	Corner[0]=m_pMatrix->Pos-m_pMatrix->ZDir*m_fFrontBumperDistance-m_pMatrix->XDir*m_fLSideDistance;
	Corner[1]=m_pMatrix->Pos-m_pMatrix->ZDir*m_fFrontBumperDistance+m_pMatrix->XDir*m_fRSideDistance;
	Corner[2]=m_pMatrix->Pos+m_pMatrix->ZDir*m_fBackBumperDistance-m_pMatrix->XDir*m_fLSideDistance;
	Corner[3]=m_pMatrix->Pos+m_pMatrix->ZDir*m_fBackBumperDistance+m_pMatrix->XDir*m_fRSideDistance;

	float fVehicleHalfWidth=fVWidth*.5f+1.f;
	for(int i=0;i<4;i++)
	{
		Vector3 p=Corner[i]-Pos;
		float fSideDist=aiDot(p,TargetDirPerp);
		float fForwardDist=aiDot(p,TargetDir);
		if(fSideDist>-fVehicleHalfWidth && fSideDist<fVehicleHalfWidth &&
		    fForwardDist>0.f && fForwardDist<fTargetDist+fMaxDist)
		{
			return true;
		}
	}
	return false;
}

⌨️ 快捷键说明

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