From dd743885e41c7d0ca7a1b921b84c0561ec09ae77 Mon Sep 17 00:00:00 2001
From: D-AIRY <admin@ds-servers.com>
Date: Thu, 2 Apr 2020 00:03:23 +0300
Subject: [PATCH] Some optimizations

---
 source/game/BaseAnimating.cpp | 10 ++--------
 source/game/BaseAnimating.h   |  4 ++--
 source/game/BaseTrigger.cpp   | 23 +++++++++++++++++++++++
 source/game/BaseTrigger.h     |  3 +++
 source/physics/PhyWorld.cpp   | 18 +++++++++++++-----
 5 files changed, 43 insertions(+), 15 deletions(-)

diff --git a/source/game/BaseAnimating.cpp b/source/game/BaseAnimating.cpp
index 6b5fa83fe..f9831e33e 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 a31b2fdff..30195eb79 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 d274e13c6..c70c45e16 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 722df46cf..fd281672d 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 70248b799..c5e173441 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)
-- 
GitLab