diff options
| author | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:31:46 -0800 |
|---|---|---|
| committer | Jørgen P. Tjernø <[email protected]> | 2013-12-02 19:46:31 -0800 |
| commit | f56bb35301836e56582a575a75864392a0177875 (patch) | |
| tree | de61ddd39de3e7df52759711950b4c288592f0dc /sp/src/public/dispcoll.h | |
| parent | Mark some more files as text. (diff) | |
| download | source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.tar.xz source-sdk-2013-f56bb35301836e56582a575a75864392a0177875.zip | |
Fix line endings. WHAMMY.
Diffstat (limited to 'sp/src/public/dispcoll.h')
| -rw-r--r-- | sp/src/public/dispcoll.h | 496 |
1 files changed, 248 insertions, 248 deletions
diff --git a/sp/src/public/dispcoll.h b/sp/src/public/dispcoll.h index 5c42b7b1..55b6d0b3 100644 --- a/sp/src/public/dispcoll.h +++ b/sp/src/public/dispcoll.h @@ -1,249 +1,249 @@ -//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $NoKeywords: $
-//=============================================================================//
-
-#ifndef DISPCOLL_H
-#define DISPCOLL_H
-#pragma once
-
-#include "mathlib/vector.h"
-
-class CCoreDispInfo;
-
-//=============================================================================
-//
-// Displacement Collision Triangle Data
-//
-class CDispCollTri
-{
-public:
-
- void Init( void );
- inline void SetPoint( int index, Vector const& vert );
- inline void SetPointNormal( int index, Vector const& normal );
- void CalcPlane( void );
-
- inline void SetIntersect( bool bIntersect );
- inline bool IsIntersect( void );
-
- Vector m_Points[3]; // polygon points
- Vector m_PointNormals[3]; // polygon point normals
- Vector m_Normal; // plane normal
- float m_Distance; // plane distance
- short m_ProjAxes[2]; // projection axes (2 minor axes)
- bool m_bIntersect; // intersected triangle???
-};
-
-//=============================================================================
-//
-// Displacement Collision Node Data
-//
-class CDispCollNode
-{
-public:
-
- CDispCollNode();
- inline bool IsLeaf( void );
- inline void SetBounds( Vector const &bMin, Vector const &bMax );
- inline void GetBounds( Vector &bMin, Vector &bMax );
-
- Vector m_Bounds[2]; // node minimum and maximum
-
- bool m_bIsLeaf; // is the node a leaf? ( may have to make this an int for alignment!)
- CDispCollTri m_Tris[2]; // two triangles contained in leaf node
-};
-
-
-//=============================================================================
-//
-// Displacement Collision Data
-//
-class CDispCollData
-{
-public:
-
- Vector m_StartPos;
- Vector m_EndPos;
- Vector m_Extents;
- float m_Fraction;
- int m_Contents;
- Vector m_Normal;
- float m_Distance;
- bool m_bOcclude;
-};
-
-
-
-// HACKHACK: JAY: Moved this out of CDispCollTree to be thread safe in vrad
-enum { TRILIST_CACHE_SIZE = 128 };
-
-class CDispCollTreeTempData
-{
-public:
- //
- // temps
- //
- int m_TriListCount;
- CDispCollTri *m_ppTriList[TRILIST_CACHE_SIZE];
-
- // collision tree node cache
- float m_AABBDistances[6];
-};
-
-
-//=============================================================================
-//
-// Displacement Collision Tree
-//
-class CDispCollTree
-{
-public:
-
- static const float COLLISION_EPSILON;
- static const float ONE_MINUS_COLLISION_EPSILON;
-
- //=========================================================================
- //
- // Creation/Destruction
- //
- CDispCollTree();
- ~CDispCollTree();
-
- virtual bool Create( CCoreDispInfo *pDisp );
-
- //=========================================================================
- //
- // Collision Functions
- //
- bool RayTest( CDispCollData *pData );
- bool RayTestAllTris( CDispCollData *pData, int power );
-
- bool AABBIntersect( CDispCollData *pData );
- bool AABBSweep( CDispCollData *pData );
-
- //=========================================================================
- //
- // Attrib Functions
- //
- inline void SetPower( int power );
- inline int GetPower( void );
-
- inline void SetCheckCount( int count );
- inline int GetCheckCount( void );
-
- inline void GetBounds( Vector& boundMin, Vector& boundMax );
-
-protected:
-
- int m_Power;
-
- int m_NodeCount;
- CDispCollNode *m_pNodes;
-
- int m_CheckCount;
-
- // collision tree node cache
- Vector m_AABBNormals[6];
- //=========================================================================
- //
- // Creation/Destruction
- //
- void InitAABBData( void );
- void InitLeaves( CCoreDispInfo *pDisp );
- void CreateNodes( CCoreDispInfo *pDisp );
- void CreateNodes_r( CCoreDispInfo *pDisp, int nodeIndex, int termLevel );
- void CalcBounds( CDispCollNode *pNode, int nodeIndex );
-
- //=========================================================================
- //
- // Collision Functions
- //
- void CreatePlanesFromBounds( CDispCollTreeTempData *pTemp, Vector const &bbMin, Vector const &bbMax );
-
-// void RayNodeTest_r( int nodeIndex, Vector &rayStart, Vector &rayEnd );
- void RayNodeTest_r( CDispCollTreeTempData *pTemp, int nodeIndex, Vector rayStart, Vector rayEnd );
- bool RayAABBTest( CDispCollTreeTempData *pTemp, Vector &rayStart, Vector &rayEnd );
- bool RayTriListTest( CDispCollTreeTempData *pTemp, CDispCollData *pData );
- bool RayTriTest( Vector const &rayStart, Vector const &rayDir, float const rayLength, CDispCollTri const *pTri, float *fraction );
-
- void BuildTriList_r( CDispCollTreeTempData *pTemp, int nodeIndex, Vector &rayStart, Vector &rayEnd, Vector &extents, bool bIntersect );
- bool IntersectAABBAABBTest( CDispCollTreeTempData *pTemp, const Vector &pos, const Vector &extents );
- bool SweptAABBAABBTest( CDispCollTreeTempData *pTemp, const Vector &rayStart, const Vector &rayEnd, const Vector &extents );
-
- bool CullTriList( CDispCollTreeTempData *pTemp, Vector &rayStart, Vector &rayEnd, Vector &extents, bool bIntersect );
- bool SweptAABBTriTest( Vector &rayStart, Vector &rayEnd, Vector &extents, CDispCollTri const *pTri );
- bool AABBTriIntersect( CDispCollTreeTempData *pTemp, CDispCollData *pData );
- bool IntersectAABBTriTest( Vector &rayStart, Vector &extents, CDispCollTri const *pTri );
- bool SweptAABBTriIntersect( Vector &rayStart, Vector &rayEnd, Vector &extents,
- CDispCollTri const *pTri, Vector &plNormal, float *plDist,
- float *fraction );
-
- //=========================================================================
- //
- // Memory Functions
- //
- bool AllocNodes( int nodeCount );
- void FreeNodes( void );
-
- //=========================================================================
- //
- // Utility Functions
- //
- inline int CalcNodeCount( int power );
- inline int GetParentNode( int nodeIndex );
- inline int GetChildNode( int nodeIndex, int direction );
- inline int GetNodeLevel( int nodeIndex );
- int GetNodeIndexFromComponents( int x, int y );
-};
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-inline void CDispCollTree::SetPower( int power )
-{
- m_Power = power;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-inline int CDispCollTree::GetPower( void )
-{
- return m_Power;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-inline void CDispCollTree::SetCheckCount( int count )
-{
- m_CheckCount = count;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-inline int CDispCollTree::GetCheckCount( void )
-{
- return m_CheckCount;
-}
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-inline void CDispCollTree::GetBounds( Vector& boundMin, Vector& boundMax )
-{
- boundMin[0] = m_pNodes[0].m_Bounds[0].x;
- boundMin[1] = m_pNodes[0].m_Bounds[0].y;
- boundMin[2] = m_pNodes[0].m_Bounds[0].z;
-
- boundMax[0] = m_pNodes[0].m_Bounds[1].x;
- boundMax[1] = m_pNodes[0].m_Bounds[1].y;
- boundMax[2] = m_pNodes[0].m_Bounds[1].z;
-}
-
-
+//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef DISPCOLL_H +#define DISPCOLL_H +#pragma once + +#include "mathlib/vector.h" + +class CCoreDispInfo; + +//============================================================================= +// +// Displacement Collision Triangle Data +// +class CDispCollTri +{ +public: + + void Init( void ); + inline void SetPoint( int index, Vector const& vert ); + inline void SetPointNormal( int index, Vector const& normal ); + void CalcPlane( void ); + + inline void SetIntersect( bool bIntersect ); + inline bool IsIntersect( void ); + + Vector m_Points[3]; // polygon points + Vector m_PointNormals[3]; // polygon point normals + Vector m_Normal; // plane normal + float m_Distance; // plane distance + short m_ProjAxes[2]; // projection axes (2 minor axes) + bool m_bIntersect; // intersected triangle??? +}; + +//============================================================================= +// +// Displacement Collision Node Data +// +class CDispCollNode +{ +public: + + CDispCollNode(); + inline bool IsLeaf( void ); + inline void SetBounds( Vector const &bMin, Vector const &bMax ); + inline void GetBounds( Vector &bMin, Vector &bMax ); + + Vector m_Bounds[2]; // node minimum and maximum + + bool m_bIsLeaf; // is the node a leaf? ( may have to make this an int for alignment!) + CDispCollTri m_Tris[2]; // two triangles contained in leaf node +}; + + +//============================================================================= +// +// Displacement Collision Data +// +class CDispCollData +{ +public: + + Vector m_StartPos; + Vector m_EndPos; + Vector m_Extents; + float m_Fraction; + int m_Contents; + Vector m_Normal; + float m_Distance; + bool m_bOcclude; +}; + + + +// HACKHACK: JAY: Moved this out of CDispCollTree to be thread safe in vrad +enum { TRILIST_CACHE_SIZE = 128 }; + +class CDispCollTreeTempData +{ +public: + // + // temps + // + int m_TriListCount; + CDispCollTri *m_ppTriList[TRILIST_CACHE_SIZE]; + + // collision tree node cache + float m_AABBDistances[6]; +}; + + +//============================================================================= +// +// Displacement Collision Tree +// +class CDispCollTree +{ +public: + + static const float COLLISION_EPSILON; + static const float ONE_MINUS_COLLISION_EPSILON; + + //========================================================================= + // + // Creation/Destruction + // + CDispCollTree(); + ~CDispCollTree(); + + virtual bool Create( CCoreDispInfo *pDisp ); + + //========================================================================= + // + // Collision Functions + // + bool RayTest( CDispCollData *pData ); + bool RayTestAllTris( CDispCollData *pData, int power ); + + bool AABBIntersect( CDispCollData *pData ); + bool AABBSweep( CDispCollData *pData ); + + //========================================================================= + // + // Attrib Functions + // + inline void SetPower( int power ); + inline int GetPower( void ); + + inline void SetCheckCount( int count ); + inline int GetCheckCount( void ); + + inline void GetBounds( Vector& boundMin, Vector& boundMax ); + +protected: + + int m_Power; + + int m_NodeCount; + CDispCollNode *m_pNodes; + + int m_CheckCount; + + // collision tree node cache + Vector m_AABBNormals[6]; + //========================================================================= + // + // Creation/Destruction + // + void InitAABBData( void ); + void InitLeaves( CCoreDispInfo *pDisp ); + void CreateNodes( CCoreDispInfo *pDisp ); + void CreateNodes_r( CCoreDispInfo *pDisp, int nodeIndex, int termLevel ); + void CalcBounds( CDispCollNode *pNode, int nodeIndex ); + + //========================================================================= + // + // Collision Functions + // + void CreatePlanesFromBounds( CDispCollTreeTempData *pTemp, Vector const &bbMin, Vector const &bbMax ); + +// void RayNodeTest_r( int nodeIndex, Vector &rayStart, Vector &rayEnd ); + void RayNodeTest_r( CDispCollTreeTempData *pTemp, int nodeIndex, Vector rayStart, Vector rayEnd ); + bool RayAABBTest( CDispCollTreeTempData *pTemp, Vector &rayStart, Vector &rayEnd ); + bool RayTriListTest( CDispCollTreeTempData *pTemp, CDispCollData *pData ); + bool RayTriTest( Vector const &rayStart, Vector const &rayDir, float const rayLength, CDispCollTri const *pTri, float *fraction ); + + void BuildTriList_r( CDispCollTreeTempData *pTemp, int nodeIndex, Vector &rayStart, Vector &rayEnd, Vector &extents, bool bIntersect ); + bool IntersectAABBAABBTest( CDispCollTreeTempData *pTemp, const Vector &pos, const Vector &extents ); + bool SweptAABBAABBTest( CDispCollTreeTempData *pTemp, const Vector &rayStart, const Vector &rayEnd, const Vector &extents ); + + bool CullTriList( CDispCollTreeTempData *pTemp, Vector &rayStart, Vector &rayEnd, Vector &extents, bool bIntersect ); + bool SweptAABBTriTest( Vector &rayStart, Vector &rayEnd, Vector &extents, CDispCollTri const *pTri ); + bool AABBTriIntersect( CDispCollTreeTempData *pTemp, CDispCollData *pData ); + bool IntersectAABBTriTest( Vector &rayStart, Vector &extents, CDispCollTri const *pTri ); + bool SweptAABBTriIntersect( Vector &rayStart, Vector &rayEnd, Vector &extents, + CDispCollTri const *pTri, Vector &plNormal, float *plDist, + float *fraction ); + + //========================================================================= + // + // Memory Functions + // + bool AllocNodes( int nodeCount ); + void FreeNodes( void ); + + //========================================================================= + // + // Utility Functions + // + inline int CalcNodeCount( int power ); + inline int GetParentNode( int nodeIndex ); + inline int GetChildNode( int nodeIndex, int direction ); + inline int GetNodeLevel( int nodeIndex ); + int GetNodeIndexFromComponents( int x, int y ); +}; + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +inline void CDispCollTree::SetPower( int power ) +{ + m_Power = power; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +inline int CDispCollTree::GetPower( void ) +{ + return m_Power; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +inline void CDispCollTree::SetCheckCount( int count ) +{ + m_CheckCount = count; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +inline int CDispCollTree::GetCheckCount( void ) +{ + return m_CheckCount; +} + + +//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +inline void CDispCollTree::GetBounds( Vector& boundMin, Vector& boundMax ) +{ + boundMin[0] = m_pNodes[0].m_Bounds[0].x; + boundMin[1] = m_pNodes[0].m_Bounds[0].y; + boundMin[2] = m_pNodes[0].m_Bounds[0].z; + + boundMax[0] = m_pNodes[0].m_Bounds[1].x; + boundMax[1] = m_pNodes[0].m_Bounds[1].y; + boundMax[2] = m_pNodes[0].m_Bounds[1].z; +} + + #endif // DISPCOLL_H
\ No newline at end of file |