playable with a gamepad
[vrtris] / src / gameinp.c
1 #include "gameinp.h"
2 #include "game.h"
3
4 #define NUM_BN  6
5
6 static int rep_start, rep_rep;
7 static long first_press[16], last_press[16];
8 static unsigned int repmask;
9
10
11 void ginp_repeat(int start, int rep, unsigned int mask)
12 {
13         rep_start = start;
14         rep_rep = rep;
15         repmask = mask;
16 }
17
18 void update_ginp(void)
19 {
20         static unsigned int prevstate;
21         int i;
22
23         ginp_bndelta = ginp_bnstate ^ prevstate;
24         prevstate = ginp_bnstate;
25
26         for(i=0; i<NUM_BN; i++) {
27                 unsigned int bit = 1 << i;
28                 if(!(bit & repmask)) {
29                         continue;
30                 }
31
32                 if(ginp_bnstate & bit) {
33                         if(ginp_bndelta & bit) {
34                                 first_press[i] = time_msec;
35                         } else {
36                                 if(time_msec - first_press[i] >= rep_start && time_msec - last_press[i] >= rep_rep) {
37                                         ginp_bndelta |= bit;
38                                         last_press[i] = time_msec;
39                                 }
40                         }
41                 }
42         }
43 }