blob: b7593175ef80847f07224e0fad853fd12c596387 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Portals use polyhedrons to clip and carve their custom collision areas.
// This file should provide caches of polyhedrons with the initial conversion
// processes already completed.
//
// $NoKeywords: $
//=====================================================================================//
#include "igamesystem.h"
#include "mathlib/polyhedron.h"
#include "tier1/utlvector.h"
#include "tier1/utlstring.h"
#include "tier1/utlmap.h"
class CStaticCollisionPolyhedronCache : public CAutoGameSystem
{
public:
CStaticCollisionPolyhedronCache( void );
~CStaticCollisionPolyhedronCache( void );
void LevelInitPreEntity( void );
void Shutdown( void );
const CPolyhedron *GetBrushPolyhedron( int iBrushNumber );
int GetStaticPropPolyhedrons( ICollideable *pStaticProp, CPolyhedron **pOutputPolyhedronArray, int iOutputArraySize );
private:
// See comments in LevelInitPreEntity for why these members are commented out
// CUtlString m_CachedMap;
CUtlVector<CPolyhedron *> m_BrushPolyhedrons;
struct StaticPropPolyhedronCacheInfo_t
{
int iStartIndex;
int iNumPolyhedrons;
int iStaticPropIndex; //helps us remap ICollideable pointers when the map is restarted
};
CUtlVector<CPolyhedron *> m_StaticPropPolyhedrons;
CUtlMap<ICollideable *, StaticPropPolyhedronCacheInfo_t> m_CollideableIndicesMap;
void Clear( void );
void Update( void );
};
extern CStaticCollisionPolyhedronCache g_StaticCollisionPolyhedronCache;
|