|
|
1.1 ! root 1: // in_next.m ! 2: ! 3: #import <AppKit/AppKit.h> ! 4: #import <drivers/event_status_driver.h> ! 5: #include "../client/client.h" ! 6: ! 7: float mousex, mousey; ! 8: ! 9: float mouse_center_x = 160; ! 10: float mouse_center_y = 100; ! 11: ! 12: void PSsetmouse (float x, float y); ! 13: void PSshowcursor (void); ! 14: void PShidecursor (void); ! 15: void PScurrentmouse (int win, float *x, float *y); ! 16: ! 17: extern NSView *vid_view_i; ! 18: extern NSWindow *vid_window_i; ! 19: ! 20: qboolean mlooking; ! 21: qboolean mouseinitialized; ! 22: int mouse_buttons; ! 23: int mouse_oldbuttonstate; ! 24: int mouseactive; ! 25: int mousereset; ! 26: int mx_accum, my_accum; ! 27: int window_center_x, window_center_y; ! 28: int old_mouse_x, old_mouse_y; ! 29: ! 30: cvar_t in_mouse = {"in_mouse", "0", CVAR_ARCHIVE}; ! 31: cvar_t m_filter = {"m_filter", "0", CVAR_ARCHIVE}; ! 32: cvar_t freelook = {"in_freelook", "0", CVAR_ARCHIVE}; ! 33: ! 34: ! 35: /* ! 36: =========== ! 37: IN_ActivateMouse ! 38: ! 39: Called when the window gains focus or changes in some way ! 40: =========== ! 41: */ ! 42: void IN_ActivateMouse (void) ! 43: { ! 44: NSRect r; ! 45: ! 46: if (!mouseinitialized) ! 47: return; ! 48: if (!in_mouse.value) ! 49: return; ! 50: ! 51: r = [vid_window_i frame]; ! 52: window_center_x = r.size.width / 2; ! 53: window_center_y = r.size.height / 2; ! 54: ! 55: if (!mouseactive) ! 56: PShidecursor (); ! 57: ! 58: mouseactive = true; ! 59: mousereset = true; ! 60: } ! 61: ! 62: ! 63: /* ! 64: =========== ! 65: IN_DeactivateMouse ! 66: ! 67: Called when the window loses focus ! 68: =========== ! 69: */ ! 70: void IN_DeactivateMouse (void) ! 71: { ! 72: if (!mouseinitialized) ! 73: return; ! 74: ! 75: if (mouseactive) ! 76: PSshowcursor (); ! 77: ! 78: mouseactive = false; ! 79: } ! 80: ! 81: ! 82: /* ! 83: =========== ! 84: IN_StartupMouse ! 85: =========== ! 86: */ ! 87: void IN_StartupMouse (void) ! 88: { ! 89: if ( COM_CheckParm ("-nomouse") ) ! 90: return; ! 91: ! 92: mouseinitialized = true; ! 93: ! 94: mouse_buttons = 3; ! 95: ! 96: IN_ActivateMouse (); ! 97: } ! 98: ! 99: /* ! 100: =========== ! 101: IN_MouseEvent ! 102: =========== ! 103: */ ! 104: void IN_MouseEvent (int mstate) ! 105: { ! 106: int i; ! 107: ! 108: if (!mouseactive) ! 109: return; ! 110: ! 111: // perform button actions ! 112: for (i=0 ; i<mouse_buttons ; i++) ! 113: { ! 114: if ( (mstate & (1<<i)) && ! 115: !(mouse_oldbuttonstate & (1<<i)) ) ! 116: { ! 117: Key_Event (K_MOUSE1 + i, true); ! 118: } ! 119: ! 120: if ( !(mstate & (1<<i)) && ! 121: (mouse_oldbuttonstate & (1<<i)) ) ! 122: { ! 123: Key_Event (K_MOUSE1 + i, false); ! 124: } ! 125: } ! 126: ! 127: mouse_oldbuttonstate = mstate; ! 128: } ! 129: ! 130: ! 131: ! 132: /* ! 133: =========== ! 134: IN_Accumulate ! 135: =========== ! 136: */ ! 137: void IN_Accumulate (void) ! 138: { ! 139: int dx, dy; ! 140: static int old_x, old_y; ! 141: ! 142: if (!mouseinitialized) ! 143: return; ! 144: ! 145: if (in_mouse.modified) ! 146: { ! 147: in_mouse.modified = false; ! 148: IN_DeactivateMouse (); ! 149: IN_ActivateMouse (); ! 150: } ! 151: ! 152: if (!mouseactive) ! 153: return; ! 154: ! 155: // [vid_view_i lockFocus]; ! 156: ! 157: if (mousereset) ! 158: { // we haven't centered cursor yet ! 159: mousereset = false; ! 160: } ! 161: else ! 162: { ! 163: NSPoint p; ! 164: ! 165: PScurrentmouse ([vid_window_i windowNumber], &mousex, &mousey); ! 166: ! 167: p.x = mousex; ! 168: p.y = mousey; ! 169: p = [vid_view_i convertPoint:p fromView: nil]; ! 170: ! 171: mousex = p.x; ! 172: mousey = p.y; ! 173: ! 174: dx = mousex - old_x; ! 175: dy = old_y - mousey; ! 176: ! 177: if (!dx && !dy) ! 178: return; ! 179: mx_accum += dx; ! 180: my_accum += dy; ! 181: } ! 182: ! 183: // force the mouse to the center, so there's room to move ! 184: PSsetmouse (window_center_x, window_center_y); ! 185: PScurrentmouse ([vid_window_i windowNumber], &mousex, &mousey); ! 186: // PSsetmouse (window_center_x, window_center_y); ! 187: old_x = window_center_x; ! 188: old_y = window_center_y; ! 189: ! 190: // [vid_view_i unlockFocus]; ! 191: } ! 192: ! 193: ! 194: /* ! 195: =========== ! 196: IN_MouseMove ! 197: =========== ! 198: */ ! 199: void IN_MouseMove (usercmd_t *cmd) ! 200: { ! 201: int mx, my; ! 202: int mouse_x, mouse_y; ! 203: ! 204: IN_Accumulate (); ! 205: ! 206: mx = mx_accum; ! 207: my = my_accum; ! 208: ! 209: mx_accum = 0; ! 210: my_accum = 0; ! 211: ! 212: if (m_filter.value) ! 213: { ! 214: mouse_x = (mx + old_mouse_x) * 0.5; ! 215: mouse_y = (my + old_mouse_y) * 0.5; ! 216: } ! 217: else ! 218: { ! 219: mouse_x = mx; ! 220: mouse_y = my; ! 221: } ! 222: ! 223: old_mouse_x = mx; ! 224: old_mouse_y = my; ! 225: ! 226: if (!mx && !my) ! 227: return; ! 228: ! 229: if (!mouseactive) ! 230: return; ! 231: ! 232: mouse_x *= sensitivity.value; ! 233: mouse_y *= sensitivity.value; ! 234: ! 235: // add mouse X/Y movement to cmd ! 236: if ( (in_strafe.state & 1) || (lookstrafe.value && mlooking )) ! 237: cmd->sidemove += m_side.value * mouse_x; ! 238: else ! 239: cl.viewangles[YAW] -= m_yaw.value * mouse_x; ! 240: ! 241: if ( (mlooking || freelook.value) && !(in_strafe.state & 1)) ! 242: { ! 243: cl.viewangles[PITCH] += m_pitch.value * mouse_y; ! 244: if (cl.viewangles[PITCH] > 80) ! 245: cl.viewangles[PITCH] = 80; ! 246: if (cl.viewangles[PITCH] < -70) ! 247: cl.viewangles[PITCH] = -70; ! 248: } ! 249: else ! 250: { ! 251: cmd->forwardmove -= m_forward.value * mouse_y; ! 252: } ! 253: ! 254: } ! 255: ! 256: void IN_ShowMouse (void) ! 257: { ! 258: PSshowcursor (); ! 259: } ! 260: ! 261: void IN_HideMouse (void) ! 262: { ! 263: PShidecursor (); ! 264: } ! 265: ! 266: NXEventHandle eventhandle; ! 267: NXMouseScaling oldscaling, newscaling; ! 268: NXMouseButton oldbutton; ! 269: ! 270: /* ! 271: ============= ! 272: IN_Init ! 273: ============= ! 274: */ ! 275: void IN_Init (void) ! 276: { ! 277: Cvar_RegisterVariable (&in_mouse); ! 278: Cvar_RegisterVariable (&m_filter); ! 279: Cvar_RegisterVariable (&freelook); ! 280: ! 281: Cmd_AddCommand ("showmouse", IN_ShowMouse); ! 282: Cmd_AddCommand ("hidemouse", IN_HideMouse); ! 283: ! 284: IN_StartupMouse (); ! 285: ! 286: // open the event status driver ! 287: eventhandle = NXOpenEventStatus(); ! 288: NXGetMouseScaling (eventhandle, &oldscaling); ! 289: NXSetMouseScaling (eventhandle, &newscaling); ! 290: oldbutton = NXMouseButtonEnabled (eventhandle); ! 291: NXEnableMouseButton (eventhandle, 2); ! 292: } ! 293: ! 294: /* ! 295: ============= ! 296: IN_Shutdown ! 297: ============= ! 298: */ ! 299: void IN_Shutdown (void) ! 300: { ! 301: IN_DeactivateMouse (); ! 302: ! 303: // put mouse scaling back the way it was ! 304: NXSetMouseScaling (eventhandle, &oldscaling); ! 305: NXEnableMouseButton (eventhandle, oldbutton); ! 306: NXCloseEventStatus (eventhandle); ! 307: } ! 308: ! 309: void IN_Move (usercmd_t *cmd) ! 310: { ! 311: IN_MouseMove (cmd); ! 312: } ! 313: ! 314: void IN_Commands (void) ! 315: { ! 316: } ! 317: ! 318: ! 319: /* ! 320: ========================================================================= ! 321: ! 322: VIEW CENTERING ! 323: ! 324: ========================================================================= ! 325: */ ! 326: ! 327: void V_StopPitchDrift (void) ! 328: { ! 329: cl.laststop = cl.time; ! 330: cl.nodrift = true; ! 331: cl.pitchvel = 0; ! 332: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.