2 * $Source: /cvs/cvsroot/d2x/arch/sdl/mouse.c,v $
5 * $Date: 2001-11-14 11:02:55 $
9 * $Log: not supported by cvs2svn $
10 * Revision 1.2 2001/11/14 10:44:21 bradleyb
11 * remove cruft, fix formatting, use mouse wheel to emulate 3rd axis
13 * Revision 1.1 2001/10/24 09:25:05 bradleyb
14 * Moved input stuff to arch subdirs, as in d1x.
16 * Revision 1.3 2001/01/29 14:03:57 bradleyb
17 * Fixed build, minor fixes
32 #define MOUSE_MAX_BUTTONS 8
34 #define Z_SENSITIVITY 100
44 static struct mouseinfo {
45 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
46 int delta_x, delta_y, delta_z;
50 void d_mouse_init(void)
52 memset(&Mouse,0,sizeof(Mouse));
55 void mouse_button_handler(SDL_MouseButtonEvent *mbe)
57 // to bad, SDL buttons use a different mapping as descent expects,
58 // this is at least true and tested for the first three buttons
59 int button_remap[11] = {
73 int button = button_remap[mbe->button - 1]; // -1 since SDL seems to start counting at 1
75 if (mbe->state == SDL_PRESSED) {
76 Mouse.buttons[button].pressed = 1;
77 Mouse.buttons[button].time_went_down = timer_get_fixed_seconds();
78 Mouse.buttons[button].num_downs++;
80 if (button == MB_Z_UP) {
81 Mouse.delta_z += Z_SENSITIVITY;
82 Mouse.z += Z_SENSITIVITY;
83 } else if (button == MB_Z_DOWN) {
84 Mouse.delta_z -= Z_SENSITIVITY;
85 Mouse.z -= Z_SENSITIVITY;
88 Mouse.buttons[button].pressed = 0;
89 Mouse.buttons[button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[button].time_went_down;
90 Mouse.buttons[button].num_ups++;
94 void mouse_motion_handler(SDL_MouseMotionEvent *mme)
96 Mouse.delta_x += mme->xrel;
97 Mouse.delta_y += mme->yrel;
102 void mouse_flush() // clears all mice events...
109 current_time = timer_get_fixed_seconds();
110 for (i=0; i<MOUSE_MAX_BUTTONS; i++) {
111 Mouse.buttons[i].pressed=0;
112 Mouse.buttons[i].time_went_down=current_time;
113 Mouse.buttons[i].time_held_down=0;
114 Mouse.buttons[i].num_ups=0;
115 Mouse.buttons[i].num_downs=0;
125 //========================================================================
126 void mouse_get_pos( int *x, int *y )
133 void mouse_get_delta( int *dx, int *dy )
142 void mouse_get_pos_z( int *x, int *y, int *z )
150 void mouse_get_delta_z( int *dx, int *dy, int *dz )
169 for (i=0; i<MOUSE_MAX_BUTTONS; i++ ) {
170 if (Mouse.buttons[i].pressed)
178 void mouse_get_cyberman_pos( int *x, int *y )
182 // Returns how long this button has been down since last call.
183 fix mouse_button_down_time(int button)
189 if (!Mouse.buttons[button].pressed) {
190 time_down = Mouse.buttons[button].time_held_down;
191 Mouse.buttons[button].time_held_down = 0;
193 time = timer_get_fixed_seconds();
194 time_down = time - Mouse.buttons[button].time_held_down;
195 Mouse.buttons[button].time_held_down = time;
200 // Returns how many times this button has went down since last call
201 int mouse_button_down_count(int button)
207 count = Mouse.buttons[button].num_downs;
208 Mouse.buttons[button].num_downs = 0;
213 // Returns 1 if this button is currently down
214 int mouse_button_state(int button)
217 return Mouse.buttons[button].pressed;