// change in mouse position since last call void mouse_eval_deltas() { static int old_x = 0; static int old_y = 0; int tmp_x, tmp_y, cx, cy; Mouse_dx = Mouse_dy = Mouse_dz = 0; if (!mouse_inited) return; #ifdef WIN32 if (Mouse_mode == MOUSE_MODE_DI) { mouse_eval_deltas_di(); return; } #endif cx = gr_screen.max_w / 2; cy = gr_screen.max_h / 2; ENTER_CRITICAL_SECTION( mouse_lock ); POINT pnt; getWindowMousePos(&pnt); tmp_x = pnt.x; tmp_y = pnt.y; Mouse_dx = tmp_x - old_x; Mouse_dy = tmp_y - old_y; Mouse_dz = 0; // Speeds up the menu mouse on higher resolutions. The check for a // visible mouse should eliminate any possible gameplay changes. if ( mouse_is_visible() ) { gr_resize_screen_pos( &Mouse_dx, &Mouse_dy ); } if (Keep_mouse_centered && Mouse_hidden) { if (Mouse_dx || Mouse_dy) mouse_force_pos(cx, cy); old_x = cx; old_y = cy; } else { old_x = tmp_x; old_y = tmp_y; } LEAVE_CRITICAL_SECTION( mouse_lock ); //WMC - For On Mouse Moved trigger if(Mouse_dx != 0 || Mouse_dy != 0) { Script_system.RunCondition(CHA_MOUSEMOVED); } }
int mouse_get_pos(int *xpos, int *ypos) { int flags; if (Mouse_mode == MOUSE_MODE_DI) { if (xpos) *xpos = Mouse_x; if (ypos) *ypos = Mouse_y; return mouse_flags; } if (!mouse_inited) { *xpos = *ypos = 0; return 0; } POINT pnt; getWindowMousePos(&pnt); // EnterCriticalSection(&mouse_lock); flags = mouse_flags; Mouse_x = pnt.x; Mouse_y = pnt.y; // LeaveCriticalSection(&mouse_lock); if (Mouse_x < 0){ Mouse_x = 0; } if (Mouse_y < 0){ Mouse_y = 0; } if (Mouse_x >= gr_screen.max_w){ Mouse_x = gr_screen.max_w - 1; } if (Mouse_y >= gr_screen.max_h){ Mouse_y = gr_screen.max_h - 1; } if (xpos){ *xpos = Mouse_x; } if (ypos){ *ypos = Mouse_y; } return flags; }
void mouse_get_real_pos(int *mx, int *my) { if (Mouse_mode == MOUSE_MODE_DI) { *mx = Mouse_x; *my = Mouse_y; return; } POINT pnt; getWindowMousePos(&pnt); *mx = pnt.x; *my = pnt.y; }
// change in mouse position since last call void mouse_eval_deltas() { static int old_x = 0; static int old_y = 0; int tmp_x, tmp_y, cx, cy; Mouse_dx = Mouse_dy = Mouse_dz = 0; if (!mouse_inited) return; #ifdef USE_DIRECTINPUT if (Mouse_mode == MOUSE_MODE_DI) { mouse_eval_deltas_di(); return; } #endif cx = gr_screen.max_w / 2; cy = gr_screen.max_h / 2; ENTER_CRITICAL_SECTION(&mouse_lock); POINT pnt; getWindowMousePos(&pnt); tmp_x = pnt.x; tmp_y = pnt.y; Mouse_dx = tmp_x - old_x; Mouse_dy = tmp_y - old_y; Mouse_dz = 0; if (Keep_mouse_centered && Mouse_hidden) { if (Mouse_dx || Mouse_dy) mouse_force_pos(cx, cy); old_x = cx; old_y = cy; } else { old_x = tmp_x; old_y = tmp_y; } LEAVE_CRITICAL_SECTION(&mouse_lock); }