Optimize ticking disabled vehicles
This commit is contained in:
@@ -661,6 +661,8 @@ void Physics::CollectResults()
|
|||||||
int32 wheelsCount = 0;
|
int32 wheelsCount = 0;
|
||||||
for (auto wheelVehicle : WheelVehicles)
|
for (auto wheelVehicle : WheelVehicles)
|
||||||
{
|
{
|
||||||
|
if (!wheelVehicle->IsActiveInHierarchy())
|
||||||
|
continue;
|
||||||
auto drive = (PxVehicleWheels*)wheelVehicle->_drive;
|
auto drive = (PxVehicleWheels*)wheelVehicle->_drive;
|
||||||
ASSERT(drive);
|
ASSERT(drive);
|
||||||
WheelVehiclesCache.Add(drive);
|
WheelVehiclesCache.Add(drive);
|
||||||
@@ -810,13 +812,17 @@ void Physics::CollectResults()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Setup cache for wheel states
|
// Setup cache for wheel states
|
||||||
WheelVehiclesResultsPerVehicle.Resize(WheelVehicles.Count(), false);
|
WheelVehiclesResultsPerVehicle.Resize(WheelVehiclesCache.Count(), false);
|
||||||
WheelVehiclesResultsPerWheel.Resize(wheelsCount, false);
|
WheelVehiclesResultsPerWheel.Resize(wheelsCount, false);
|
||||||
wheelsCount = 0;
|
wheelsCount = 0;
|
||||||
for (int32 i = 0; i < WheelVehicles.Count(); i++)
|
for (int32 i = 0, ii = 0; i < WheelVehicles.Count(); i++)
|
||||||
{
|
{
|
||||||
auto drive = (PxVehicleWheels*)WheelVehicles[i]->_drive;
|
auto wheelVehicle = WheelVehicles[i];
|
||||||
auto& perVehicle = WheelVehiclesResultsPerVehicle[i];
|
if (!wheelVehicle->IsActiveInHierarchy())
|
||||||
|
continue;
|
||||||
|
auto drive = (PxVehicleWheels*)WheelVehicles[ii]->_drive;
|
||||||
|
auto& perVehicle = WheelVehiclesResultsPerVehicle[ii];
|
||||||
|
ii++;
|
||||||
perVehicle.nbWheelQueryResults = drive->mWheelsSimData.getNbWheels();
|
perVehicle.nbWheelQueryResults = drive->mWheelsSimData.getNbWheels();
|
||||||
perVehicle.wheelQueryResults = WheelVehiclesResultsPerWheel.Get() + wheelsCount;
|
perVehicle.wheelQueryResults = WheelVehiclesResultsPerWheel.Get() + wheelsCount;
|
||||||
wheelsCount += perVehicle.nbWheelQueryResults;
|
wheelsCount += perVehicle.nbWheelQueryResults;
|
||||||
@@ -827,11 +833,14 @@ void Physics::CollectResults()
|
|||||||
PxVehicleUpdates(LastDeltaTime, PhysicsScene->getGravity(), *WheelTireFrictions, WheelVehiclesCache.Count(), WheelVehiclesCache.Get(), WheelVehiclesResultsPerVehicle.Get());
|
PxVehicleUpdates(LastDeltaTime, PhysicsScene->getGravity(), *WheelTireFrictions, WheelVehiclesCache.Count(), WheelVehiclesCache.Get(), WheelVehiclesResultsPerVehicle.Get());
|
||||||
|
|
||||||
// Synchronize state
|
// Synchronize state
|
||||||
for (int32 i = 0; i < WheelVehicles.Count(); i++)
|
for (int32 i = 0, ii = 0; i < WheelVehicles.Count(); i++)
|
||||||
{
|
{
|
||||||
auto wheelVehicle = WheelVehicles[i];
|
auto wheelVehicle = WheelVehicles[i];
|
||||||
auto drive = WheelVehiclesCache[i];
|
if (!wheelVehicle->IsActiveInHierarchy())
|
||||||
auto& perVehicle = WheelVehiclesResultsPerVehicle[i];
|
continue;
|
||||||
|
auto drive = WheelVehiclesCache[ii];
|
||||||
|
auto& perVehicle = WheelVehiclesResultsPerVehicle[ii];
|
||||||
|
ii++;
|
||||||
|
|
||||||
// Update wheels
|
// Update wheels
|
||||||
for (int32 j = 0; j < wheelVehicle->_wheelsData.Count(); j++)
|
for (int32 j = 0; j < wheelVehicle->_wheelsData.Count(); j++)
|
||||||
|
|||||||
Reference in New Issue
Block a user