diff --git a/source/game/BaseAnimating.cpp b/source/game/BaseAnimating.cpp index 6b5fa83fef292d11a6ef0490ae86d9d1c9be6d5e..f9831e33efef16b77840df20bbdfca63d937224c 100644 --- a/source/game/BaseAnimating.cpp +++ b/source/game/BaseAnimating.cpp @@ -450,10 +450,7 @@ void CBaseAnimating::setPos(const float3 & pos) { m_pRigidBody->getWorldTransform().setOrigin(F3_BTVEC(pos)); - if(m_pMgr->isEditorMode()) - { - SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); - } + SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); } } @@ -464,10 +461,7 @@ void CBaseAnimating::setOrient(const SMQuaternion & q) { m_pRigidBody->getWorldTransform().setRotation(Q4_BTQUAT(q)); - if(m_pMgr->isEditorMode()) - { - SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); - } + SPhysics_GetDynWorld()->updateSingleAabb(m_pRigidBody); } } diff --git a/source/game/BaseAnimating.h b/source/game/BaseAnimating.h index a31b2fdffe56d0970cb587e8ad93b4b086b8a4d1..30195eb793ffa472eafc0075944116dff5da751d 100644 --- a/source/game/BaseAnimating.h +++ b/source/game/BaseAnimating.h @@ -54,8 +54,8 @@ public: void cancelNextAnimation(int iSlot = -1); bool playingAnimations(const char* name); - void setPos(const float3 & pos); - void setOrient(const SMQuaternion & q); + void setPos(const float3 & pos) override; + void setOrient(const SMQuaternion & q) override; void setSkin(int iSkin); diff --git a/source/game/BaseTrigger.cpp b/source/game/BaseTrigger.cpp index d274e13c6675dbf6ce13e7a8d358f253d346029c..c70c45e16a1b3a90029728c9d31e00f7f90e8d45 100644 --- a/source/game/BaseTrigger.cpp +++ b/source/game/BaseTrigger.cpp @@ -229,3 +229,26 @@ void CBaseTrigger::update(float dt) } m_aTouches.swap(m_aNewTouches); } + + +void CBaseTrigger::setPos(const float3 & pos) +{ + BaseClass::setPos(pos); + if(m_pGhostObject) + { + m_pGhostObject->getWorldTransform().setOrigin(F3_BTVEC(pos)); + + SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject); + } +} + +void CBaseTrigger::setOrient(const SMQuaternion & q) +{ + BaseClass::setOrient(q); + if(m_pGhostObject) + { + m_pGhostObject->getWorldTransform().setRotation(Q4_BTQUAT(q)); + + SPhysics_GetDynWorld()->updateSingleAabb(m_pGhostObject); + } +} diff --git a/source/game/BaseTrigger.h b/source/game/BaseTrigger.h index 722df46cf3b55c4739fd4b4a05df275d7ec618ae..fd281672dac92a84c602108c8c6fbdd7962d6afc 100644 --- a/source/game/BaseTrigger.h +++ b/source/game/BaseTrigger.h @@ -35,6 +35,9 @@ public: void disable(); void toggle(); + void setPos(const float3 & pos) override; + void setOrient(const SMQuaternion & q) override; + protected: bool m_bEnabled; ID m_idUpdateInterval; diff --git a/source/physics/PhyWorld.cpp b/source/physics/PhyWorld.cpp index 70248b79933100c497c27218c4e0a87b434f3a4f..c5e173441a20fea6ee853e4713a5853869da892d 100644 --- a/source/physics/PhyWorld.cpp +++ b/source/physics/PhyWorld.cpp @@ -34,9 +34,9 @@ public: void forLoop(int iStart, int iEnd) const { - Core_PStartSection(PERF_SECTION_PHYS_UPDATE); + // Core_PStartSection(PERF_SECTION_PHYS_UPDATE); m_pBody->forLoop(iStart, iEnd); - Core_PEndSection(PERF_SECTION_PHYS_UPDATE); + // Core_PEndSection(PERF_SECTION_PHYS_UPDATE); }; protected: @@ -46,7 +46,13 @@ public: virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE { BT_PROFILE("parallelFor_SkyXEngine"); - if(Core_MGetThreadID() == 0) + + if(iBegin >= iEnd) + { + return; + } + + if(Core_MGetThreadID() == 0 && (iEnd - iBegin) > grainSize) { CBody cbody(&body); Core_MWaitFor(Core_MForLoop(iBegin, iEnd, &cbody, grainSize)); @@ -96,6 +102,8 @@ CPhyWorld::CPhyWorld(): m_pDynamicsWorld = new btDiscreteDynamicsWorldMt(m_pDispatcher, m_pBroadphase, pSolverPool, m_pSolver, m_pCollisionConfiguration); + m_pDynamicsWorld->setForceUpdateAllAabbs(false); + m_pDynamicsWorld->getSolverInfo().m_numIterations = 30; //btCreateDefaultTaskScheduler(); @@ -115,8 +123,8 @@ CPhyWorld::CPhyWorld(): Core_0RegisterCVarBool("r_physdebug", false, "Debug drawing physics shapes"); m_bDebugDraw = GET_PCVAR_BOOL("r_physdebug"); - //btSetCustomEnterProfileZoneFunc(CProfileManager::Start_Profile); - //btSetCustomLeaveProfileZoneFunc(CProfileManager::Stop_Profile); + btSetCustomEnterProfileZoneFunc(CProfileManager::Start_Profile); + btSetCustomLeaveProfileZoneFunc(CProfileManager::Stop_Profile); #if 0 Core_GetIXCore()->getEventChannel<XEventLevel>(EVENT_LEVEL_GUID)->addListener([](const XEventLevel *pData)