A constant force is a force with a defined magnitude and duration.
You can apply an envelope to a constant force in order to give it shape. For example, suppose you have an effect with a nominal magnitude of 2,000 and a duration of 2 seconds. Then you apply an envelope with the following values:
Attack time | 0.5 second |
Initial attack level | 5,000 |
Fade time | 1 second |
Fade level | 0 |
When you play the effect, you get the following:
Elapsed time | Magnitude |
0.0 | 5,000 |
0.1 | 4,400 |
0.2 | 3,800 |
0.3 | 3,200 |
0.4 | 2,600 |
0.5 | 2,000 |
(duration of sustain) | 2,000 |
1.0: | 2,000 |
1.1 | 1,800 |
1.2 | 1,600 |
1.3 | 1,400 |
1.4 | 1,200 |
1.5 | 1,000 |
1.6 | 800 |
1.7 | 600 |
1.8 | 400 |
1.9 | 200 |
2.0 | 0 |
You cannot apply an offset to a constant force.
To create a constant force, pass GUID_ConstantForce to the IDirectInputDevice2::CreateEffect method. You can also pass any other GUID obtained by the IDirectInputDevice2::EnumEffects method, provided the low byte of the dwEffType member of the DIEFFECTINFO structure (DIEFT_GETTYPE(dwEfftype)) is equal to DIEFT_CONSTANTFORCE. In this way you can use hardware-specific forces designed by the manufacturer, such as a "constant" force that actually varies in magnitude in a seemingly random fashion to simulate turbulence.
A constant force uses a DICONSTANTFORCE structure to define the magnitude of the force, while the duration is taken from the DIEFFECT structure. An envelope may be applied.