18 #define MOUSE_MAX_BUTTONS 8
20 #define Z_SENSITIVITY 100
30 static struct mouseinfo {
31 struct mousebutton buttons[MOUSE_MAX_BUTTONS];
32 int delta_x, delta_y, delta_z;
36 void d_mouse_init(void)
38 memset(&Mouse,0,sizeof(Mouse));
41 void mouse_button_handler(SDL_MouseButtonEvent *mbe)
43 // to bad, SDL buttons use a different mapping as descent expects,
44 // this is at least true and tested for the first three buttons
45 int button_remap[11] = {
59 int button = button_remap[mbe->button - 1]; // -1 since SDL seems to start counting at 1
61 if (mbe->state == SDL_PRESSED) {
62 Mouse.buttons[button].pressed = 1;
63 Mouse.buttons[button].time_went_down = timer_get_fixed_seconds();
64 Mouse.buttons[button].num_downs++;
66 if (button == MB_Z_UP) {
67 Mouse.delta_z += Z_SENSITIVITY;
68 Mouse.z += Z_SENSITIVITY;
69 } else if (button == MB_Z_DOWN) {
70 Mouse.delta_z -= Z_SENSITIVITY;
71 Mouse.z -= Z_SENSITIVITY;
74 Mouse.buttons[button].pressed = 0;
75 Mouse.buttons[button].time_held_down += timer_get_fixed_seconds() - Mouse.buttons[button].time_went_down;
76 Mouse.buttons[button].num_ups++;
80 void mouse_motion_handler(SDL_MouseMotionEvent *mme)
82 Mouse.delta_x += mme->xrel;
83 Mouse.delta_y += mme->yrel;
88 void mouse_flush() // clears all mice events...
95 current_time = timer_get_fixed_seconds();
96 for (i=0; i<MOUSE_MAX_BUTTONS; i++) {
97 Mouse.buttons[i].pressed=0;
98 Mouse.buttons[i].time_went_down=current_time;
99 Mouse.buttons[i].time_held_down=0;
100 Mouse.buttons[i].num_ups=0;
101 Mouse.buttons[i].num_downs=0;
111 //========================================================================
112 void mouse_get_pos( int *x, int *y )
119 void mouse_get_delta( int *dx, int *dy )
128 void mouse_get_pos_z( int *x, int *y, int *z )
136 void mouse_get_delta_z( int *dx, int *dy, int *dz )
155 for (i=0; i<MOUSE_MAX_BUTTONS; i++ ) {
156 if (Mouse.buttons[i].pressed)
164 void mouse_get_cyberman_pos( int *x, int *y )
168 // Returns how long this button has been down since last call.
169 fix mouse_button_down_time(int button)
175 if (!Mouse.buttons[button].pressed) {
176 time_down = Mouse.buttons[button].time_held_down;
177 Mouse.buttons[button].time_held_down = 0;
179 time = timer_get_fixed_seconds();
180 time_down = time - Mouse.buttons[button].time_held_down;
181 Mouse.buttons[button].time_held_down = time;
186 // Returns how many times this button has went down since last call
187 int mouse_button_down_count(int button)
193 count = Mouse.buttons[button].num_downs;
194 Mouse.buttons[button].num_downs = 0;
199 // Returns 1 if this button is currently down
200 int mouse_button_state(int button)
203 return Mouse.buttons[button].pressed;