]> icculus.org git repositories - btb/d2x.git/blob - main/concntl.c
start refactoring Controls stuff more logically, now that it no longer has anything...
[btb/d2x.git] / main / concntl.c
1 #ifdef HAVE_CONFIG_H
2 #include <conf.h>
3 #endif
4
5 #include <string.h>
6
7 #include "console.h"
8 #include "timer.h"
9 #include "inferno.h"
10
11
12 typedef struct _console_control_info {
13         ubyte state;
14         fix   time_went_down;
15         fix   time_held_down;
16         uint  down_count;
17 } console_control_info;
18
19 console_control_info Console_controls[CONCNTL_NUM_CONTROLS];
20
21 void concntl_cmd_lookdown_on(int argc, char **argv)     { console_control_set_state(CONCNTL_LOOKDOWN,   1); }
22 void concntl_cmd_lookdown_off(int argc, char **argv)    { console_control_set_state(CONCNTL_LOOKDOWN,   0); }
23 void concntl_cmd_lookup_on(int argc, char **argv)       { console_control_set_state(CONCNTL_LOOKUP,     1); }
24 void concntl_cmd_lookup_off(int argc, char **argv)      { console_control_set_state(CONCNTL_LOOKUP,     0); }
25 void concntl_cmd_left_on(int argc, char **argv)         { console_control_set_state(CONCNTL_LEFT,       1); }
26 void concntl_cmd_left_off(int argc, char **argv)        { console_control_set_state(CONCNTL_LEFT,       0); }
27 void concntl_cmd_right_on(int argc, char **argv)        { console_control_set_state(CONCNTL_RIGHT,      1); }
28 void concntl_cmd_right_off(int argc, char **argv)       { console_control_set_state(CONCNTL_RIGHT,      0); }
29 void concntl_cmd_moveleft_on(int argc, char **argv)     { console_control_set_state(CONCNTL_MOVELEFT,   1); }
30 void concntl_cmd_moveleft_off(int argc, char **argv)    { console_control_set_state(CONCNTL_MOVELEFT,   0); }
31 void concntl_cmd_moveright_on(int argc, char **argv)    { console_control_set_state(CONCNTL_MOVERIGHT,  1); }
32 void concntl_cmd_moveright_off(int argc, char **argv)   { console_control_set_state(CONCNTL_MOVERIGHT,  0); }
33 void concntl_cmd_moveup_on(int argc, char **argv)       { console_control_set_state(CONCNTL_MOVEUP,     1); }
34 void concntl_cmd_moveup_off(int argc, char **argv)      { console_control_set_state(CONCNTL_MOVEUP,     0); }
35 void concntl_cmd_movedown_on(int argc, char **argv)     { console_control_set_state(CONCNTL_MOVEDOWN,   1); }
36 void concntl_cmd_movedown_off(int argc, char **argv)    { console_control_set_state(CONCNTL_MOVEDOWN,   0); }
37 void concntl_cmd_bankleft_on(int argc, char **argv)     { console_control_set_state(CONCNTL_BANKLEFT,   1); }
38 void concntl_cmd_bankleft_off(int argc, char **argv)    { console_control_set_state(CONCNTL_BANKLEFT,   0); }
39 void concntl_cmd_bankright_on(int argc, char **argv)    { console_control_set_state(CONCNTL_BANKRIGHT,  1); }
40 void concntl_cmd_bankright_off(int argc, char **argv)   { console_control_set_state(CONCNTL_BANKRIGHT,  0); }
41 void concntl_cmd_forward_on(int argc, char **argv)      { console_control_set_state(CONCNTL_FORWARD,    1); }
42 void concntl_cmd_forward_off(int argc, char **argv)     { console_control_set_state(CONCNTL_FORWARD,    0); }
43 void concntl_cmd_back_on(int argc, char **argv)         { console_control_set_state(CONCNTL_BACK,       1); }
44 void concntl_cmd_back_off(int argc, char **argv)        { console_control_set_state(CONCNTL_BACK,       0); }
45 void concntl_cmd_cruiseup_on(int argc, char **argv)     { console_control_set_state(CONCNTL_CRUISEUP,   1); }
46 void concntl_cmd_cruiseup_off(int argc, char **argv)    { console_control_set_state(CONCNTL_CRUISEUP,   0); }
47 void concntl_cmd_cruisedown_on(int argc, char **argv)   { console_control_set_state(CONCNTL_CRUISEDOWN, 1); }
48 void concntl_cmd_cruisedown_off(int argc, char **argv)  { console_control_set_state(CONCNTL_CRUISEDOWN, 0); }
49 void concntl_cmd_cruiseoff_on(int argc, char **argv)    { console_control_set_state(CONCNTL_CRUISEOFF,  1); }
50 void concntl_cmd_cruiseoff_off(int argc, char **argv)   { console_control_set_state(CONCNTL_CRUISEOFF,  0); }
51 void concntl_cmd_nrgshield_on(int argc, char **argv)    { console_control_set_state(CONCNTL_NRGSHIELD,  1); }
52 void concntl_cmd_nrgshield_off(int argc, char **argv)   { console_control_set_state(CONCNTL_NRGSHIELD,  0); }
53
54 /* select / toggle weapons */
55 void concntl_cmd_weapon(int argc, char **argv)
56 {
57         int n;
58
59         if (argc < 2 || !stricmp(argv[1], "-h")) {
60                 con_printf(CON_NORMAL, "%s <num>\n", argv[0]);
61                 con_printf(CON_NORMAL, "    select or toggle weapon <num>\n");
62                 return;
63         }
64
65         n = atoi(argv[1]);
66         if (n == 0)
67                 n = 10;
68         if (n < 1 || n > 10)
69                 return;
70
71         do_weapon_select((n-1) % 5, (n-1) / 5);
72 }
73
74 void concntl_cmd_togglebomb(int argc, char **argv)
75 {
76         weapon_toggle_bomb();
77 }
78
79
80 // Returns the number of seconds this 'button' has been down since last call.
81 fix console_control_down_time(console_control control)
82 {
83         fix time_down, time;
84
85         if (!Console_controls[control].state) {
86                 time_down = Console_controls[control].time_held_down;
87                 Console_controls[control].time_held_down = 0;
88         } else {
89                 time = timer_get_fixed_seconds();
90                 time_down = time - Console_controls[control].time_went_down;
91                 Console_controls[control].time_went_down = time;
92         }
93         
94         return time_down;
95 }
96
97 unsigned int console_control_down_count(console_control control)
98 {
99         int n;
100
101         n = Console_controls[control].down_count;
102         Console_controls[control].down_count = 0;
103         
104         return n;
105 }
106
107
108 // Returns 1 if this control is currently down
109 unsigned int console_control_state(console_control control)
110 {
111         return Console_controls[control].state;
112 }
113
114
115 void console_control_set_state(console_control control, int state)
116 {
117         console_control_info *ctl = &Console_controls[control];
118
119         if (state) {
120                 ctl->down_count++;
121                 ctl->state = 1;
122                 ctl->time_went_down = timer_get_fixed_seconds();
123         } else {
124                 ctl->state = 0;
125                 ctl->time_held_down += timer_get_fixed_seconds() - ctl->time_went_down;
126         }
127 }
128
129
130 void console_control_init(void)
131 {
132         memset(Console_controls, 0, sizeof(console_control_info) * CONCNTL_NUM_CONTROLS);
133
134         cmd_addcommand("+lookdown",     concntl_cmd_lookdown_on);
135         cmd_addcommand("-lookdown",     concntl_cmd_lookdown_off);
136         cmd_addcommand("+lookup",       concntl_cmd_lookup_on);
137         cmd_addcommand("-lookup",       concntl_cmd_lookup_off);
138         cmd_addcommand("+left",         concntl_cmd_left_on);
139         cmd_addcommand("-left",         concntl_cmd_left_off);
140         cmd_addcommand("+right",        concntl_cmd_right_on);
141         cmd_addcommand("-right",        concntl_cmd_right_off);
142         cmd_addcommand("+moveleft",     concntl_cmd_moveleft_on);
143         cmd_addcommand("-moveleft",     concntl_cmd_moveleft_off);
144         cmd_addcommand("+moveright",    concntl_cmd_moveright_on);
145         cmd_addcommand("-moveright",    concntl_cmd_moveright_off);
146         cmd_addcommand("+moveup",       concntl_cmd_moveup_on);
147         cmd_addcommand("-moveup",       concntl_cmd_moveup_off);
148         cmd_addcommand("+movedown",     concntl_cmd_movedown_on);
149         cmd_addcommand("-movedown",     concntl_cmd_movedown_off);
150         cmd_addcommand("+bankleft",     concntl_cmd_bankleft_on);
151         cmd_addcommand("-bankleft",     concntl_cmd_bankleft_off);
152         cmd_addcommand("+bankright",    concntl_cmd_bankright_on);
153         cmd_addcommand("-bankright",    concntl_cmd_bankright_off);
154         cmd_addcommand("+forward",      concntl_cmd_forward_on);
155         cmd_addcommand("-forward",      concntl_cmd_forward_off);
156         cmd_addcommand("+back",         concntl_cmd_back_on);
157         cmd_addcommand("-back",         concntl_cmd_back_off);
158         cmd_addcommand("+cruiseup",     concntl_cmd_cruiseup_on);
159         cmd_addcommand("-cruiseup",     concntl_cmd_cruiseup_off);
160         cmd_addcommand("+cruisedown",   concntl_cmd_cruisedown_on);
161         cmd_addcommand("-cruisedown",   concntl_cmd_cruisedown_off);
162         cmd_addcommand("+cruiseoff",    concntl_cmd_cruiseoff_on);
163         cmd_addcommand("-cruiseoff",    concntl_cmd_cruiseoff_off);
164         cmd_addcommand("+nrgshield",    concntl_cmd_nrgshield_on);
165         cmd_addcommand("-nrgshield",    concntl_cmd_nrgshield_off);
166
167         cmd_addcommand("weapon", concntl_cmd_weapon);
168         cmd_addcommand("togglebomb", concntl_cmd_togglebomb);
169 }