BOOL CModelObject::TestIntersectionOBB_Line(const Segment3& segment, const CObj* pObj, BOOL bNeedCollObject)
{
CObject3D* pObject3D = m_Element[0].m_pObject3D;
if (pObject3D->m_CollObject.m_Type == GMT_ERROR && bNeedCollObject)
return FALSE;
#if __VER >= 11 // __FIX_COLLISION
char* pString = ((CModelObject*)pObj->m_pModel)->GetObject3D()->m_szFileName;
if (strcmp("obj_g_clovers02.o3d", pString) == 0)
return FALSE;
if (strcmp("obj_guildcombatground.o3d", pString) == 0
|| strcmp("obj_kalgasbridge01.o3d", pString) == 0
|| strcmp("obj_kalgasbridge02.o3d", pString) == 0
|| strcmp("obj_kalgasrock01.o3d", pString) == 0
|| strcmp("obj_kalgasrock02.o3d", pString) == 0
|| strcmp("obj_kalgasrockwall01.o3d", pString) == 0
|| strcmp("obj_kalgasrockwall02.o3d", pString) == 0
|| strcmp("obj_kalgasbossstone.o3d", pString) == 0
|| strcmp("obj_kalgasbossstone_01.o3d", pString) == 0
|| strcmp("obj_kalgasceiling01.o3d", pString) == 0
|| strcmp("obj_kalgasceiling02.o3d", pString) == 0
|| strcmp("obj_kalgasent01.o3d", pString) == 0
|| strcmp("obj_kalgasekinsrock01.o3d", pString) == 0
|| strcmp("obj_kalgasekinsrock02.o3d", pString) == 0
|| strcmp("obj_kalgasekinsrock03.o3d", pString) == 0
|| strcmp("obj_kalgasekinsrock04.o3d", pString) == 0
|| strcmp("obj_kalgasekinrock01.o3d", pString) == 0
|| strcmp("obj_kalgasekinrock02.o3d", pString) == 0
|| strcmp("obj_kalgasekinent01.o3d", pString) == 0
|| strcmp("obj_kalgasekin01.o3d", pString) == 0
|| strcmp("obj_newflchair01.o3d", pString) == 0
|| strcmp("obj_newfllight01.o3d", pString) == 0
|| strcmp("obj_kalgasbossufloor.o3d", pString) == 0
|| strcmp("obj_kalgasbossfloor.o3d", pString) == 0
|| strcmp("obj_behebossfloor01.o3d", pString) == 0
|| strcmp("obj_behebossfloor02.o3d", pString) == 0
|| strcmp("obj_behecirclefloor01.o3d", pString) == 0
)
{
return TRUE;
}
#endif
#ifdef __CPU_UTILDOWN_060502
return IntrSegment3Box3_Test(segment, pObj->m_OBB);
#else
const D3DXMATRIX& mWorld = pObj->GetMatrixWorld();
D3DXVECTOR3 vTemp;
D3DXVECTOR3 vStart, vEnd;
vStart = segment.Origin - segment.Extent * segment.Direction;
vEnd = segment.Origin + segment.Extent * segment.Direction;
return ::IsTouchOBB_Line(m_vMin, m_vMax, mWorld, vStart, vEnd, &vTemp);
#endif
}