home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GameStar 2006 March
/
Gamestar_82_2006-03_dvd.iso
/
DVDStar
/
Editace
/
quake4_sdkv10.exe
/
source
/
idlib
/
containers
/
PlaneSet.h
< prev
next >
Wrap
C/C++ Source or Header
|
2005-11-14
|
1KB
|
55 lines
#ifndef __PLANESET_H__
#define __PLANESET_H__
/*
===============================================================================
Plane Set
===============================================================================
*/
class idPlaneSet : public idList<idPlane> {
public:
void Clear( void ) { idList<idPlane>::Clear(); hash.Free(); }
int FindPlane( const idPlane &plane, const float normalEps, const float distEps );
private:
idHashIndex hash;
};
ID_INLINE int idPlaneSet::FindPlane( const idPlane &plane, const float normalEps, const float distEps ) {
int i, border, hashKey;
assert( distEps <= 0.125f );
hashKey = (int)( idMath::Fabs( plane.Dist() ) * 0.125f );
for ( border = -1; border <= 1; border++ ) {
for ( i = hash.First( hashKey + border ); i >= 0; i = hash.Next( i ) ) {
if ( (*this)[i].Compare( plane, normalEps, distEps ) ) {
return i;
}
}
}
if ( plane.Type() >= PLANETYPE_NEGX && plane.Type() < PLANETYPE_TRUEAXIAL ) {
Append( -plane );
hash.Add( hashKey, Num()-1 );
Append( plane );
hash.Add( hashKey, Num()-1 );
return ( Num() - 1 );
}
else {
Append( plane );
hash.Add( hashKey, Num()-1 );
Append( -plane );
hash.Add( hashKey, Num()-1 );
return ( Num() - 2 );
}
}
#endif /* !__PLANESET_H__ */