// VehicleWheelQueryResults() is omitted since they represent default behavior in C#. // ~VehicleWheelQueryResults() is omitted since it doesn't actually do anything. //Allocate wheel results for up to maxNumVehicles with up to maxNumWheelsPerVehicle. public static VehicleWheelQueryResults *allocate <TAllocator>(uint maxNumVehicles, uint maxNumWheelsPerVehicle, ref TAllocator allocator) where TAllocator : unmanaged, IPxAllocatorCallback { uint byteSize = (uint)(sizeof(VehicleWheelQueryResults) + sizeof(PxVehicleWheelQueryResult) * maxNumVehicles + sizeof(PxWheelQueryResult) * maxNumWheelsPerVehicle * maxNumVehicles); byte *buffer = (byte *)Unsafe.As <TAllocator, PxAllocatorCallback>(ref allocator).allocate(byteSize, null, null, 0); //BIOQUIRK: Awkward generic cast VehicleWheelQueryResults *vwqr = (VehicleWheelQueryResults *)(buffer); buffer += sizeof(VehicleWheelQueryResults); vwqr->mVehicleWheelQueryResults = (PxVehicleWheelQueryResult *)(buffer); buffer += sizeof(PxVehicleWheelQueryResult) * maxNumVehicles; for (uint i = 0; i < maxNumVehicles; i++) { PxWheelQueryResult *result = (PxWheelQueryResult *)buffer; *result = new PxWheelQueryResult(); vwqr->mVehicleWheelQueryResults[i].wheelQueryResults = result; vwqr->mVehicleWheelQueryResults[i].nbWheelQueryResults = maxNumWheelsPerVehicle; buffer += sizeof(PxWheelQueryResult) * maxNumWheelsPerVehicle; } return(vwqr); }
public static void stepPhysics() { const float timestep = 1.0f / 60.0f; //Cycle through the driving modes to demonstrate how to accelerate/reverse/brake/turn etc. incrementDrivingMode(timestep); //Raycasts. PxVehicleNoDrive **vehicles = stackalloc PxVehicleNoDrive *[1] { gVehicleNoDrive }; PxBatchQueryResult <PxRaycastHit> *raycastResults = gVehicleSceneQueryData->getRaycastQueryResultBuffer(0); uint raycastResultsSize = gVehicleSceneQueryData->getQueryResultBufferSize(); PxVehicleSuspensionRaycasts(gBatchQuery, 1, vehicles, raycastResultsSize, raycastResults); //Vehicle update. PxVec3 grav = gScene->getGravity(); PxWheelQueryResult * wheelQueryResults = stackalloc PxWheelQueryResult[PX_MAX_NB_WHEELS]; PxVehicleWheelQueryResult *vehicleQueryResults = stackalloc PxVehicleWheelQueryResult[1] { new() { wheelQueryResults = wheelQueryResults, nbWheelQueryResults = gVehicleNoDrive->mWheelsSimData.getNbWheels() } }; PxVehicleUpdates(timestep, grav, *gFrictionPairs, 1, vehicles, vehicleQueryResults); //Scene update. gScene->simulate(timestep); gScene->fetchResults(true); }