From af7ff6cc243a23fe21b323662f2785618428adf8 Mon Sep 17 00:00:00 2001 From: D-AIRY <admin@ds-servers.com> Date: Wed, 30 Dec 2020 19:53:27 +0300 Subject: [PATCH] Small bugfix --- source/game/BaseAnimating.cpp | 4 ++-- source/game/BaseAnimating.h | 3 +-- source/game/BaseEntity.cpp | 2 +- source/game/BaseTrigger.cpp | 4 ++-- source/physics/PhyWorld.cpp | 11 +++++++++++ source/physics/PhyWorld.h | 4 ++++ source/physics/sxphysics.h | 2 ++ source/physics/sxphysics_dll.cpp | 6 ++++++ source/xcommon/XEvents.h | 4 ++-- 9 files changed, 31 insertions(+), 9 deletions(-) diff --git a/source/game/BaseAnimating.cpp b/source/game/BaseAnimating.cpp index ee58f156a..c7b6c468e 100644 --- a/source/game/BaseAnimating.cpp +++ b/source/game/BaseAnimating.cpp @@ -441,7 +441,7 @@ void CBaseAnimating::setPos(const float3 &pos) BaseClass::setPos(pos); if(m_pRigidBody) { - SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); + SPhysics_UpdateSingleAABB(m_pRigidBody); } SAFE_CALL(m_pModel, setPosition, pos); @@ -452,7 +452,7 @@ void CBaseAnimating::setOrient(const SMQuaternion & q) BaseClass::setOrient(q); if(m_pRigidBody) { - SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); + SPhysics_UpdateSingleAABB(m_pRigidBody); } SAFE_CALL(m_pModel, setOrientation, q); diff --git a/source/game/BaseAnimating.h b/source/game/BaseAnimating.h index e5336bcd4..43426cd87 100644 --- a/source/game/BaseAnimating.h +++ b/source/game/BaseAnimating.h @@ -48,8 +48,7 @@ public: { const btVector3 &v = centerOfMassWorldTrans.getOrigin(); const btQuaternion &q = centerOfMassWorldTrans.getRotation(); - m_pEntity->setPos(BTVEC_F3(v)); - m_pEntity->setOrient(BTQUAT_Q4(q)); + m_pEntity->setXform(BTVEC_F3(v), BTQUAT_Q4(q)); } }; diff --git a/source/game/BaseEntity.cpp b/source/game/BaseEntity.cpp index 18df921c0..713dd63d9 100644 --- a/source/game/BaseEntity.cpp +++ b/source/game/BaseEntity.cpp @@ -163,7 +163,7 @@ void CBaseEntity::setPos(const float3 &pos) if(m_pEditorRigidBody) { m_pEditorRigidBody->getWorldTransform().setOrigin(F3_BTVEC(m_vPosition)); - SPhysics_GetDynWorld()->updateSingleAabb(m_pEditorRigidBody); + SPhysics_UpdateSingleAABB(m_pEditorRigidBody); } { diff --git a/source/game/BaseTrigger.cpp b/source/game/BaseTrigger.cpp index 3d23d5f18..6577b79b8 100644 --- a/source/game/BaseTrigger.cpp +++ b/source/game/BaseTrigger.cpp @@ -244,7 +244,7 @@ void CBaseTrigger::setPos(const float3 & pos) { m_pGhostObject->getWorldTransform().setOrigin(F3_BTVEC(pos)); - SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject); + SPhysics_UpdateSingleAABB(m_pGhostObject); } } @@ -255,7 +255,7 @@ void CBaseTrigger::setOrient(const SMQuaternion & q) { m_pGhostObject->getWorldTransform().setRotation(Q4_BTQUAT(q)); - SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject); + SPhysics_UpdateSingleAABB(m_pGhostObject); } } diff --git a/source/physics/PhyWorld.cpp b/source/physics/PhyWorld.cpp index 9e294766d..ee554457e 100644 --- a/source/physics/PhyWorld.cpp +++ b/source/physics/PhyWorld.cpp @@ -223,7 +223,10 @@ void CPhyWorld::update(int thread) } //printf("%.3fs\n", (float)(time1 - time0) / 1000.0f); + + m_isUpdating = true; m_pDynamicsWorld->stepSimulation((float)(time1 - time0) / 1000.0f, 2, 1.0f / 60.0f); + m_isUpdating = false; time0 = time1; } @@ -249,6 +252,14 @@ void CPhyWorld::removeShape(btRigidBody * pBody) } } +void CPhyWorld::updateSingleAABB(btCollisionObject* colObj) +{ + if(!m_isUpdating) + { + m_pDynamicsWorld->updateSingleAabb(colObj); + } +} + #if 0 void CPhyWorld::loadGeom(const char * file) diff --git a/source/physics/PhyWorld.h b/source/physics/PhyWorld.h index 1112d84dc..9752a082f 100644 --- a/source/physics/PhyWorld.h +++ b/source/physics/PhyWorld.h @@ -56,6 +56,8 @@ public: void addShape(btRigidBody * pBody, int group, int mask); void removeShape(btRigidBody * pBody); + void updateSingleAABB(btCollisionObject* colObj); + #if 0 void loadGeom(const char * file=NULL); void unloadGeom(); @@ -178,6 +180,8 @@ protected: btDiscreteDynamicsWorldMt * m_pDynamicsWorld; btGhostPairCallback * m_pGHostPairCallback; + bool m_isUpdating = false; + const bool * m_bDebugDraw; CDebugDrawer * m_pDebugDrawer; diff --git a/source/physics/sxphysics.h b/source/physics/sxphysics.h index 5ec58faa5..aa00825fc 100644 --- a/source/physics/sxphysics.h +++ b/source/physics/sxphysics.h @@ -107,6 +107,8 @@ SX_LIB_API ID SPhysics_GetMtlID(const btCollisionObject *pBody, const btCollisio SX_LIB_API btDiscreteDynamicsWorldMt * SPhysics_GetDynWorld(); +SX_LIB_API void SPhysics_UpdateSingleAABB(btCollisionObject* colObj); + /*! Запускает симуляцию */ SX_LIB_API void SPhysics_EnableSimulation(); diff --git a/source/physics/sxphysics_dll.cpp b/source/physics/sxphysics_dll.cpp index bbce25bad..64c5508e1 100644 --- a/source/physics/sxphysics_dll.cpp +++ b/source/physics/sxphysics_dll.cpp @@ -151,6 +151,12 @@ SX_LIB_API btDiscreteDynamicsWorldMt * SPhysics_GetDynWorld() return(g_pWorld->getBtWorld()); } +SX_LIB_API void SPhysics_UpdateSingleAABB(btCollisionObject* colObj) +{ + SP_PRECOND(_VOID); + g_pWorld->updateSingleAABB(colObj); +} + #if 0 SX_LIB_API bool SPhysics_ImportGeom(const char * file) { diff --git a/source/xcommon/XEvents.h b/source/xcommon/XEvents.h index 2a3929d35..693df482e 100644 --- a/source/xcommon/XEvents.h +++ b/source/xcommon/XEvents.h @@ -59,11 +59,11 @@ public: } void broadcastEvent(const T *pEvent) { - for(UINT i = 0, l = m_vListeners.size(); i < l; ++i) + for(UINT i = 0; i < m_vListeners.size(); ++i) { m_vListeners[i](pEvent); } - for(UINT i = 0, l = m_vListeners2.size(); i < l; ++i) + for(UINT i = 0; i < m_vListeners2.size(); ++i) { m_vListeners2[i]->onEvent(pEvent); } -- GitLab