c6710f2696809e56b2c05b375cc78eef6b6a09bb
[carveJwlIkooP6JGAAIwe30JlM.git] / input.h
1 #ifndef INPUT_H
2 #define INPUT_H
3
4 #define VG_GAME
5 #include "vg/vg.h"
6 #include "vg/vg_platform.h"
7 #include "vg/vg_console.h"
8 #include "vg/vg_input.h"
9 #include "vg/vg_m.h"
10 #include "conf.h"
11
12 enum sr_bind{
13 k_srbind_jump = 0,
14 k_srbind_push,
15 k_srbind_trick0,
16 k_srbind_trick1,
17 k_srbind_trick2,
18 k_srbind_use,
19 k_srbind_reset,
20 k_srbind_camera,
21 k_srbind_mleft,
22 k_srbind_mright,
23 k_srbind_mup,
24 k_srbind_mdown,
25 k_srbind_mback,
26 k_srbind_maccept,
27 k_srbind_max
28 };
29
30 struct {
31 v2f joy_steer,
32 joy_grab,
33 joy_look;
34
35 float axis_grab;
36
37 u8 button_states[ k_srbind_max ][2];
38 float repeaters[4];
39 }
40 static srinput;
41
42 static int button_down( enum sr_bind button )
43 {
44 if( vg_console.enabled )
45 return 0;
46
47 if( vg.engine_stage == k_engine_stage_update_fixed )
48 if( vg.fixed_iterations > 0 )
49 return 0;
50
51 if( srinput.button_states[ button ][0] &&
52 !srinput.button_states[ button ][1] )
53 return 1;
54 else
55 return 0;
56 }
57
58 static int button_up( enum sr_bind button )
59 {
60 if( vg_console.enabled )
61 return 0;
62
63 if( vg.engine_stage == k_engine_stage_update_fixed )
64 if( vg.fixed_iterations > 0 )
65 return 0;
66
67 if( !srinput.button_states[ button ][0] &&
68 srinput.button_states[ button ][1] )
69 return 1;
70 else
71 return 0;
72 }
73
74 static int button_press( enum sr_bind button )
75 {
76 if( vg_console.enabled )
77 return 0;
78
79 return srinput.button_states[ button ][0];
80 }
81
82 static void setbtn( enum sr_bind button, u8 value )
83 {
84 srinput.button_states[button][0] |= value;
85 }
86
87 static void skaterift_preupdate_inputs(void)
88 {
89 for( u32 i=0; i<k_srbind_max; i++ ){
90 srinput.button_states[i][1] = srinput.button_states[i][0];
91 srinput.button_states[i][0] = 0;
92 }
93
94 u32 mouse = SDL_GetMouseState(NULL,NULL),
95 mouse1= (mouse & SDL_BUTTON(SDL_BUTTON_LEFT))? 1: 0,
96 mouse2= (mouse & SDL_BUTTON(SDL_BUTTON_RIGHT))? 1: 0;
97
98 /* button inputs
99 * ------------------------------------- */
100 setbtn( k_srbind_jump, vg_getkey(SDLK_SPACE) );
101 setbtn( k_srbind_push, vg_getkey(SDLK_w) );
102 setbtn( k_srbind_trick0, mouse1 );
103 setbtn( k_srbind_trick1, mouse2 );
104 setbtn( k_srbind_trick2, mouse1 & mouse2 );
105 setbtn( k_srbind_use, vg_getkey(SDLK_e) );
106 setbtn( k_srbind_reset, vg_getkey(SDLK_r) );
107 setbtn( k_srbind_camera, vg_getkey(SDLK_c) );
108 setbtn( k_srbind_mleft, vg_getkey(SDLK_LEFT) );
109 setbtn( k_srbind_mright, vg_getkey(SDLK_RIGHT) );
110 setbtn( k_srbind_mup, vg_getkey(SDLK_UP) );
111 setbtn( k_srbind_mdown, vg_getkey(SDLK_DOWN) );
112 setbtn( k_srbind_mback, vg_getkey(SDLK_ESCAPE) );
113 setbtn( k_srbind_maccept, vg_getkey(SDLK_e) );
114 setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN));
115 setbtn( k_srbind_maccept, vg_getkey(SDLK_RETURN2));
116
117 /* axis
118 * --------------------------------------------*/
119 srinput.axis_grab = vg_getkey( SDLK_LSHIFT );
120
121 v2_zero( srinput.joy_steer );
122 v2_zero( srinput.joy_grab );
123 v2_zero( srinput.joy_look );
124
125 if( vg_getkey( SDLK_d ) ) srinput.joy_steer[0] += 1.0f;
126 if( vg_getkey( SDLK_a ) ) srinput.joy_steer[0] -= 1.0f;
127 if( vg_getkey( SDLK_w ) ) srinput.joy_steer[1] -= 1.0f;
128 if( vg_getkey( SDLK_s ) ) srinput.joy_steer[1] += 1.0f;
129
130 if( vg_input.active_controller_index != -1 ){
131 struct vg_controller *controller =
132 &vg_input.controllers[vg_input.active_controller_index];
133
134 u32 *buttons = controller->buttons;
135 setbtn( k_srbind_jump, buttons[ SDL_CONTROLLER_BUTTON_A ] );
136 setbtn( k_srbind_push, buttons[ SDL_CONTROLLER_BUTTON_B ] );
137 setbtn( k_srbind_trick0, buttons[ SDL_CONTROLLER_BUTTON_A ] );
138 setbtn( k_srbind_trick1, buttons[ SDL_CONTROLLER_BUTTON_B ] );
139 setbtn( k_srbind_trick2, buttons[ SDL_CONTROLLER_BUTTON_X ] );
140 setbtn( k_srbind_use, buttons[ SDL_CONTROLLER_BUTTON_Y ] );
141 setbtn( k_srbind_reset, buttons[ SDL_CONTROLLER_BUTTON_LEFTSHOULDER ] );
142 setbtn( k_srbind_camera, buttons[ SDL_CONTROLLER_BUTTON_RIGHTSHOULDER ] );
143 setbtn( k_srbind_mleft, buttons[ SDL_CONTROLLER_BUTTON_DPAD_LEFT ] );
144 setbtn( k_srbind_mright, buttons[ SDL_CONTROLLER_BUTTON_DPAD_RIGHT ] );
145 setbtn( k_srbind_mup, buttons[ SDL_CONTROLLER_BUTTON_DPAD_UP ] );
146 setbtn( k_srbind_mdown, buttons[ SDL_CONTROLLER_BUTTON_DPAD_DOWN ] );
147
148 float *axis = controller->axises;
149
150 srinput.joy_steer[0] += axis[ SDL_CONTROLLER_AXIS_LEFTX ],
151 srinput.joy_steer[1] += axis[ SDL_CONTROLLER_AXIS_LEFTY ],
152 srinput.joy_look[0] += axis[ SDL_CONTROLLER_AXIS_RIGHTX ];
153 srinput.joy_look[1] += axis[ SDL_CONTROLLER_AXIS_RIGHTY ];
154 srinput.joy_grab[0] += axis[ SDL_CONTROLLER_AXIS_RIGHTX ];
155 srinput.joy_grab[1] += axis[ SDL_CONTROLLER_AXIS_RIGHTY ];
156 srinput.axis_grab += vg_maxf( 0.0f,
157 axis[ SDL_CONTROLLER_AXIS_TRIGGERRIGHT ] );
158
159 float lh = axis[ SDL_CONTROLLER_AXIS_LEFTX ],
160 lv = axis[ SDL_CONTROLLER_AXIS_LEFTY ],
161 sensitivity = 0.35f;
162
163 if( lh > sensitivity ) setbtn( k_srbind_mright, 1 );
164 if( lh < -sensitivity ) setbtn( k_srbind_mleft, 1 );
165 if( lv > sensitivity ) setbtn( k_srbind_mup, 1 );
166 if( lv < -sensitivity ) setbtn( k_srbind_mdown, 1 );
167 }
168
169 //v2_normalize_clamp( srinput.joy_steer );
170 //v2_normalize_clamp( srinput.joy_grab );
171 srinput.axis_grab = vg_minf( 1.0f, srinput.axis_grab );
172 }
173
174 #endif /* INPUT_H */