ALLEGRO_HAPTIC_EFFECT(3)

๐Ÿ“ฆ
version 5.2.11.3 ยท 3 versions
, in arch rolling

๐ŸŽ€ NAME ๐ŸŽ€

ALLEGRO_HAPTIC_EFFECT(3) โ€” Allegro 5 API, from the Library Functions Manual. This is the struct bestie: it models a particular haptic or vibration effect. Fill it in correctly and upload it to a haptic device before the device can play it back. No cap ๐Ÿ’–

๐ŸŒธ SYNOPSIS ๐ŸŒธ

#include <allegro5/allegro.h>

struct ALLEGRO_HAPTIC_EFFECT

โœจ DESCRIPTION โœจ

Okay so this struct models a particular haptic or vibration effect. It needs to be filled in correctly and uploaded to a haptic device before the device can play it back. Periodt ๐Ÿ’…

Fields: every single one is getting its moment, no skipping ๐Ÿซถ

๐Ÿฆ‹ type

The type of the haptic effect. May be one of the ALLEGRO_HAPTIC_CONSTANTS constants between or equal to ALLEGRO_HAPTIC_RUMBLE and ALLEGRO_HAPTIC_RAMP.

  • If type is set to ALLEGRO_HAPTIC_RUMBLE, then the effect is a simple โ€œrumbleโ€ or vibration effect that shakes the device. In some cases, such as on a mobile platform, the whole device may shake. ๐Ÿซจ
  • If type is set to ALLEGRO_HAPTIC_PERIODIC, the effect is a shake or vibration of which the intensity is a periodic wave form. ๐ŸŒŠ
  • If type is set to ALLEGRO_HAPTIC_CONSTANT, the effect is a constant pressure, motion or push-back in a certain direction of the axes of the device. ๐Ÿ’ช
  • If type is set to ALLEGRO_HAPTIC_SPRING, the effect is a springy kind of resistance against motion of the axes of the haptic device. ๐ŸŒ€
  • If type is set to ALLEGRO_HAPTIC_FRICTION, the effect is a friction kind of resistance against motion of the axes of the haptic device. ๐Ÿ”ฅ
  • If type is set to ALLEGRO_HAPTIC_DAMPER, the effect is a damper kind of resistance against motion of the axes of the haptic device. ๐Ÿ›‘
  • If type is set to ALLEGRO_HAPTIC_INERTIA, the effect causes inertia or slowness of motions on the axes of the haptic device. ๐Ÿข
  • If type is set to ALLEGRO_HAPTIC_RAMP, the effect causes a pressure or push-back that ramps up or down depending on the position of the axis. ๐Ÿ“ˆ

๐Ÿงš direction

The direction of location in 3D space where the effect should be played. Allegro haptic devices model directions in 3D space using spherical coordinates. However, the haptic device may not support localized effects, or may not support all coordinate components. iykyk, spatial stuff can get picky ๐ŸŒ

In Allegroโ€™s coordinate system, the value in direction.angle determines the planar angle between the effect and the direction of the user who holds the device, expressed in radians. This angle increases clockwise away from the user. So, an effect with an angle 0.0 takes place in the direction of the user of the haptic device, an angle of ฯ€/2 is to the left of the user, an angle of ฯ€ means the direction away from the user, and an angle of 3ฯ€/2 means to the right of the user. ๐Ÿงญ

If al_get_haptic_capabilities(3) has the flag ALLEGRO_HAPTIC_ANGLE set, then setting direction.angle is supported. Otherwise, it is unsupported, and you should set it to 0. Donโ€™t fight the device on this one, bestie โš ๏ธ

The value in direction.radius is a relative value between 0.0 and 1.0 that determines the relative distance from the center of the haptic device at which the effect will play back. A value of 0 means that the effect should play back at the center of the device. A value of 1.0 means that the effect should play back away from the center as far as is possible. ๐ŸŽฏ

If al_get_haptic_capabilities(3) has the flag ALLEGRO_HAPTIC_RADIUS set, then setting direction.radius is supported. Otherwise, it is unsupported, and you should set it to 0. ๐Ÿ’ซ

The value in direction.azimuth determines the elevation angle between the effect and the plane in which the user is holding the device, expressed in radians. An effect with an azimuth 0.0 plays back in the plane in which the user is holding the device, an azimuth +ฯ€/2 means the effect plays back vertically above the user plane, and an azimuth -ฯ€/2 means the effect plays back vertically below the user plane. ๐Ÿ›ฐ๏ธ

If al_get_haptic_capabilities(3) has the flag ALLEGRO_HAPTIC_AZIMUTH set, then setting direction.azimuth is supported. Otherwise, it is unsupported, and you should set it to 0. again: check the flags, queen ๐Ÿ’–

๐ŸŽ€ replay

Determines how the effect should be played back. replay.length is the duration in seconds of the effect, and replay.delay is the time in seconds that the effect playback should be delayed when playback is started with al_play_haptic_effect(3). โณ

๐Ÿ‘‘ data

Determines in detail the parameters of the haptic effect to play back. This is where it gets very specific, so stay with me ๐Ÿ’…

If type is set to ALLEGRO_HAPTIC_RUMBLE, then data.rumble.strong_magnitude must be set to a relative magnitude between 0.0 and 1.0 to determine how intensely the โ€œlargeโ€ rumble motor of the haptic device will vibrate, and data.rumble.weak_magnitude must be set to relative magnitude between 0.0 and 1.0 to determine how intensely the โ€œweakโ€ ruble motor of the haptic device will vibrate. Not all devices have a โ€œweakโ€ motor, in which case the value set in data.rumble.weak_magnitude will be ignored. ๐Ÿซจ

If type is set to ALLEGRO_HAPTIC_PERIODIC, then data.periodic.waveform must be set to one of ALLEGRO_HAPTIC_SQUARE, ALLEGRO_HAPTIC_TRIANGLE, ALLEGRO_HAPTIC_SINE, ALLEGRO_HAPTIC_SAW_UP, ALLEGRO_HAPTIC_SAW_DOWN, ALLEGRO_HAPTIC_CUSTOM. This will then determine the wave form of the vibration effect that will be played on the haptic device. ๐ŸŒŠ

In these cases, data.periodic.period must be set to the period in seconds of the wave form. The field data.periodic.magnitude must be set to the relative magnitude of intensity between -1.0 and 1.0 at which the wave form of the vibration will be played back. The field data.periodic.offset must be filled in with the offset from origin in seconds of the wave form of vibration, and the field data.periodic.phase is the phase of the wave form of vibration in seconds. ๐ŸŽต

If data.periodic.waveform is set to ALLEGRO_HAPTIC_CUSTOM, then data.periodic.custom_data must point to an array of data.periodic.custom_len doubles, each with values between -1.0 and 1.0. This value array will determine the shape of the wave form of the haptic effect. ALLEGRO_HAPTIC_CUSTOM is not supported on some platforms, so use al_get_haptic_capabilities(3) to check if itโ€™s available. If it isnโ€™t, you may want to play back a non-custom wave effect as a substitute instead. ๐Ÿงช

Important vibe check: custom waveforms are not guaranteed everywhere. Check capabilities first, bestie ๐Ÿšจ

If type is set to ALLEGRO_HAPTIC_CONSTANT, then data.constant.level must be set to a relative intensity value between 0.0 and 1.0 to determine the intensity of the effect. ๐Ÿ’ช

If type is set to any of ALLEGRO_HAPTIC_SPRING, ALLEGRO_HAPTIC_FRICTION, ALLEGRO_HAPTIC_DAMPER, ALLEGRO_HAPTIC_INERTIA, ALLEGRO_HAPTIC_RAMP, then the data.condition struct should be filled in. To explain this better, itโ€™s best to keep in mind that these kinds of effects are most useful for steering-wheel kind of devices, where resistance or inertia should be applied when turning the deviceโ€™s wheel a certain distance to the left or right. ๐ŸŽ๏ธ

The field data.condition.right_saturation must be filled in with a relative magnitude between -1.0 and 1.0 to determine the intensity of resistance or inertia on the โ€œrightโ€ side of the axis. Likewise, data.condition.left_saturation must be filled in with a relative magnitude between -1.0 and 1.0 to determine the intensity of resistance or inertia on the โ€œleftโ€ side of the axis. โ†”๏ธ

The field data.condition.deadband must be filled in with a relative value between 0.0 and 1.0 to determine the relative width of the โ€œdead bandโ€ of the haptic effect. As long as the axis of the haptic device remains in the โ€œdead bandโ€ area, the effect will not be applied. A value of 0.0 means there is no dead band, and a value of 1.0 means it applied over the whole range of the axis in question. ๐Ÿ•ณ๏ธ

The field data.condition.center must be filled in with a relative value between -1.0 and 1.0 to determine the relative position of the โ€œcenterโ€ of the effect around which the dead band is centered. It should be set to 0.0 in case the center should not be shifted. ๐ŸŽฏ

The field data.condition.right_coef and data.condition.right_left_coef must be filled in with a relative coefficient, that will determine how quickly the effect ramps up on the right and left side. If set to 1.0, then the effect will be immediately at full intensity when outside of the dead band. If set to 0.0 the effect will not be felt at all. ๐ŸŽš๏ธ

If type is set to ALLEGRO_HAPTIC_RAMP, then data.ramp.start_level should be set to a relative magnitude value between -1.0 and 1.0 to determine the initial intensity of the haptic effect. The field data.ramp.end_level should be set to a relative magnitude value between -1.0 and 1.0 to determine the final intensity of the haptic effect at the end of playback. ๐Ÿ“ˆ

If type is set to any of ALLEGRO_HAPTIC_PERIODIC, ALLEGRO_HAPTIC_CONSTANT, ALLEGRO_HAPTIC_RAMP, then data.envelope determines the โ€œenvelopeโ€ of the effect. That is, it determines the duration and intensity for the ramp-up attack or โ€œfade inโ€ and the ramp-down or โ€œfade outโ€ of the effect. ๐ŸŒˆ

In these cases the field data.envelope.attack_level must be set to a relative value between 0.0 and 1.0 that determines the intensity the effect should have when it starts playing (after replay.delay seconds have passed since the playback was started). The field data.envelope.attack_length must be set to the time in seconds that the effect should ramp up to the maximum intensity as set by the other parameters. If data.envelope.attack_length is 0, then the effect will play immediately at full intensity. โšก

Okay so the envelope details, bestie: data.envelope.fade_level must be set to a relative value between 0.0 and 1.0, and it determines the intensity the effect should have when it stops playing โ€” specifically after replay.length + replay.delay seconds have passed since the playback of the effect started. The field data.envelope.fade_length must be set to the time in seconds that the effect should fade out before it finishes playing. If data.envelope.fade_length is 0, then the effect will not fade out at all.

If you donโ€™t want to use an envelope, set all four fields of data.envelope to 0.0. Then the effect plays back at full intensity throughout its playback. No fading, no drama, just full send. ๐Ÿ’…


โœจ SINCE โœจ

5.1.8

[Unstable API]: perhaps could be simplified due to limited support for all the exposed features across all of the platforms. Awaiting feedback from users. ๐Ÿ‘€

Source/version: the Allegro reference manual, page ALLEGRO_HAPTIC_EFFECT(3). Date: not shown in this part, so Iโ€™m not gonna invent one โ€” mwah ๐Ÿ’‹โœจ

๐Ÿ“ฆ where this page comes from
  • arch rolling: allegro 5.2.11.3-2 ยท Zlib AND BSD-3-Clause AND OFL-1.1 AND LicenseRef-Custom
  • ๐Ÿ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms