1 module allegro5.haptic; 2 3 import allegro5.display; 4 import allegro5.mouse; 5 import allegro5.joystick; 6 import allegro5.keyboard; 7 import allegro5.touch_input; 8 9 enum ALLEGRO_HAPTIC_CONSTANTS 10 { 11 ALLEGRO_HAPTIC_RUMBLE = 1 << 0, 12 ALLEGRO_HAPTIC_PERIODIC = 1 << 1, 13 ALLEGRO_HAPTIC_CONSTANT = 1 << 2, 14 ALLEGRO_HAPTIC_SPRING = 1 << 3, 15 ALLEGRO_HAPTIC_FRICTION = 1 << 4, 16 ALLEGRO_HAPTIC_DAMPER = 1 << 5, 17 ALLEGRO_HAPTIC_INERTIA = 1 << 6, 18 ALLEGRO_HAPTIC_RAMP = 1 << 7, 19 ALLEGRO_HAPTIC_SQUARE = 1 << 8, 20 ALLEGRO_HAPTIC_TRIANGLE = 1 << 9, 21 ALLEGRO_HAPTIC_SINE = 1 << 10, 22 ALLEGRO_HAPTIC_SAW_UP = 1 << 11, 23 ALLEGRO_HAPTIC_SAW_DOWN = 1 << 12, 24 ALLEGRO_HAPTIC_CUSTOM = 1 << 13, 25 ALLEGRO_HAPTIC_GAIN = 1 << 14, 26 ALLEGRO_HAPTIC_ANGLE = 1 << 15, 27 ALLEGRO_HAPTIC_RADIUS = 1 << 16, 28 ALLEGRO_HAPTIC_AZIMUTH = 1 << 17 29 } 30 31 struct ALLEGRO_HAPTIC {} 32 33 struct ALLEGRO_HAPTIC_DIRECTION 34 { 35 double angle; 36 double radius; 37 double azimuth; 38 } 39 40 struct ALLEGRO_HAPTIC_REPLAY 41 { 42 double length; 43 double delay; 44 } 45 46 struct ALLEGRO_HAPTIC_ENVELOPE 47 { 48 double attack_length; 49 double attack_level; 50 double fade_length; 51 double fade_level; 52 } 53 54 struct ALLEGRO_HAPTIC_CONSTANT_EFFECT 55 { 56 double level; 57 ALLEGRO_HAPTIC_ENVELOPE envelope; 58 } 59 60 struct ALLEGRO_HAPTIC_RAMP_EFFECT 61 { 62 double start_level; 63 double end_level; 64 ALLEGRO_HAPTIC_ENVELOPE envelope; 65 } 66 67 struct ALLEGRO_HAPTIC_CONDITION_EFFECT 68 { 69 double right_saturation; 70 double left_saturation; 71 double right_coeff; 72 double left_coeff; 73 double deadband; 74 double center; 75 } 76 77 struct ALLEGRO_HAPTIC_PERIODIC_EFFECT 78 { 79 int waveform; 80 double period; 81 double magnitude; 82 double offset; 83 double phase; 84 85 ALLEGRO_HAPTIC_ENVELOPE envelope; 86 int custom_len; 87 double *custom_data; 88 } 89 90 struct ALLEGRO_HAPTIC_RUMBLE_EFFECT 91 { 92 double strong_magnitude; 93 double weak_magnitude; 94 } 95 96 union ALLEGRO_HAPTIC_EFFECT_UNION 97 { 98 ALLEGRO_HAPTIC_CONSTANT_EFFECT constant; 99 ALLEGRO_HAPTIC_RAMP_EFFECT ramp; 100 ALLEGRO_HAPTIC_PERIODIC_EFFECT periodic; 101 ALLEGRO_HAPTIC_CONDITION_EFFECT condition; 102 ALLEGRO_HAPTIC_RUMBLE_EFFECT rumble; 103 } 104 105 struct ALLEGRO_HAPTIC_EFFECT 106 { 107 int type; 108 ALLEGRO_HAPTIC_DIRECTION direction; 109 ALLEGRO_HAPTIC_REPLAY replay; 110 ALLEGRO_HAPTIC_EFFECT_UNION data; 111 } 112 113 struct ALLEGRO_HAPTIC_EFFECT_ID 114 { 115 ALLEGRO_HAPTIC* _haptic; 116 int _id; 117 int _handle; 118 double _effect_duration; 119 bool _playing; 120 double _start_time; 121 double _end_time; 122 } 123 124 extern(C) 125 { 126 bool al_install_haptic(); 127 void al_uninstall_haptic(); 128 bool al_is_haptic_installed(); 129 130 bool al_is_mouse_haptic(ALLEGRO_MOUSE*); 131 bool al_is_joystick_haptic(ALLEGRO_JOYSTICK*); 132 bool al_is_keyboard_haptic(ALLEGRO_KEYBOARD*); 133 bool al_is_display_haptic(ALLEGRO_DISPLAY*); 134 bool al_is_touch_input_haptic(ALLEGRO_TOUCH_INPUT*); 135 136 ALLEGRO_HAPTIC* al_get_haptic_from_mouse(ALLEGRO_MOUSE*); 137 ALLEGRO_HAPTIC* al_get_haptic_from_joystick(ALLEGRO_JOYSTICK*); 138 ALLEGRO_HAPTIC* al_get_haptic_from_keyboard(ALLEGRO_KEYBOARD*); 139 ALLEGRO_HAPTIC* al_get_haptic_from_display(ALLEGRO_DISPLAY*); 140 ALLEGRO_HAPTIC* al_get_haptic_from_touch_input(ALLEGRO_TOUCH_INPUT*); 141 142 bool al_release_haptic(ALLEGRO_HAPTIC*); 143 144 bool al_get_haptic_active(ALLEGRO_HAPTIC*); 145 int al_get_haptic_capabilities(ALLEGRO_HAPTIC*); 146 bool al_set_haptic_gain(ALLEGRO_HAPTIC*, double gain); 147 double al_get_haptic_gain(ALLEGRO_HAPTIC*); 148 149 int al_get_num_haptic_effects(ALLEGRO_HAPTIC*); 150 bool al_is_haptic_effect_ok(ALLEGRO_HAPTIC*, ALLEGRO_HAPTIC_EFFECT*); 151 bool al_upload_haptic_effect(ALLEGRO_HAPTIC*, ALLEGRO_HAPTIC_EFFECT*, ALLEGRO_HAPTIC_EFFECT_ID* play_id); 152 bool al_play_haptic_effect(ALLEGRO_HAPTIC_EFFECT_ID*, int loop); 153 bool al_upload_and_play_haptic_effect(ALLEGRO_HAPTIC*, ALLEGRO_HAPTIC_EFFECT*, int loop, ALLEGRO_HAPTIC_EFFECT_ID* play_id); 154 bool al_stop_haptic_effect(ALLEGRO_HAPTIC_EFFECT_ID*); 155 bool al_is_haptic_effect_playing(ALLEGRO_HAPTIC_EFFECT_ID*); 156 bool al_release_haptic_effect(ALLEGRO_HAPTIC_EFFECT_ID*); 157 bool al_rumble_haptic(ALLEGRO_HAPTIC*, double intensity, double duration, ALLEGRO_HAPTIC_EFFECT_ID*); 158 }