]> icculus.org git repositories - btb/d2x.git/blob - arch/sdl/joydefs.c
use the orientation parameter of g3_draw_bitmap
[btb/d2x.git] / arch / sdl / joydefs.c
1 /*
2  *
3  * SDL joystick support
4  *
5  *
6  */
7
8 #ifdef HAVE_CONFIG_H
9 #include <conf.h>
10 #endif
11
12 #include "joydefs.h"
13 #include "pstypes.h"
14 #include "newmenu.h"
15 #include "inferno.h"
16 #include "text.h"
17 #include "kconfig.h"
18
19 extern int num_joysticks;
20
21 int joydefs_calibrate_flag = 0;
22
23 void joydefs_calibrate()
24 {
25         joydefs_calibrate_flag = 0;
26
27         if (!num_joysticks) {
28                 nm_messagebox( NULL, 1, TXT_OK, TXT_NO_JOYSTICK );
29                 return;
30         }
31
32         //Actual calibration if necessary
33
34 }
35
36 void joydef_menuset_1(int nitems, newmenu_item * items, int *last_key, int citem )
37 {
38         int oc_joy = Config_control_joystick.intval;
39         int oc_mouse = Config_control_mouse.intval;
40
41         cvar_setint(&Config_control_joystick, items[0].value);
42         cvar_setint(&Config_control_mouse, items[1].value);
43
44         if (!oc_joy && Config_control_joystick.intval)
45                 joydefs_calibrate_flag = 1;
46
47         if (oc_joy != Config_control_joystick.intval || oc_mouse != Config_control_mouse.intval)
48                 kc_set_controls();
49 }
50
51
52 #define ADD_SLIDER(txt,v,minv,maxv) do { m[nitems].type=NM_TYPE_SLIDER; m[nitems].text=txt; m[nitems].value=v; m[nitems].min_value=minv; m[nitems].max_value=maxv; nitems++; } while (0)
53
54 void joydefs_sensitivity(void)
55 {
56         newmenu_item m[23];
57         int i1 = 0;
58         int nitems = 0;
59
60         m[nitems].type = NM_TYPE_TEXT; m[nitems].text = "Joystick Sensitivity"; nitems++;
61         ADD_SLIDER(TXT_TURN_LR,  f2i(8 * Config_joystick_sensitivity[AXIS_TURN-1].fixval), 0, 16);
62         ADD_SLIDER(TXT_PITCH_UD, f2i(8 * Config_joystick_sensitivity[AXIS_PITCH-1].fixval), 0, 16);
63         ADD_SLIDER(TXT_SLIDE_LR, f2i(8 * Config_joystick_sensitivity[AXIS_LEFTRIGHT-1].fixval), 0, 16);
64         ADD_SLIDER(TXT_SLIDE_UD, f2i(8 * Config_joystick_sensitivity[AXIS_UPDOWN-1].fixval), 0, 16);
65         ADD_SLIDER(TXT_BANK_LR,  f2i(8 * Config_joystick_sensitivity[AXIS_BANK-1].fixval), 0, 16);
66         ADD_SLIDER(TXT_THROTTLE, f2i(8 * Config_joystick_sensitivity[AXIS_THROTTLE-1].fixval), 0, 16);
67
68         m[nitems].type = NM_TYPE_TEXT; m[nitems].text = ""; nitems++;
69         m[nitems].type = NM_TYPE_TEXT; m[nitems].text = "Joystick Deadzone"; nitems++;
70         ADD_SLIDER(TXT_TURN_LR,  f2i(8 * Config_joystick_deadzone[AXIS_TURN-1].fixval), 0, 16);
71         ADD_SLIDER(TXT_PITCH_UD, f2i(8 * Config_joystick_deadzone[AXIS_PITCH-1].fixval), 0, 16);
72         ADD_SLIDER(TXT_SLIDE_LR, f2i(8 * Config_joystick_deadzone[AXIS_LEFTRIGHT-1].fixval), 0, 16);
73         ADD_SLIDER(TXT_SLIDE_UD, f2i(8 * Config_joystick_deadzone[AXIS_UPDOWN-1].fixval), 0, 16);
74         ADD_SLIDER(TXT_BANK_LR,  f2i(8 * Config_joystick_deadzone[AXIS_BANK-1].fixval), 0, 16);
75         ADD_SLIDER(TXT_THROTTLE, f2i(8 * Config_joystick_deadzone[AXIS_THROTTLE-1].fixval), 0, 16);
76
77         m[nitems].type = NM_TYPE_TEXT; m[nitems].text = ""; nitems++;
78         m[nitems].type = NM_TYPE_TEXT; m[nitems].text = "Mouse Sensitivity"; nitems++;
79         ADD_SLIDER(TXT_TURN_LR,  f2i(8 * Config_mouse_sensitivity[AXIS_TURN-1].fixval), 0, 16);
80         ADD_SLIDER(TXT_PITCH_UD, f2i(8 * Config_mouse_sensitivity[AXIS_PITCH-1].fixval), 0, 16);
81         ADD_SLIDER(TXT_SLIDE_LR, f2i(8 * Config_mouse_sensitivity[AXIS_LEFTRIGHT-1].fixval), 0, 16);
82         ADD_SLIDER(TXT_SLIDE_UD, f2i(8 * Config_mouse_sensitivity[AXIS_UPDOWN-1].fixval), 0, 16);
83         ADD_SLIDER(TXT_BANK_LR,  f2i(8 * Config_mouse_sensitivity[AXIS_BANK-1].fixval), 0, 16);
84         ADD_SLIDER(TXT_THROTTLE, f2i(8 * Config_mouse_sensitivity[AXIS_THROTTLE-1].fixval), 0, 16);
85
86         do
87                 i1 = newmenu_do1(NULL, "Sensitivity", nitems, m, NULL, i1);
88         while ( i1 > -1 );
89
90         cvar_setfl(&Config_joystick_sensitivity[AXIS_TURN-1],      m[1].value / 8.0);
91         cvar_setfl(&Config_joystick_sensitivity[AXIS_PITCH-1],     m[2].value / 8.0);
92         cvar_setfl(&Config_joystick_sensitivity[AXIS_LEFTRIGHT-1], m[3].value / 8.0);
93         cvar_setfl(&Config_joystick_sensitivity[AXIS_UPDOWN-1],    m[4].value / 8.0);
94         cvar_setfl(&Config_joystick_sensitivity[AXIS_BANK-1],      m[5].value / 8.0);
95         cvar_setfl(&Config_joystick_sensitivity[AXIS_THROTTLE-1],  m[6].value / 8.0);
96
97         cvar_setfl(&Config_joystick_deadzone[AXIS_TURN-1],      m[ 9].value / 16.0);
98         cvar_setfl(&Config_joystick_deadzone[AXIS_PITCH-1],     m[10].value / 16.0);
99         cvar_setfl(&Config_joystick_deadzone[AXIS_LEFTRIGHT-1], m[11].value / 16.0);
100         cvar_setfl(&Config_joystick_deadzone[AXIS_UPDOWN-1],    m[12].value / 16.0);
101         cvar_setfl(&Config_joystick_deadzone[AXIS_BANK-1],      m[13].value / 16.0);
102         cvar_setfl(&Config_joystick_deadzone[AXIS_THROTTLE-1],  m[14].value / 16.0);
103
104         cvar_setfl(&Config_mouse_sensitivity[AXIS_TURN-1],      m[17].value / 8.0);
105         cvar_setfl(&Config_mouse_sensitivity[AXIS_PITCH-1],     m[18].value / 8.0);
106         cvar_setfl(&Config_mouse_sensitivity[AXIS_LEFTRIGHT-1], m[19].value / 8.0);
107         cvar_setfl(&Config_mouse_sensitivity[AXIS_UPDOWN-1],    m[20].value / 8.0);
108         cvar_setfl(&Config_mouse_sensitivity[AXIS_BANK-1],      m[21].value / 8.0);
109         cvar_setfl(&Config_mouse_sensitivity[AXIS_THROTTLE-1],  m[22].value / 8.0);
110 }
111
112
113 void joydefs_config()
114 {
115         newmenu_item m[9];
116         int i1 = 3;
117         int nitems = 9;
118
119         m[0].type = NM_TYPE_CHECK;  m[0].text = TXT_CONTROL_JOYSTICK; m[0].value = Config_control_joystick.intval;
120         m[1].type = NM_TYPE_CHECK;  m[1].text = TXT_CONTROL_MOUSE;    m[1].value = Config_control_mouse.intval;
121         m[2].type = NM_TYPE_TEXT;   m[2].text = "";
122         m[3].type = NM_TYPE_MENU;   m[3].text = TXT_CUST_KEYBOARD;
123         m[4].type = NM_TYPE_MENU;   m[4].text = "CUSTOMIZE ANALOG CONTROLS";
124         m[5].type = NM_TYPE_MENU;   m[5].text = "CUSTOMIZE D2X KEYS";
125         m[6].type = NM_TYPE_TEXT;   m[6].text = "";
126         m[7].type = NM_TYPE_MENU;   m[7].text = TXT_JOYS_SENSITIVITY;
127         m[8].type = NM_TYPE_MENU;   m[8].text = TXT_CAL_JOYSTICK;
128
129         do {
130                 i1 = newmenu_do1(NULL, TXT_CONTROLS, nitems, m, joydef_menuset_1, i1);
131
132                 cvar_setint(&Config_control_joystick, m[0].value);
133                 cvar_setint(&Config_control_mouse, m[1].value);
134
135                 switch (i1) {
136                 case 3: kconfig(0, TXT_KEYBOARD); break;
137                 case 4: kconfig(1, TXT_AXES); break;
138                 case 5: kconfig(2, "D2X KEYS"); break;
139                 case 7: joydefs_sensitivity();      break;
140                 case 8: joydefs_calibrate();        break;
141                 }
142
143         } while (i1>-1);
144
145 }