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);
}
Ejemplo n.º 2
0
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);
	});
}