void UWheeledVehicleMovementComponent4W::UpdateSimulation(float DeltaTime) { if (PVehicleDrive == NULL) return; PxVehicleDrive4WRawInputData RawInputData; RawInputData.setAnalogAccel(ThrottleInput); RawInputData.setAnalogSteer(SteeringInput); RawInputData.setAnalogBrake(BrakeInput); RawInputData.setAnalogHandbrake(HandbrakeInput); if (!PVehicleDrive->mDriveDynData.getUseAutoGears()) { RawInputData.setGearUp(bRawGearUpInput); RawInputData.setGearDown(bRawGearDownInput); } PxFixedSizeLookupTable<8> SpeedSteerLookup(SteeringMap,4); PxVehiclePadSmoothingData SmoothData = { { ThrottleInputRate.RiseRate, BrakeInputRate.RiseRate, HandbrakeInputRate.RiseRate, SteeringInputRate.RiseRate, SteeringInputRate.RiseRate }, { ThrottleInputRate.FallRate, BrakeInputRate.FallRate, HandbrakeInputRate.FallRate, SteeringInputRate.FallRate, SteeringInputRate.FallRate } }; PxVehicleDrive4W* PVehicleDrive4W = (PxVehicleDrive4W*)PVehicleDrive; PxVehicleDrive4WSmoothAnalogRawInputsAndSetAnalogInputs(SmoothData, SpeedSteerLookup, RawInputData, DeltaTime, false, *PVehicleDrive4W); }
void PhysXVehicle::UpdateController( float delta ) { ////process auto reverse mode //if( vehicleDrive->mDriveDynData.getUseAutoGears() && autoGearAutoReverse ) // ProcessGearsAutoReverse(); //bool swapAccelBrake = false; //if( vehicleDrive->mDriveDynData.getUseAutoGears() && autoGearAutoReverse && // vehicleDrive->mDriveDynData.getCurrentGear() == PxVehicleGearsData::eREVERSE ) //{ // swapAccelBrake = true; //} if( digitalInput ) { //digital input rawInputData.setDigitalAccel( inputAccel != 0 ); rawInputData.setDigitalBrake( inputBrake != 0 ); //need swap left and right. why? ok... rawInputData.setDigitalSteerLeft( inputSteer > 0 ); rawInputData.setDigitalSteerRight( inputSteer < 0 ); //rawInputData.setDigitalSteerLeft( inputDigitalSteerLeft ); //rawInputData.setDigitalSteerRight( inputDigitalSteerRight ); rawInputData.setDigitalHandbrake( inputHandbrake != 0 ); PxVehicleDrive4WSmoothDigitalRawInputsAndSetAnalogInputs( inputKeySmoothingData, inputSteerVsForwardSpeedTable, rawInputData, delta, *vehicleDrive ); } else { //analog input rawInputData.setAnalogAccel( inputAccel ); rawInputData.setAnalogBrake( inputBrake ); //need swap left and right. why? ok... rawInputData.setAnalogSteer( -inputSteer ); rawInputData.setAnalogHandbrake( inputHandbrake ); PxVehicleDrive4WSmoothAnalogRawInputsAndSetAnalogInputs( inputPadSmoothingData, inputSteerVsForwardSpeedTable, rawInputData, delta, *vehicleDrive ); } }
void UWheeledVehicleMovementComponent4W::UpdateSimulation(float DeltaTime) { if (PVehicleDrive == NULL) return; UpdatedPrimitive->GetBodyInstance()->ExecuteOnPhysicsReadWrite([&] { PxVehicleDrive4WRawInputData RawInputData; RawInputData.setAnalogAccel(ThrottleInput); RawInputData.setAnalogSteer(SteeringInput); RawInputData.setAnalogBrake(BrakeInput); RawInputData.setAnalogHandbrake(HandbrakeInput); if (!PVehicleDrive->mDriveDynData.getUseAutoGears()) { RawInputData.setGearUp(bRawGearUpInput); RawInputData.setGearDown(bRawGearDownInput); } // Convert from our curve to PxFixedSizeLookupTable PxFixedSizeLookupTable<8> SpeedSteerLookup; TArray<FRichCurveKey> SteerKeys = SteeringCurve.GetRichCurve()->GetCopyOfKeys(); const int32 MaxSteeringSamples = FMath::Min(8, SteerKeys.Num()); for (int32 KeyIdx = 0; KeyIdx < MaxSteeringSamples; KeyIdx++) { FRichCurveKey& Key = SteerKeys[KeyIdx]; SpeedSteerLookup.addPair(KmHToCmS(Key.Time), FMath::Clamp(Key.Value, 0.f, 1.f)); } PxVehiclePadSmoothingData SmoothData = { { ThrottleInputRate.RiseRate, BrakeInputRate.RiseRate, HandbrakeInputRate.RiseRate, SteeringInputRate.RiseRate, SteeringInputRate.RiseRate }, { ThrottleInputRate.FallRate, BrakeInputRate.FallRate, HandbrakeInputRate.FallRate, SteeringInputRate.FallRate, SteeringInputRate.FallRate } }; PxVehicleDrive4W* PVehicleDrive4W = (PxVehicleDrive4W*)PVehicleDrive; PxVehicleDrive4WSmoothAnalogRawInputsAndSetAnalogInputs(SmoothData, SpeedSteerLookup, RawInputData, DeltaTime, false, *PVehicleDrive4W); }); }