Skip to content

Commit 2ffa2c2

Browse files
committed
Added ICollisionHash.
1 parent cacbbd8 commit 2ffa2c2

4 files changed

Lines changed: 74 additions & 38 deletions

File tree

addons/source-python/packages/source-python/entities/collisions.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,21 @@
1515
# =============================================================================
1616
# Source.Python Imports
1717
# Entities
18+
from _entities._collisions import BaseCollisionHash
1819
from _entities._collisions import CollisionHash
1920

2021

2122
# =============================================================================
2223
# >> ALL DECLARATION
2324
# =============================================================================
2425
__all__ = [
26+
'BaseCollisionHash',
2527
'CollisionHash',
2628
]
2729

2830

2931
# =============================================================================
3032
# >> INITIALIZATION
3133
# =============================================================================
32-
# Inject AutoUnload into CollisionHash's hierarchy.
33-
CollisionHash.__bases__ = (AutoUnload,) + CollisionHash.__bases__
34+
# Inject AutoUnload into BaseCollisionHash's hierarchy.
35+
BaseCollisionHash.__bases__ = (AutoUnload,) + BaseCollisionHash.__bases__

src/core/modules/entities/entities_collisions.cpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ void CCollisionManager::Finalize()
100100
m_bInitialized = false;
101101
}
102102

103-
void CCollisionManager::RegisterHash(CCollisionHash *pHash)
103+
void CCollisionManager::RegisterHash(ICollisionHash *pHash)
104104
{
105105
if (m_vecHashes.HasElement(pHash)) {
106106
BOOST_RAISE_EXCEPTION(
@@ -113,7 +113,7 @@ void CCollisionManager::RegisterHash(CCollisionHash *pHash)
113113
m_vecHashes.AddToTail(pHash);
114114
}
115115

116-
void CCollisionManager::UnregisterHash(CCollisionHash *pHash)
116+
void CCollisionManager::UnregisterHash(ICollisionHash *pHash)
117117
{
118118
if (!m_vecHashes.FindAndRemove(pHash)) {
119119
return;
@@ -388,6 +388,27 @@ bool CCollisionManager::ShouldHitEntity(IHandleEntity *pHandleEntity, int conten
388388
}
389389

390390

391+
//-----------------------------------------------------------------------------
392+
// ICollisionHash class.
393+
//-----------------------------------------------------------------------------
394+
ICollisionHash::ICollisionHash()
395+
{
396+
static CCollisionManager *pManager = GetCollisionManager();
397+
pManager->RegisterHash(this);
398+
}
399+
400+
ICollisionHash::~ICollisionHash()
401+
{
402+
UnloadInstance();
403+
}
404+
405+
void ICollisionHash::UnloadInstance()
406+
{
407+
static CCollisionManager *pManager = GetCollisionManager();
408+
pManager->UnregisterHash(this);
409+
}
410+
411+
391412
//-----------------------------------------------------------------------------
392413
// CCollisionHash class.
393414
//-----------------------------------------------------------------------------
@@ -401,9 +422,6 @@ CCollisionHash::CCollisionHash()
401422
"Failed to create a collision hash."
402423
)
403424
}
404-
405-
static CCollisionManager *pManager = GetCollisionManager();
406-
pManager->RegisterHash(this);
407425
}
408426

409427
CCollisionHash::~CCollisionHash()
@@ -412,8 +430,6 @@ CCollisionHash::~CCollisionHash()
412430
return;
413431
}
414432

415-
static CCollisionManager *pManager = GetCollisionManager();
416-
pManager->UnregisterHash(this);
417433
physics->DestroyObjectPairHash(m_pHash);
418434
}
419435

@@ -471,12 +487,6 @@ list CCollisionHash::GetPairs(void *pObject)
471487
return oObjects;
472488
}
473489

474-
void CCollisionHash::UnloadInstance()
475-
{
476-
static CCollisionManager *pManager = GetCollisionManager();
477-
pManager->UnregisterHash(this);
478-
}
479-
480490

481491
//-----------------------------------------------------------------------------
482492
// CEntityCollisionListenerManager class.

src/core/modules/entities/entities_collisions.h

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,33 @@ struct CollisionHookData_t
9393
};
9494

9595

96+
//-----------------------------------------------------------------------------
97+
// ICollisionHash class.
98+
//-----------------------------------------------------------------------------
99+
class ICollisionHash
100+
{
101+
public:
102+
ICollisionHash();
103+
virtual ~ICollisionHash();
104+
105+
virtual void AddPair(void *pObject, void *pOther) = 0;
106+
virtual void RemovePair(void *pObject, void *pOther) = 0;
107+
virtual void RemovePairs(void *pObject) = 0;
108+
109+
virtual bool IsInHash(void *pObject) = 0;
110+
virtual bool HasPair(void *pObject, void *pOther) = 0;
111+
112+
virtual int GetCount(void *pObject) = 0;
113+
virtual list GetPairs(void *pObject) = 0;
114+
115+
void UnloadInstance();
116+
};
117+
118+
96119
//-----------------------------------------------------------------------------
97120
// CCollisionHash class.
98121
//-----------------------------------------------------------------------------
99-
class CCollisionHash
122+
class CCollisionHash : public ICollisionHash
100123
{
101124
public:
102125
CCollisionHash();
@@ -112,8 +135,6 @@ class CCollisionHash
112135
int GetCount(void *pObject);
113136
list GetPairs(void *pObject);
114137

115-
void UnloadInstance();
116-
117138
private:
118139
IPhysicsObjectPairHash *m_pHash;
119140
};
@@ -133,8 +154,8 @@ class CCollisionManager
133154
void Initialize();
134155
void Finalize();
135156

136-
void RegisterHash(CCollisionHash *pHash);
137-
void UnregisterHash(CCollisionHash *pHash);
157+
void RegisterHash(ICollisionHash *pHash);
158+
void UnregisterHash(ICollisionHash *pHash);
138159

139160
protected:
140161
void IncRef();
@@ -158,7 +179,7 @@ class CCollisionManager
158179
private:
159180
bool m_bInitialized;
160181
unsigned int m_uiRefCount;
161-
CUtlVector<CCollisionHash *> m_vecHashes;
182+
CUtlVector<ICollisionHash *> m_vecHashes;
162183
CollisionHooksMap_t m_mapHooks;
163184
std::vector<CollisionScope_t> m_vecScopes;
164185
};

src/core/modules/entities/entities_collisions_wrap.cpp

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,56 +52,59 @@ DECLARE_SP_SUBMODULE(_entities, _collisions)
5252
//-----------------------------------------------------------------------------
5353
void export_entity_collision_hash(scope _collisions)
5454
{
55-
class_<CCollisionHash> CollisionHash("CollisionHash");
55+
class_<ICollisionHash, boost::noncopyable> BaseCollisionHash("BaseCollisionHash", no_init);
5656

5757
// Methods...
58-
CollisionHash.def(
58+
BaseCollisionHash.def(
5959
"add_pair",
60-
&CCollisionHash::AddPair,
60+
&ICollisionHash::AddPair,
6161
"Adds the given pair to the hash."
6262
);
6363

64-
CollisionHash.def(
64+
BaseCollisionHash.def(
6565
"remove_pair",
66-
&CCollisionHash::RemovePair,
66+
&ICollisionHash::RemovePair,
6767
"Removes the given pair from the hash."
6868
);
6969

70-
CollisionHash.def(
70+
BaseCollisionHash.def(
7171
"remove_pairs",
72-
&CCollisionHash::RemovePairs,
72+
&ICollisionHash::RemovePairs,
7373
"Removes all pair associated with the given object."
7474
);
7575

76-
CollisionHash.def(
76+
BaseCollisionHash.def(
7777
"has_pair",
78-
&CCollisionHash::HasPair,
78+
&ICollisionHash::HasPair,
7979
"Returns whether the given pairs is in the hash."
8080
);
8181

82-
CollisionHash.def(
82+
BaseCollisionHash.def(
8383
"get_count",
84-
&CCollisionHash::GetCount,
84+
&ICollisionHash::GetCount,
8585
"Returns the amount of pairs associated with the given object."
8686
);
8787

88-
CollisionHash.def(
88+
BaseCollisionHash.def(
8989
"get_pairs",
90-
&CCollisionHash::GetPairs,
90+
&ICollisionHash::GetPairs,
9191
"Returns a list of all objects associated with the given object."
9292
);
9393

9494
// Special methods...
95-
CollisionHash.def(
95+
BaseCollisionHash.def(
9696
"__contains__",
97-
&CCollisionHash::IsInHash,
97+
&ICollisionHash::IsInHash,
9898
"Returns whether the given object is in the hash."
9999
);
100100

101101
// AutoUnload...
102-
CollisionHash.def(
102+
BaseCollisionHash.def(
103103
"_unload_instance",
104-
&CCollisionHash::UnloadInstance,
104+
&ICollisionHash::UnloadInstance,
105105
"Called when an instance is being unloaded."
106106
);
107+
108+
// CCollisionHash...
109+
class_<CCollisionHash, bases<ICollisionHash> >("CollisionHash");
107110
}

0 commit comments

Comments
 (0)