void SampleVehicle_VehicleManager::suspensionRaycasts(PxScene* scene)
{
	//Create a scene query if we haven't already done so.
	if(NULL==mSqWheelRaycastBatchQuery)
	{
		mSqWheelRaycastBatchQuery=mSqData->setUpBatchedSceneQuery(scene);
	}
	//Raycasts.
	PxVehicleSuspensionRaycasts(mSqWheelRaycastBatchQuery,mNumVehicles,mVehicles,mSqData->getRaycastQueryResultBufferSize(),mSqData->getRaycastQueryResultBuffer());
}
Ejemplo n.º 2
0
void PhysXVehicle::Update( float delta )
{
	UpdateController(delta);

	//optimization: update all cars by one call. make sense?

	PxVehicleWheels* vehicles[1];
	vehicles[0] = vehicleDrive;
	PxVehicleSuspensionRaycasts(sceneQueryData->batchQuery, 1, vehicles, wheelCount, sceneQueryData->raycastQueryResults);

	if(surfaceTirePairsUsedMaterialsVersion != world->vehicleDrivableMaterialsVersionCounter)
	{
		UpdateSurfaceTirePairs();
		surfaceTirePairsUsedMaterialsVersion = world->vehicleDrivableMaterialsVersionCounter;
	}

	//Update the vehicle for which we want to record debug data.
	//PxVehicleUpdateSingleVehicleAndStoreTelemetryData(delta, scene->mScene->getGravity(), *mSurfaceTirePairs, 
	//	vehicleDrive, *telemetryData);
	PxVehicleUpdates(delta, scene->mScene->getGravity(), *surfaceTirePairs, 1, vehicles);
}
Ejemplo n.º 3
0
void FPhysXVehicleManager::Update( float DeltaTime )
{
	if ( Vehicles.Num() == 0 )
	{
		return;
	}

	if ( bUpdateTireFrictionTable )
	{
		bUpdateTireFrictionTable = false;
		UpdateTireFrictionTableInternal();
	}

	// Suspension raycasts
	PxVehicleSuspensionRaycasts( WheelRaycastBatchQuery, PVehicles.Num(), PVehicles.GetData(), WheelQueryResults.Num(), WheelQueryResults.GetData() );

	// Tick vehicles
	for ( int32 i = Vehicles.Num() - 1; i >= 0; --i )
	{
		Vehicles[i]->TickVehicle( DeltaTime );
	}

#if PX_DEBUG_VEHICLE_ON

	if ( TelemetryVehicle != NULL )
	{
		UpdateVehiclesWithTelemetry( DeltaTime );
	}
	else
	{
		UpdateVehicles( DeltaTime );
	}

#else

	UpdateVehicles( DeltaTime );

#endif //PX_DEBUG_VEHICLE_ON
}