]> icculus.org git repositories - btb/d2x.git/blob - main/concntl.c
begin refactoring to umbrella header
[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         uint  up_count;
18 } console_control_info;
19
20 console_control_info Console_controls[CONCNTL_NUM_CONTROLS];
21
22 void concntl_cmd_lookdown_on(int argc, char **argv)     { console_control_set_state(CONCNTL_LOOKDOWN,   1); }
23 void concntl_cmd_lookdown_off(int argc, char **argv)    { console_control_set_state(CONCNTL_LOOKDOWN,   0); }
24 void concntl_cmd_lookup_on(int argc, char **argv)       { console_control_set_state(CONCNTL_LOOKUP,     1); }
25 void concntl_cmd_lookup_off(int argc, char **argv)      { console_control_set_state(CONCNTL_LOOKUP,     0); }
26 void concntl_cmd_left_on(int argc, char **argv)         { console_control_set_state(CONCNTL_LEFT,       1); }
27 void concntl_cmd_left_off(int argc, char **argv)        { console_control_set_state(CONCNTL_LEFT,       0); }
28 void concntl_cmd_right_on(int argc, char **argv)        { console_control_set_state(CONCNTL_RIGHT,      1); }
29 void concntl_cmd_right_off(int argc, char **argv)       { console_control_set_state(CONCNTL_RIGHT,      0); }
30 void concntl_cmd_strafe_on(int argc, char **argv)       { console_control_set_state(CONCNTL_STRAFE,     1); }
31 void concntl_cmd_strafe_off(int argc, char **argv)      { console_control_set_state(CONCNTL_STRAFE,     0); }
32 void concntl_cmd_moveleft_on(int argc, char **argv)     { console_control_set_state(CONCNTL_MOVELEFT,   1); }
33 void concntl_cmd_moveleft_off(int argc, char **argv)    { console_control_set_state(CONCNTL_MOVELEFT,   0); }
34 void concntl_cmd_moveright_on(int argc, char **argv)    { console_control_set_state(CONCNTL_MOVERIGHT,  1); }
35 void concntl_cmd_moveright_off(int argc, char **argv)   { console_control_set_state(CONCNTL_MOVERIGHT,  0); }
36 void concntl_cmd_moveup_on(int argc, char **argv)       { console_control_set_state(CONCNTL_MOVEUP,     1); }
37 void concntl_cmd_moveup_off(int argc, char **argv)      { console_control_set_state(CONCNTL_MOVEUP,     0); }
38 void concntl_cmd_movedown_on(int argc, char **argv)     { console_control_set_state(CONCNTL_MOVEDOWN,   1); }
39 void concntl_cmd_movedown_off(int argc, char **argv)    { console_control_set_state(CONCNTL_MOVEDOWN,   0); }
40 void concntl_cmd_bank_on(int argc, char **argv)         { console_control_set_state(CONCNTL_BANK,       1); }
41 void concntl_cmd_bank_off(int argc, char **argv)        { console_control_set_state(CONCNTL_BANK,       0); }
42 void concntl_cmd_bankleft_on(int argc, char **argv)     { console_control_set_state(CONCNTL_BANKLEFT,   1); }
43 void concntl_cmd_bankleft_off(int argc, char **argv)    { console_control_set_state(CONCNTL_BANKLEFT,   0); }
44 void concntl_cmd_bankright_on(int argc, char **argv)    { console_control_set_state(CONCNTL_BANKRIGHT,  1); }
45 void concntl_cmd_bankright_off(int argc, char **argv)   { console_control_set_state(CONCNTL_BANKRIGHT,  0); }
46 void concntl_cmd_attack_on(int argc, char **argv)       { console_control_set_state(CONCNTL_ATTACK,     1); }
47 void concntl_cmd_attack_off(int argc, char **argv)      { console_control_set_state(CONCNTL_ATTACK,     0); }
48 void concntl_cmd_attack2_on(int argc, char **argv)      { console_control_set_state(CONCNTL_ATTACK2,    1); }
49 void concntl_cmd_attack2_off(int argc, char **argv)     { console_control_set_state(CONCNTL_ATTACK2,    0); }
50 void concntl_cmd_flare_on(int argc, char **argv)        { console_control_set_state(CONCNTL_FLARE,      1); }
51 void concntl_cmd_flare_off(int argc, char **argv)       { console_control_set_state(CONCNTL_FLARE,      0); }
52 void concntl_cmd_forward_on(int argc, char **argv)      { console_control_set_state(CONCNTL_FORWARD,    1); }
53 void concntl_cmd_forward_off(int argc, char **argv)     { console_control_set_state(CONCNTL_FORWARD,    0); }
54 void concntl_cmd_back_on(int argc, char **argv)         { console_control_set_state(CONCNTL_BACK,       1); }
55 void concntl_cmd_back_off(int argc, char **argv)        { console_control_set_state(CONCNTL_BACK,       0); }
56 void concntl_cmd_bomb_on(int argc, char **argv)         { console_control_set_state(CONCNTL_BOMB,       1); }
57 void concntl_cmd_bomb_off(int argc, char **argv)        { console_control_set_state(CONCNTL_BOMB,       0); }
58 void concntl_cmd_rearview_on(int argc, char **argv)     { console_control_set_state(CONCNTL_REARVIEW,   1); }
59 void concntl_cmd_rearview_off(int argc, char **argv)    { console_control_set_state(CONCNTL_REARVIEW,   0); }
60 void concntl_cmd_cruiseup_on(int argc, char **argv)     { console_control_set_state(CONCNTL_CRUISEUP,   1); }
61 void concntl_cmd_cruiseup_off(int argc, char **argv)    { console_control_set_state(CONCNTL_CRUISEUP,   0); }
62 void concntl_cmd_cruisedown_on(int argc, char **argv)   { console_control_set_state(CONCNTL_CRUISEDOWN, 1); }
63 void concntl_cmd_cruisedown_off(int argc, char **argv)  { console_control_set_state(CONCNTL_CRUISEDOWN, 0); }
64 void concntl_cmd_cruiseoff_on(int argc, char **argv)    { console_control_set_state(CONCNTL_CRUISEOFF,  1); }
65 void concntl_cmd_cruiseoff_off(int argc, char **argv)   { console_control_set_state(CONCNTL_CRUISEOFF,  0); }
66 void concntl_cmd_automap_on(int argc, char **argv)      { console_control_set_state(CONCNTL_AUTOMAP,    1); }
67 void concntl_cmd_automap_off(int argc, char **argv)     { console_control_set_state(CONCNTL_AUTOMAP,    0); }
68 void concntl_cmd_afterburn_on(int argc, char **argv)    { console_control_set_state(CONCNTL_AFTERBURN,  1); }
69 void concntl_cmd_afterburn_off(int argc, char **argv)   { console_control_set_state(CONCNTL_AFTERBURN,  0); }
70 void concntl_cmd_cycle_on(int argc, char **argv)        { console_control_set_state(CONCNTL_CYCLE,      1); }
71 void concntl_cmd_cycle_off(int argc, char **argv)       { console_control_set_state(CONCNTL_CYCLE,      0); }
72 void concntl_cmd_cycle2_on(int argc, char **argv)       { console_control_set_state(CONCNTL_CYCLE2,     1); }
73 void concntl_cmd_cycle2_off(int argc, char **argv)      { console_control_set_state(CONCNTL_CYCLE2,     0); }
74 void concntl_cmd_headlight_on(int argc, char **argv)    { console_control_set_state(CONCNTL_HEADLIGHT,  1); }
75 void concntl_cmd_headlight_off(int argc, char **argv)   { console_control_set_state(CONCNTL_HEADLIGHT,  0); }
76 void concntl_cmd_nrgshield_on(int argc, char **argv)    { console_control_set_state(CONCNTL_NRGSHIELD,  1); }
77 void concntl_cmd_nrgshield_off(int argc, char **argv)   { console_control_set_state(CONCNTL_NRGSHIELD,  0); }
78 void concntl_cmd_togglebomb_on(int argc, char **argv)   { console_control_set_state(CONCNTL_TOGGLEBOMB, 1); }
79 void concntl_cmd_togglebomb_off(int argc, char **argv)  { console_control_set_state(CONCNTL_TOGGLEBOMB, 0); }
80
81 /* select / toggle weapons */
82 void concntl_cmd_weapon(int argc, char **argv)
83 {
84         int n;
85
86         if (argc < 2 || !stricmp(argv[1], "-h")) {
87                 con_printf(CON_NORMAL, "%s <num>\n", argv[0]);
88                 con_printf(CON_NORMAL, "    select or toggle weapon <num>\n");
89                 return;
90         }
91
92         n = atoi(argv[1]);
93         if (n == 0)
94                 n = 10;
95         if (n < 1 || n > 10)
96                 return;
97
98         do_weapon_select((n-1) % 5, (n-1) / 5);
99 }
100
101
102 // Returns the number of seconds this 'button' has been down since last call.
103 fix console_control_down_time(console_control control)
104 {
105         fix time_down, time;
106
107         if (!Console_controls[control].state) {
108                 time_down = Console_controls[control].time_held_down;
109                 Console_controls[control].time_held_down = 0;
110         } else {
111                 time = timer_get_fixed_seconds();
112                 time_down = time - Console_controls[control].time_went_down;
113                 Console_controls[control].time_went_down = time;
114         }
115         
116         return time_down;
117 }
118
119 unsigned int console_control_down_count(console_control control)
120 {
121         int n;
122
123         n = Console_controls[control].down_count;
124         Console_controls[control].down_count = 0;
125         
126         return n;
127 }
128
129 unsigned int console_control_up_count(console_control control)
130 {
131         int n;
132
133         n = Console_controls[control].up_count;
134         Console_controls[control].up_count = 0;
135
136         return n;
137 }
138
139
140 // Returns 1 if this control is currently down
141 unsigned int console_control_state(console_control control)
142 {
143         return Console_controls[control].state;
144 }
145
146
147 void console_control_set_state(console_control control, int state)
148 {
149         console_control_info *ctl = &Console_controls[control];
150
151         if (state) {
152                 ctl->down_count++;
153                 ctl->state = 1;
154                 ctl->time_went_down = timer_get_fixed_seconds();
155         } else {
156                 ctl->up_count++;
157                 ctl->state = 0;
158                 ctl->time_held_down += timer_get_fixed_seconds() - ctl->time_went_down;
159         }
160 }
161
162
163 void console_control_init(void)
164 {
165         memset(Console_controls, 0, sizeof(console_control_info) * CONCNTL_NUM_CONTROLS);
166
167         cmd_addcommand("+lookdown",     concntl_cmd_lookdown_on);
168         cmd_addcommand("-lookdown",     concntl_cmd_lookdown_off);
169         cmd_addcommand("+lookup",       concntl_cmd_lookup_on);
170         cmd_addcommand("-lookup",       concntl_cmd_lookup_off);
171         cmd_addcommand("+left",         concntl_cmd_left_on);
172         cmd_addcommand("-left",         concntl_cmd_left_off);
173         cmd_addcommand("+right",        concntl_cmd_right_on);
174         cmd_addcommand("-right",        concntl_cmd_right_off);
175         cmd_addcommand("+strafe",       concntl_cmd_strafe_on);
176         cmd_addcommand("-strafe",       concntl_cmd_strafe_off);
177         cmd_addcommand("+moveleft",     concntl_cmd_moveleft_on);
178         cmd_addcommand("-moveleft",     concntl_cmd_moveleft_off);
179         cmd_addcommand("+moveright",    concntl_cmd_moveright_on);
180         cmd_addcommand("-moveright",    concntl_cmd_moveright_off);
181         cmd_addcommand("+moveup",       concntl_cmd_moveup_on);
182         cmd_addcommand("-moveup",       concntl_cmd_moveup_off);
183         cmd_addcommand("+movedown",     concntl_cmd_movedown_on);
184         cmd_addcommand("-movedown",     concntl_cmd_movedown_off);
185         cmd_addcommand("+bank",         concntl_cmd_bank_on);
186         cmd_addcommand("-bank",         concntl_cmd_bank_off);
187         cmd_addcommand("+bankleft",     concntl_cmd_bankleft_on);
188         cmd_addcommand("-bankleft",     concntl_cmd_bankleft_off);
189         cmd_addcommand("+bankright",    concntl_cmd_bankright_on);
190         cmd_addcommand("-bankright",    concntl_cmd_bankright_off);
191         cmd_addcommand("+attack",       concntl_cmd_attack_on);
192         cmd_addcommand("-attack",       concntl_cmd_attack_off);
193         cmd_addcommand("+attack2",      concntl_cmd_attack2_on);
194         cmd_addcommand("-attack2",      concntl_cmd_attack2_off);
195         cmd_addcommand("+flare",        concntl_cmd_flare_on);
196         cmd_addcommand("-flare",        concntl_cmd_flare_off);
197         cmd_addcommand("+forward",      concntl_cmd_forward_on);
198         cmd_addcommand("-forward",      concntl_cmd_forward_off);
199         cmd_addcommand("+back",         concntl_cmd_back_on);
200         cmd_addcommand("-back",         concntl_cmd_back_off);
201         cmd_addcommand("+bomb",         concntl_cmd_bomb_on);
202         cmd_addcommand("-bomb",         concntl_cmd_bomb_off);
203         cmd_addcommand("+rearview",     concntl_cmd_rearview_on);
204         cmd_addcommand("-rearview",     concntl_cmd_rearview_off);
205         cmd_addcommand("+cruiseup",     concntl_cmd_cruiseup_on);
206         cmd_addcommand("-cruiseup",     concntl_cmd_cruiseup_off);
207         cmd_addcommand("+cruisedown",   concntl_cmd_cruisedown_on);
208         cmd_addcommand("-cruisedown",   concntl_cmd_cruisedown_off);
209         cmd_addcommand("+cruiseoff",    concntl_cmd_cruiseoff_on);
210         cmd_addcommand("-cruiseoff",    concntl_cmd_cruiseoff_off);
211         cmd_addcommand("+automap",      concntl_cmd_automap_on);
212         cmd_addcommand("-automap",      concntl_cmd_automap_off);
213         cmd_addcommand("+afterburn",    concntl_cmd_afterburn_on);
214         cmd_addcommand("-afterburn",    concntl_cmd_afterburn_off);
215         cmd_addcommand("+cycle",        concntl_cmd_cycle_on);
216         cmd_addcommand("-cycle",        concntl_cmd_cycle_off);
217         cmd_addcommand("+cycle2",       concntl_cmd_cycle2_on);
218         cmd_addcommand("-cycle2",       concntl_cmd_cycle2_off);
219         cmd_addcommand("+headlight",    concntl_cmd_headlight_on);
220         cmd_addcommand("-headlight",    concntl_cmd_headlight_off);
221         cmd_addcommand("+nrgshield",    concntl_cmd_nrgshield_on);
222         cmd_addcommand("-nrgshield",    concntl_cmd_nrgshield_off);
223         cmd_addcommand("+togglebomb",   concntl_cmd_togglebomb_on);
224         cmd_addcommand("-togglebomb",   concntl_cmd_togglebomb_off);
225
226         cmd_addcommand("weapon", concntl_cmd_weapon);
227 }