bionic (3) ALLEGRO_HAPTIC_EFFECT.3alleg5.gz

Provided by: allegro5-doc_5.2.3.0-1_all bug

NAME

       ALLEGRO_HAPTIC_EFFECT - Allegro 5 API

SYNOPSIS

              #include <allegro5/allegro.h>

              struct ALLEGRO_HAPTIC_EFFECT

DESCRIPTION

       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.

       Fields:

       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.

              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(3alleg5)  has  the  flag  ALLEGRO_HAPTIC_ANGLE  set,  then  setting
              direction.angle is supported.  Otherwise, it is unsupported, and you should set it to 0.

              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(3alleg5)  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(3alleg5)  has  the  flag  ALLEGRO_HAPTIC_AZIMUTH  set, then setting
              direction.azimuth is supported.  Otherwise, it is unsupported, and you should set it to 0.

       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(3alleg5).

       data   Determines in detail the parameters of the haptic effect to play back.

              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(3alleg5) 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.

              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 detemine 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.

              The field data.envelope.fade_level must be set to a  relative  value  between  0.0  and  1.0  that
              determines    the   intensity   the   effect   should   have   when   it   stops   playing   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.

              If you don't want to use an envelope, then set all four  fields  of  data.envelope  to  0.0.   The
              effect will then play back at full intensity throughout its playback.

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.