Skip to content

Commit 5081111

Browse files
authored
Allow setElementCollisionsEnabled for buildings (PR #3384)
1 parent 437dbcd commit 5081111

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

Client/mods/deathmatch/logic/CClientBuilding.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
#include "StdInc.h"
1212

13-
CClientBuilding::CClientBuilding(class CClientManager* pManager, ElementID ID, uint16_t usModelId, const CVector &pos, const CVector &rot, uint8_t interior)
13+
CClientBuilding::CClientBuilding(class CClientManager* pManager, ElementID ID, uint16_t usModelId, const CVector& pos, const CVector& rot, uint8_t interior)
1414
: ClassInit(this),
1515
CClientEntity(ID),
1616
m_pBuildingManager(pManager->GetBuildingManager()),
@@ -19,6 +19,7 @@ CClientBuilding::CClientBuilding(class CClientManager* pManager, ElementID ID, u
1919
m_vRot(rot),
2020
m_interior(interior),
2121
m_pBuilding(nullptr),
22+
m_usesCollision(true),
2223
m_pHighBuilding(nullptr),
2324
m_pLowBuilding(nullptr)
2425
{
@@ -91,7 +92,7 @@ void CClientBuilding::SetInterior(uint8_t ucInterior)
9192
return;
9293
m_interior = ucInterior;
9394
Recreate();
94-
}
95+
}
9596

9697
void CClientBuilding::SetModel(uint16_t model)
9798
{
@@ -102,6 +103,18 @@ void CClientBuilding::SetModel(uint16_t model)
102103
}
103104
}
104105

106+
void CClientBuilding::SetUsesCollision(bool state)
107+
{
108+
if (m_usesCollision == state)
109+
return;
110+
111+
m_usesCollision = state;
112+
if (m_pBuilding)
113+
{
114+
m_pBuilding->SetUsesCollision(state);
115+
}
116+
}
117+
105118
void CClientBuilding::Create()
106119
{
107120
if (m_pBuilding)
@@ -115,6 +128,10 @@ void CClientBuilding::Create()
115128

116129
m_pBuilding = g_pGame->GetPools()->GetBuildingsPool().AddBuilding(this, m_usModelId, &m_vPos, &vRot4D, m_interior);
117130

131+
if (!m_usesCollision)
132+
{
133+
m_pBuilding->SetUsesCollision(m_usesCollision);
134+
}
118135
if (m_pHighBuilding)
119136
{
120137
m_pHighBuilding->GetBuildingEntity()->SetLod(m_pBuilding);

Client/mods/deathmatch/logic/CClientBuilding.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ class CClientBuilding : public CClientEntity
4343

4444
eClientEntityType GetType() const { return CCLIENTBUILDING; }
4545

46+
void SetUsesCollision(bool state);
47+
48+
void Create();
49+
void Destroy();
50+
4651
bool IsValid() const noexcept { return m_pBuilding != nullptr; };
4752

4853

@@ -52,9 +57,6 @@ class CClientBuilding : public CClientEntity
5257

5358

5459
private:
55-
void Create();
56-
void Destroy();
57-
5860
CClientBuilding* GetHighLodBuilding() const { return m_pHighBuilding; };
5961
void SetHighLodBuilding(CClientBuilding* pHighBuilding = nullptr) { m_pHighBuilding = pHighBuilding; };
6062

@@ -72,6 +74,7 @@ class CClientBuilding : public CClientEntity
7274
CVector m_vPos;
7375
CVector m_vRot;
7476
uint8_t m_interior;
77+
bool m_usesCollision;
7578

7679
CClientBuilding* m_pHighBuilding;
7780
CClientBuilding* m_pLowBuilding;

Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3756,6 +3756,11 @@ bool CStaticFunctionDefinitions::SetElementCollisionsEnabled(CClientEntity& Enti
37563756
Ped.SetUsesCollision(bEnabled);
37573757
break;
37583758
}
3759+
case CCLIENTBUILDING:
3760+
{
3761+
static_cast<CClientBuilding&>(Entity).SetUsesCollision(bEnabled);
3762+
break;
3763+
}
37593764
default:
37603765
return false;
37613766
}

0 commit comments

Comments
 (0)