69 lines
2.8 KiB
C++
69 lines
2.8 KiB
C++
#pragma once
|
|
|
|
#define COLLISION_TYPE_STATIC 0x0000ffff
|
|
#define COLLISION_TYPE_DYNAMIC 0xffff0000
|
|
#define COLLISION_GROUP_STATIC( x ) ( 0x00000001 << x )
|
|
#define COLLISION_GROUP_DYNAMIC( x ) ( 0x00010000 << x )
|
|
|
|
class CEtCollisionEntity
|
|
{
|
|
public:
|
|
CEtCollisionEntity(void);
|
|
virtual ~CEtCollisionEntity(void);
|
|
|
|
protected:
|
|
std::vector< SCollisionPrimitive * > *m_pvecOriginalPrimitive;
|
|
|
|
std::vector< SCollisionPrimitive * > m_vecPrimitive;
|
|
std::vector< int > m_vecPrimitiveParentIndex;
|
|
std::vector< BOOL > m_vecPrimitiveEnable;
|
|
EtVector3 m_vScale;
|
|
int m_nCollisionGroup;
|
|
int m_nTargetCollisionGroup;
|
|
bool m_bDraw;
|
|
bool m_bEnableCollision;
|
|
|
|
std::vector< CEtMeshStream * > m_vecMeshStream;
|
|
int m_nVertexDecl;
|
|
|
|
bool m_bUpdateNeeded;
|
|
|
|
public:
|
|
void Initialize( std::vector< SCollisionPrimitive * > &vecPrimitive, std::vector< int > &vecPrimitiveBoneIndex );
|
|
std::vector< SCollisionPrimitive * > *GetCollisionPrimitive() { return &m_vecPrimitive; }
|
|
|
|
void SetCollisionScale( float fScale ) { m_vScale = EtVector3( fScale, fScale, fScale ); m_bUpdateNeeded = true; }
|
|
void SetCollisionScale( const EtVector3 &vScale ) { m_vScale = vScale; m_bUpdateNeeded = true;}
|
|
void GetCollisionScale( EtVector3 &vScale ) { vScale = m_vScale; }
|
|
|
|
void SetCollisionGroup( int nGroup ) { m_nCollisionGroup = nGroup; }
|
|
int GetCollisionGroup() { return m_nCollisionGroup; }
|
|
void SetTargetCollisionGroup( int nGroup ) { m_nTargetCollisionGroup = nGroup; }
|
|
int GetTargetCollisionGroup() { return m_nTargetCollisionGroup; }
|
|
|
|
void SetUpdateNeeded( bool bValue ) { m_bUpdateNeeded = bValue; }
|
|
|
|
void ShowCollisionPrimitive( bool bShow );
|
|
bool IsShowCollisionPrimitive() { return m_bDraw; }
|
|
|
|
void EnableCollision( bool bEnable ) { m_bEnableCollision = bEnable; }
|
|
bool IsEnableCollision() { return m_bEnableCollision; }
|
|
|
|
void EnableCollision( SCollisionPrimitive *pPrimitive, bool bEnable );
|
|
bool IsEnableCollision( SCollisionPrimitive *pPrimitive );
|
|
|
|
int GetCollisionPrimitiveCount() { return ( int )m_vecPrimitive.size(); }
|
|
void UpdateCollisionPrimitive( int nIndex, EtMatrix &WorldMat, bool bUpdate = true );
|
|
virtual void UpdateCollisionPrimitive( EtMatrix &WorldMat );
|
|
|
|
SCollisionPrimitive *FindCollisionPrimitive( int nBoneIndex );
|
|
|
|
void DrawCollisionPrimitive();
|
|
|
|
bool TestCollision( SCollisionPrimitive &Primitive );
|
|
bool FindCollision( SCollisionPrimitive &TragetPrimitive, EtVector3 &vMove, SCollisionResponse &Response, bool bCalcContactTime );
|
|
bool FindCollision( std::vector< SCollisionPrimitive * > &TragetPrimitive, EtVector3 &vMove, DNVector(SCollisionResponse) &vecResponse, bool bCalcContactTime = true);
|
|
bool TestSegmentCollision( SSegment &Segment );
|
|
bool FindSegmentCollision( SSegment &Segment, SCollisionResponse &Response );
|
|
bool FindCapsuleCollision( SCollisionCapsule &Capsule, SCollisionResponse &Response );
|
|
};
|