From 453559cc8353d3bdc8221ba00f980eac468491d3 Mon Sep 17 00:00:00 2001 From: Uladzislau Nikalayevich Date: Sat, 11 May 2024 19:22:26 +0300 Subject: [PATCH] Allow setElementCollisionsEnabled for buildings --- .../mods/deathmatch/logic/CClientBuilding.cpp | 17 ++++++++++++++++- Client/mods/deathmatch/logic/CClientBuilding.h | 3 +++ .../logic/CStaticFunctionDefinitions.cpp | 5 +++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Client/mods/deathmatch/logic/CClientBuilding.cpp b/Client/mods/deathmatch/logic/CClientBuilding.cpp index 6b50476138..e5a99c6fd0 100644 --- a/Client/mods/deathmatch/logic/CClientBuilding.cpp +++ b/Client/mods/deathmatch/logic/CClientBuilding.cpp @@ -18,7 +18,8 @@ CClientBuilding::CClientBuilding(class CClientManager* pManager, ElementID ID, u m_vPos(pos), m_vRot(rot), m_interior(interior), - m_pBuilding(nullptr) + m_pBuilding(nullptr), + m_bUsesCollision(true) { m_pManager = pManager; SetTypeName("building"); @@ -88,6 +89,15 @@ void CClientBuilding::SetModel(uint16_t model) } } +void CClientBuilding::SetUsesCollision(bool state) +{ + m_bUsesCollision = state; + if (m_pBuilding) + { + m_pBuilding->SetUsesCollision(state); + } +} + void CClientBuilding::Create() { if (m_pBuilding) @@ -97,6 +107,11 @@ void CClientBuilding::Create() ConvertZXYEulersToQuaternion(m_vRot, vRot4D); m_pBuilding = g_pGame->GetPools()->GetBuildingsPool().AddBuilding(this, m_usModelId, &m_vPos, &vRot4D, m_interior); + + if (m_bUsesCollision == false) + { + m_pBuilding->SetUsesCollision(m_bUsesCollision); + } } void CClientBuilding::Destroy() diff --git a/Client/mods/deathmatch/logic/CClientBuilding.h b/Client/mods/deathmatch/logic/CClientBuilding.h index dec521272a..8cbc6a09d1 100644 --- a/Client/mods/deathmatch/logic/CClientBuilding.h +++ b/Client/mods/deathmatch/logic/CClientBuilding.h @@ -42,6 +42,8 @@ class CClientBuilding : public CClientEntity eClientEntityType GetType() const noexcept { return CCLIENTBUILDING; } + void SetUsesCollision(bool state); + void Create(); void Destroy(); bool IsValid() const noexcept { return m_pBuilding != nullptr; }; @@ -62,4 +64,5 @@ class CClientBuilding : public CClientEntity CVector m_vPos; CVector m_vRot; uint8_t m_interior; + bool m_bUsesCollision; }; diff --git a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp index be0e47a076..2005a018a5 100644 --- a/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp +++ b/Client/mods/deathmatch/logic/CStaticFunctionDefinitions.cpp @@ -3756,6 +3756,11 @@ bool CStaticFunctionDefinitions::SetElementCollisionsEnabled(CClientEntity& Enti Ped.SetUsesCollision(bEnabled); break; } + case CCLIENTBUILDING: + { + static_cast(Entity).SetUsesCollision(bEnabled); + break; + } default: return false; }