NAME
Steering Wheel SDK
COPYRIGHT
The Logitech Steering Wheel SDK, including all accompanying documentation, is protected by intellectual property laws. All rights not expressly granted by Logitech are reserved.
PURPOSE
The Steering Wheel SDK is an addition to Microsoft's DirectInput in DirectX. It is aimed at driving games and enables to dramatically shorten development time and improve implementation quality for various types of game controllers (USB/gameport wheels/joysticks/game pads, FF enabled or not). The Steering Wheel SDK has been developed and tested for wheels and joysticks using the Logitech, Microsoft and Immersion drivers. It also works with Logitech rumble pads (it has not been tested with non-Logitech rumble pads). By using the Steering Wheel SDK you have the guarantee that all wheels and joysticks will function flawlessly. No more situations where force feedback in a game behaves very differently from one wheel/joystick to another, which in turn results in user frustration and product returns. The Steering Wheel SDK comes with a very intuitive and easy to use interface which enables to read the wheel/joystick's axes and buttons, and also to create all the force feedback effects that are necessary for a good and complete implementation. See the following files to get started: - readme.txt: tells you how to get started. - SampleInGameImplementation.cpp: shows line by line how to use the Steering Wheel SDK's interface to do a complete implementation for PC game controllers in your driving game. The idea is to develop support for the steering wheel. But if a user plugs in a joystick or game pad he can play as well and get force feedback or rumble. If a joystick is plugged in, all forces generated by the Steering Wheel SDK will be played on the X axis and there will be a constant spring on the Y axis. - SteeringWheelSDK.cpp: demonstrates force feedback effects. Just compile, run and plug in a FF wheel, joystick or rumble pad. See usage at top of SteeringWheelSDK.cpp. For more details see DirectInput documentation which is part of Microsoft's DirectX.
AUTHOR
Christophe Juncker (cj@wingmanteam.com)
NAME
Wheel(ControllerInput* controllerInput) -- Does necessary initialization.
INPUTS
controllerInput - handle to instance of Controller Input SDK.
SEE ALSO
SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
VOID Wheel::Update() -- keeps forces and controller connections up to date.
NOTES
Must be called every frame.
SEE ALSO
SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL IsConnected(INT index) -- Check if a game controller is connected at the specified index.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller.
RETURN VALUE
TRUE if a PC wheel/joystick/game pad is connected, FALSE otherwise.
SEE ALSO
IsConnected(INT.index,DeviceType.deviceType) IsConnected(INT.index,ManufacturerName.manufacturerName) IsConnected(INT.index,ModelName.modelName) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL IsConnected(INT index, DeviceType deviceType) -- Check if a game controller is connected at the specified index.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. deviceType - type of the device to check for. Possible types are: - LG_DEVICE_TYPE_WHEEL - LG_DEVICE_TYPE_JOYSTICK - LG_DEVICE_TYPE_GAMEPAD
RETURN VALUE
TRUE if a PC controller of specified type is connected, FALSE otherwise.
SEE ALSO
IsConnected(INT.index) IsConnected(INT.index,ManufacturerName.manufacturerName) IsConnected(INT.index,ModelName.modelName) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL IsConnected(INT index, ManufacturerName manufacturerName) -- Check if a game controller is connected at the specified index.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. manufacturerName - name of the manufacturer the device has been made by. Possible names are: - LG_MANUFACTURER_LOGITECH - LG_MANUFACTURER_MICROSOFT - LG_MANUFACTURER_OTHER
RETURN VALUE
TRUE if a PC controller of specified manufacturer is connected, FALSE otherwise.
SEE ALSO
IsConnected(INT.index) IsConnected(INT.index,DeviceType.deviceType) IsConnected(INT.index,ModelName.modelName) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL IsConnected(INT index, ModelName modelName) -- Check if a game controller is connected at the specified index.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. modelName - name of the model of the device. Possible models are: - LG_MODEL_G27 - LG_MODEL_G25 - LG_MODEL_MOMO_RACING - LG_MODEL_MOMO_FORCE - LG_MODEL_DRIVING_FORCE_PRO - LG_MODEL_DRIVING_FORCE - LG_MODEL_NASCAR_RACING_WHEEL - LG_MODEL_FORMULA_FORCE - LG_MODEL_FORMULA_FORCE_GP - LG_MODEL_FORCE_3D_PRO - LG_MODEL_EXTREME_3D_PRO - LG_MODEL_FREEDOM_24 - LG_MODEL_ATTACK_3 - LG_MODEL_FORCE_3D - LG_MODEL_STRIKE_FORCE_3D - LG_MODEL_RUMBLEPAD - LG_MODEL_RUMBLEPAD_2 - LG_MODEL_CORDLESS_RUMBLEPAD_2 - LG_MODEL_CORDLESS_GAMEPAD - LG_MODEL_DUAL_ACTION_GAMEPAD - LG_MODEL_PRECISION_GAMEPAD_2 - LG_MODEL_CHILLSTREAM
RETURN VALUE
TRUE if specific PC controller is connected, FALSE otherwise.
SEE ALSO
IsConnected(INT.index) IsConnected(INT.index,DeviceType.deviceType) IsConnected(INT.index,ManufacturerName.manufacturerName) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
DIJOYSTATE2* GetState(INT index) -- Get the state of the controller.
INPUTS
index - index of the game controller. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller.
RETURN VALUE
DIJOYSTATE2 structure containing the device's positional information for axes, POVs and buttons.
SEE ALSO
SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
LPCTSTR GetFriendlyProductName(INT index) -- Get the device's friendly product name.
INPUTS
index - index of the game controller. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller.
RETURN VALUE
Device friendly product name.
SEE ALSO
SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL ButtonTriggered(INT index, INT buttonNbr) -- Check if a certain button was triggered.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. buttonNbr - the number of the button that we want to check. Possible numbers are: 0 to 127.
RETURN VALUE
TRUE if the button was triggered, FALSE otherwise.
SEE ALSO
ButtonIsPressed(INT.index,INT.buttonNbr) ButtonReleased(INT.index,INT.buttonNbr)
NAME
BOOL ButtonReleased(INT index, INT buttonNbr) -- Check if a certain button was released.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. buttonNbr - the number of the button that we want to check. Possible numbers are: 0 to 127.
RETURN VALUE
TRUE if the button was released, FALSE otherwise.
SEE ALSO
ButtonIsPressed(INT.index,INT.buttonNbr) ButtonTriggered(INT.index,INT.buttonNbr)
NAME
BOOL ButtonIsPressed(INT index, INT buttonNbr) -- Check if a certain button is being pressed.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. buttonNbr - the number of the button that we want to check. Possible numbers are: 0 to 127.
RETURN VALUE
TRUE if the button is being pressed, FALSE otherwise.
SEE ALSO
ButtonReleased(INT.index,INT.buttonNbr) ButtonTriggered(INT.index,INT.buttonNbr)
NAME
HRESULT SetPreferredControllerProperties(ControllerPropertiesData properties) -- set preferred wheel properties.
INPUTS
properties - structure containing all the fields to be set.
RETURN VALUE
E_INVALIDARG if argument is wrong (individual settings out of bounds). E_FAIL if Logitech Gaming Software is older than 5.03. S_OK otherwise.
NOTES
This function merely sets the game's preference. The Steering Wheel SDK will attempt to set the wheel's settings when necessary.
SEE ALSO
GetCurrentControllerProperties(INT.index,ControllerPropertiesData&.properties) GetShifterMode(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL GetCurrentControllerProperties(INT index, ControllerPropertiesData& properties) -- get current properties.
INPUTS
index - index of the game controller. properties - structure to receive current properties.
RETURN VALUE
TRUE if current value was received from Logitech driver. FALSE if function failed or current value is default value.
NOTES
Function will fail and return default properties if user has older than 5.03 Logitech Gaming Software installed.
SEE ALSO
SetPreferredControllerProperties(ControllerPropertiesData.properties) GetShifterMode(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
INT GetShifterMode(INT index) -- get current shifter mode (gated or sequential).
INPUTS
index - index of the game controller.
RETURN VALUE
1 if shifter is gated 0 if shifter is sequential -1 if unknown
SEE ALSO
SetPreferredControllerProperties(ControllerPropertiesData.properties) GetCurrentControllerProperties(INT.index,ControllerPropertiesData&.properties) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT PlayLeds(INT index, FLOAT currentRPM, FLOAT rpmFirstLedTurnsOn, FLOAT rpmRedLine) -- play LEDs on G27.
INPUTS
index - index of the game controller. currentRPM - current RPM. rpmFirstLedTurnsOn - RPM when first LEDs are to turn on. rpmRedLine - just below this RPM, all LEDs will be on. Just above, all LEDs will start flashing.
SEE ALSO
SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
BOOL HasForceFeedback(INT index) -- Check if a game controller has force feedback.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller.
RETURN VALUE
TRUE if the specified device can do force feedback, FALSE otherwise.
NAME
BOOL IsPlaying(INT index, ForceType forceType) -- check if a certain force effect is currently playing.
INPUTS
index - index of the game controller that we want to check. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. forceType - the type of the force that we want to check to see if it is playing. Possible types are: - LG_FORCE_SPRING - LG_FORCE_CONSTANT - LG_FORCE_DAMPER - LG_FORCE_SIDE_COLLISION - LG_FORCE_FRONTAL_COLLISION - LG_FORCE_DIRT_ROAD - LG_FORCE_BUMPY_ROAD - LG_FORCE_SLIPPERY_ROAD - LG_FORCE_SURFACE_EFFECT - LG_FORCE_CAR_AIRBORNE
RETURN VALUE
TRUE if the force is playing, FALSE otherwise.
NAME
HRESULT GenerateNonLinearValues(int index, int nonLinCoeff) -- Generate non-linear values for the game controller's axis.
FUNCTION
Gaming wheels/joysticks/game pads have very different behavior from real steering wheels. The reason for single-turn wheels is that they only do up to three quarters of a turn lock to lock, compared to about 3 turns for a real car. This directly affects the steering ratio (15:1 to 20:1 for a real car, but only 4:1 for a gaming wheel!). Joysticks and game pads have a much shorter range of movement than a real steering wheel as well. Because of this very short steering ratio or short range, the gaming wheel/joystick/game pad will feel highly sensitive which may make game play very difficult. Especially it may be difficult to drive in a straight line at speed (tendency to swerve back and forth). One way to get around this problem is to use a sensitivity curve. This is a curve that defines the sensitivity of the game controller depending on speed. This type of curve is usually used for game pads to make up for their low physical range. The result of applying such a curve is that at high speed the car's wheels will physically turn less than if the car is moving very slowly. For example the car's wheels may turn 60 degrees lock to lock at low speed but only 10 degrees lock to lock at higher speeds. If you calculate the resulting steering ratio for 10 degrees lock to lock you find that if you use a steering wheel that turns 180 degrees lock to lock the ratio is equal to 180/10 = 18, which corresponds to a real car's steering ratio. If the sensitivity curve has been implemented for the wheel/joystick, adding a non-linear curve probably is not necessary. But you may find that even after applying a sensitivity curve, the car still feels a little twitchy on a straight line when driving fast. This may be because in your game you need more than 10 degrees lock to lock even at high speeds. Or maybe the car is moving at very high speeds where even a normal steering ratio is not good enough to eliminate high sensitivity. The best way at this point is to add a non-linear curve on top of the sensitivity curve. The effect of the non-linear curve with positive nonLinCoeff is that around center position the wheel/joystick will be less sensitive. Yet at locked position left or right the car's wheels will turn the same amount of degrees as without the non-linear response curve. Therefore the car will become more controllable on a straight line and game-play will be improved. There can sometimes be cases where the wheel does not feel sensitive enough. In that case it is possible to add a non-linear curve with the inverse effect (makes the steering more sensitive around center position) by using negative values for nonLinCoeff. This method lets you define a non-linearity coefficient which will determine how strongly non-linear the curve will be. When running the method it will generate a mapping table in the form of an array. For each of the 1024 entries in this array there will be a corresponding non-linear value which can be used as the wheel/joystick's axis position instead of the original value. See Sample_In-game_Implementation.cs for an example.
INPUTS
index - index to which the concerned game controller is connected. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. nonLinCoeff - value representing how much non-linearity should be applied. Range is -100 to 100. 0 = linear curve, 100 = maximum non-linear curve with less sensitivity around center, -100 = maximum non-linearity with more sensitivity around center position.
RETURN VALUE
S_OK if successful, E_FAIL otherwise.
SEE ALSO
GetNonLinearValue(INT.index,INT.inputValue) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
INT GetNonLinearValue(INT index, INT inputValue) -- Get a non-linear value from a table previously generated. This can be used for the response of a steering wheel.
INPUTS
index - index of the game controller. Index 0 corresponds to the first game controller connected. Index 1 to the second game controller. inputValue - value between -32768 and 32767 corresponding to original value of an axis.
RETURN VALUE
Value between -32768 and 32767 corresponding to the level of non-linearity previously set with GenerateNonLinearValues(...).
SEE ALSO
GenerateNonLinearValues(INT.index,INT.nonLinCoeff) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT PlaySpringForce(INT index, INT offsetPercentage, INT saturationPercentage, INT coefficientPercentage) -- Play the spring force.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. offsetPercentage - Specifies the center of the spring force effect. Valid range is -100 to 100. Specifying 0 centers the spring. Any values outside this range are silently clamped. saturationPercentage - Specify the level of saturation of the spring force effect. The saturation stays constant after a certain deflection from the center of the spring. It is comparable to a magnitude. Valid ranges are 0 to 100. Any value higher than 100 is silently clamped. coefficientPercentage - Specify the slope of the effect strength increase relative to the amount of deflection from the center of the condition. Higher values mean that the saturation level is reached sooner. Valid ranges are -100 to 100. Any value outside the valid range is silently clamped.
NOTES
The dynamic spring force gets played on the X axis. If a joystick is connected, all forces generated by the Steering Wheel SDK will be played on the X axis. And in addition there will be a constant spring on the Y axis.
SEE ALSO
StopSpringForce(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT StopSpringForce(INT index) -- Stop the spring force.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlaySpringForce(INT.index,INT.offsetPercentage,INT.saturationPercentage,INT.coefficientPercentage)
NAME
HRESULT PlayConstantForce(INT index, INT magnitudePercentage) -- Play the constant force.
FUNCTION
A constant force works best when continuously updated with a value tied to the physics engine. Tie the steering wheel/joystick to the car's physics engine via a vector force. This will create a centering spring effect, a sliding effect, a feeling for the car's inertia, and depending on the physics engine it should also give side collisions (wheel/joystick jerks in the opposite way of the wall the car just touched). The vector force could for example be calculated from the lateral force measured at the front tires. This vector force should be 0 when at a stop or driving straight. When driving through a turn or when driving on a banked surface the vector force should have a magnitude that grows in a proportional way.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. magnitudePercentage - Specifies the magnitude of the constant force effect. A negative value reverses the direction of the force. Valid ranges for magnitudePercentage are -100 to 100. Any values outside the valid range are silently clamped.
SEE ALSO
StopConstantForce(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT StopConstantForce(INT index) -- stop the constant force.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlayConstantForce(INT.index,INT.magnitudePercentage)
NAME
HRESULT PlayDamperForce(INT index, INT coefficientPercentage) -- Play the damper force.
FUNCTION
Simulate surfaces that are hard to turn on (mud, car at a stop) or slippery surfaces (snow, ice).
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. coefficientPercentage - specify the slope of the effect strength increase relative to the amount of deflection from the center of the condition. Higher values mean that the saturation level is reached sooner. Valid ranges are -100 to 100. Any value outside the valid range is silently clamped. -100 simulates a very slippery effect, +100 makes the wheel/joystick very hard to move, simulating the car at a stop or in mud.
SEE ALSO
StopDamperForce(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT StopDamperForce(INT index) -- stop the damper force.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlayDamperForce(INT.index,INT.coefficientPercentage)
NAME
HRESULT PlaySideCollisionForce(INT index, INT magnitudePercentage) -- play a side collision force.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. magnitudePercentage - Specifies the magnitude of the side collision force effect. A negative value reverses the direction of the force. Valid ranges for magnitudePercentage are -100 to 100. Any values outside the valid range are silently clamped.
NOTES
If you are already using a constant force tied to a vector force from the physics engine, then you may not need to add side collisions since depending on your physics engine the side collisions may automatically be taken care of by the constant force.
NAME
HRESULT PlayFrontalCollisionForce(INT index, INT magnitudePercentage) -- Play a frontal collision force.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. magnitudePercentage - specifies the magnitude of the frontal collision force effect. Valid ranges for magnitudePercentage are 0 to 100. Values higher than 100 are silently clamped.
SEE ALSO
SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT PlayDirtRoadEffect(INT index, INT magnitudePercentage) -- Play a surface effect that feels like driving on a dirt road.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. magnitudePercentage - Specifies the magnitude of the dirt road effect. Valid ranges for magnitudePercentage are 0 to 100. Values higher than 100 are silently clamped.
SEE ALSO
StopDirtRoadEffect(INT.index) PlaySurfaceEffect(INT.index,PeriodicType.type,INT.magnitude,INT.period)
NAME
HRESULT StopDirtRoadEffect(INT index) -- stop the dirt road effect.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlayDirtRoadEffect(INT.index,INT.magnitudePercentage)
NAME
HRESULT PlayBumpyRoadEffect(INT index, INT magnitudePercentage) -- Play a surface effect that feels like driving on a bumpy road (like on cobblestones for example).
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. magnitudePercentage - Specifies the magnitude of the bumpy road effect. Valid ranges for magnitudePercentage are 0 to 100. Values higher than 100 are silently clamped.
SEE ALSO
StopBumpyRoadEffect(INT.index) PlaySurfaceEffect(INT.index,PeriodicType.type,INT.magnitudePercentage,INT.period)
NAME
HRESULT StopBumpyRoadEffect(INT index) -- stop the bumpy road effect.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlayBumpyRoadEffect(INT.index,INT.magnitudePercentage)
NAME
HRESULT PlaySlipperyRoadEffect(INT index, INT magnitudePercentage) -- Play a slippery road effect (snow, ice).
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. magnitudePercentage - Specifies the magnitude of the slippery road effect. Valid ranges for magnitudePercentage are 0 to 100. 100 corresponds to the most slippery effect.
SEE ALSO
StopSlipperyRoadEffect(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT StopSlipperyRoadEffect(INT index) -- stop the slippery road effect.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlaySlipperyRoadEffect(INT.index,INT.magnitudePercentage)
NAME
HRESULT PlaySurfaceEffect(INT index, PeriodicType type, INT magnitudePercentage, INT period) -- play any type of rumble to simulate surface effects.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick. type - Specifies the type of force effect. Can be one of the following values: - PeriodicType.LG_TYPE_SINE - PeriodicType.LG_TYPE_SQUARE magnitudePercentage - Specifies the magnitude of the surface effect. Valid ranges for magnitudePercentage are 0 to 100. Values higher than 100 are silently clamped. period - Specifies the period of the periodic force effect. The value is the duration for one full cycle of the periodic function measured in milliseconds. A good range of values for the period is 20 ms (sand) to 120 ms (wooden bridge or cobblestones). For a surface effect the period should not be any bigger than 150 ms.
SEE ALSO
StopSurfaceEffect(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT StopSurfaceEffect(INT index) -- stop the surface effect.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlaySurfaceEffect(INT.index,PeriodicType.type,INT.magnitudePercentage,INT.period)
NAME
HRESULT PlayCarAirborne(INT index) -- play an effect that simulates a car that is airborne or where the front wheels do not touch the ground.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
StopCarAirborne(INT.index) SampleInGameImplementation.cpp or SteeringWheelSDKDemo.cpp to see an example.
NAME
HRESULT StopCarAirborne(INT index) -- stop the car airborne effect and resume any forces that were playing before the car was airborne.
INPUTS
index - index of the game controller. Index 0 corresponds to the first wheel/joystick connected. Index 1 to the second wheel/joystick.
SEE ALSO
PlayCarAirborne(INT.index)
NAME
HRESULT PlaySoftstopForce(INT index, INT usableRangePercentage) -- Play a spring force that acts like a soft stop in order to limit a wheel's range.
INPUTS
index - index of the game controller. usableRangePercentage - Specifies the deadband in percentage of the softstop force effect.
SEE ALSO
StopSoftstopForce(INT.index)
NAME
HRESULT StopSoftstopForce(INT index) -- stop the "softstop" spring force.
INPUTS
index - index of the game controller.
SEE ALSO
PlaySoftstopForce(INT.index,INT.usableRangePercentage)