home *** CD-ROM | disk | FTP | other *** search
/ AI Game Programming Wisdom / AIGameProgrammingWisdom.iso / SourceCode / 09 Racing and Sports AI / 04 Adzima / aiObstacle.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-08-18  |  1.4 KB  |  45 lines

  1. #include "aiObstacle.h"
  2. #include "aiMath.h"
  3.  
  4. aiObstacle::aiObstacle(float Front,float Back,float LSide,float RSide,Matrix34 *pMatrix)
  5. {
  6.     m_fFrontBumperDistance=Front;
  7.     m_fBackBumperDistance=Back;
  8.     m_fLSideDistance=LSide;
  9.     m_fRSideDistance=RSide;
  10.  
  11.     m_pMatrix=pMatrix;    // Position and Orientation
  12. }
  13.  
  14. bool aiObstacle:: IsBlockingTarget(Vector3& Pos,Vector3& Target,float fMaxDist,float fVWidth)
  15. {
  16.     Vector3 TargetDir=Target-Pos;
  17.     TargetDir.y=0.f;
  18.     TargetDir.Normalize();
  19.     Vector3 TargetDirPerp;
  20.     TargetDirPerp.Set(-TargetDir.z,TargetDir.y,TargetDir.x);
  21.     float fTargetDist=aiDist(Pos,Target);
  22.  
  23.     // Check the four corners of the obstacle
  24.     Vector3 Corner[4];
  25.     Corner[0]=m_pMatrix->Pos-m_pMatrix->ZDir*m_fFrontBumperDistance-m_pMatrix->XDir*m_fLSideDistance;
  26.     Corner[1]=m_pMatrix->Pos-m_pMatrix->ZDir*m_fFrontBumperDistance+m_pMatrix->XDir*m_fRSideDistance;
  27.     Corner[2]=m_pMatrix->Pos+m_pMatrix->ZDir*m_fBackBumperDistance-m_pMatrix->XDir*m_fLSideDistance;
  28.     Corner[3]=m_pMatrix->Pos+m_pMatrix->ZDir*m_fBackBumperDistance+m_pMatrix->XDir*m_fRSideDistance;
  29.  
  30.     float fVehicleHalfWidth=fVWidth*.5f+1.f;
  31.     for(int i=0;i<4;i++)
  32.     {
  33.         Vector3 p=Corner[i]-Pos;
  34.         float fSideDist=aiDot(p,TargetDirPerp);
  35.         float fForwardDist=aiDot(p,TargetDir);
  36.         if(fSideDist>-fVehicleHalfWidth && fSideDist<fVehicleHalfWidth &&
  37.             fForwardDist>0.f && fForwardDist<fTargetDist+fMaxDist)
  38.         {
  39.             return true;
  40.         }
  41.     }
  42.     return false;
  43. }
  44.  
  45.