📄 g_input.c
字号:
// Emacs style mode select -*- C++ -*-//-----------------------------------------------------------------------------//// $Id: g_input.c,v 1.10 2001/03/30 17:12:49 bpereira Exp $//// Copyright (C) 1998-2000 by DooM Legacy Team.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.////// $Log: g_input.c,v $// Revision 1.10 2001/03/30 17:12:49 bpereira// no message//// Revision 1.9 2001/02/24 13:35:19 bpereira// no message//// Revision 1.8 2001/02/10 12:27:13 bpereira// no message//// Revision 1.7 2001/01/25 22:15:42 bpereira// added heretic support//// Revision 1.6 2000/11/26 00:46:31 hurdler// small bug fixes//// Revision 1.5 2000/10/04 17:03:57 hurdler// This is the formule I propose for mouse sensitivity//// Revision 1.4 2000/04/16 18:38:07 bpereira// no message//// Revision 1.3 2000/04/04 00:32:45 stroggonmeth// Initial Boom compatability plus few misc changes all around.//// Revision 1.2 2000/02/27 00:42:10 hurdler// fix CR+LF problem//// Revision 1.1.1.1 2000/02/22 20:32:32 hurdler// Initial import into CVS (v1.29 pr3)////// DESCRIPTION:// handle mouse/keyboard/joystick inputs,// maps inputs to game controls (forward,use,open...)////-----------------------------------------------------------------------------#include "doomdef.h"#include "doomstat.h"#include "g_input.h"#include "keys.h"#include "hu_stuff.h" //need HUFONT start & end#include "keys.h"#include "d_net.h"#include "console.h"CV_PossibleValue_t mousesens_cons_t[]={{1,"MIN"},{MAXMOUSESENSITIVITY,"MAXCURSOR"},{MAXINT,"MAX"},{0,NULL}};CV_PossibleValue_t onecontrolperkey_cons_t[]={{1,"One"},{2,"Several"},{0,NULL}};// mouse values are used onceconsvar_t cv_mousesens = {"mousesens","10",CV_SAVE,mousesens_cons_t};consvar_t cv_mlooksens = {"mlooksens","10",CV_SAVE,mousesens_cons_t};consvar_t cv_mousesens2 = {"mousesens2","10",CV_SAVE,mousesens_cons_t};consvar_t cv_mlooksens2 = {"mlooksens2","10",CV_SAVE,mousesens_cons_t};consvar_t cv_allowjump = {"allowjump","1",CV_NETVAR,CV_YesNo};consvar_t cv_allowautoaim = {"allowautoaim","1",CV_NETVAR,CV_YesNo};consvar_t cv_controlperkey = {"controlperkey","1",CV_SAVE,onecontrolperkey_cons_t};//SoM: 3/28/2000: Working rocket jumping.consvar_t cv_allowrocketjump = {"allowrocketjump","0",CV_NETVAR,CV_YesNo};int mousex;int mousey;int mlooky; //like mousey but with a custom sensitivity //for mlookint mouse2x;int mouse2y;int mlook2y;// joystick values are repeatedint joyxmove;int joyymove;// current state of the keys : true if pushedbyte gamekeydown[NUMINPUTS];// two key codes (or virtual key) per game controlint gamecontrol[num_gamecontrols][2];int gamecontrolbis[num_gamecontrols][2]; // secondary splitscreen playertypedef struct { int time; int state; int clicks;} dclick_t;static dclick_t mousedclicks[MOUSEBUTTONS];static dclick_t joydclicks[JOYBUTTONS];// protosstatic boolean G_CheckDoubleClick (int state, dclick_t *dt);//// Remaps the inputs to game controls.//// A game control can be triggered by one or more keys/buttons.//// Each key/mousebutton/joybutton triggers ONLY ONE game control.////void G_MapEventsToControls (event_t *ev){ int i,flag; switch (ev->type) { case ev_keydown: if (ev->data1 <NUMINPUTS) gamekeydown[ev->data1] = 1; break; case ev_keyup: if (ev->data1 <NUMINPUTS) gamekeydown[ev->data1] = 0; break; case ev_mouse: // buttons hare virtual keys mousex = ev->data2*((cv_mousesens.value*cv_mousesens.value)/110.0f + 0.1); mousey = ev->data3*((cv_mousesens.value*cv_mousesens.value)/110.0f + 0.1); //added:10-02-98: // for now I use the mlook sensitivity just for mlook, // instead of having a general mouse y sensitivity. mlooky = ev->data3*((cv_mlooksens.value*cv_mlooksens.value)/110.0f + 0.1); break; case ev_joystick: // buttons are virtual keys joyxmove = ev->data2; joyymove = ev->data3; break; case ev_mouse2: // buttons hare virtual keys mouse2x = ev->data2*((cv_mousesens2.value*cv_mousesens2.value)/110.0f + 0.1); mouse2y = ev->data3*((cv_mousesens2.value*cv_mousesens2.value)/110.0f + 0.1); //added:10-02-98: // for now I use the mlook sensitivity just for mlook, // instead of having a general mouse y sensitivity. mlook2y = ev->data3*((cv_mlooksens.value*cv_mlooksens.value)/110.0f + 0.1); break; default: break; } // ALWAYS check for mouse & joystick double-clicks // even if no mouse event for (i=0;i<MOUSEBUTTONS;i++) { flag = G_CheckDoubleClick (gamekeydown[KEY_MOUSE1+i], &mousedclicks[i]); gamekeydown[KEY_DBLMOUSE1+i] = flag; } for (i=0;i<JOYBUTTONS;i++) { flag = G_CheckDoubleClick (gamekeydown[KEY_JOY1+i], &joydclicks[i]); gamekeydown[KEY_DBLJOY1+i] = flag; }}//// General double-click detection routine for any kind of input.//static boolean G_CheckDoubleClick (int state, dclick_t *dt){ if (state != dt->state && dt->time > 1 ) { dt->state = state; if (state) dt->clicks++; if (dt->clicks == 2) { dt->clicks = 0; return true; } else dt->time = 0; } else { dt->time ++; if (dt->time > 20) { dt->clicks = 0; dt->state = 0; } } return false;}typedef struct { int keynum; char name[15];} keyname_t;static keyname_t keynames[] = { {KEY_SPACE ,"SPACE"}, {KEY_CAPSLOCK ,"CAPS LOCK"}, {KEY_ENTER ,"ENTER"}, {KEY_TAB ,"TAB"}, {KEY_ESCAPE ,"ESCAPE"}, {KEY_BACKSPACE ,"BACKSPACE"}, {KEY_NUMLOCK ,"NUMLOCK"}, {KEY_SCROLLLOCK,"SCROLLLOCK"}, // bill gates keys {KEY_LEFTWIN ,"LEFTWIN"}, {KEY_RIGHTWIN ,"RIGHTWIN"}, {KEY_MENU ,"MENU"}, // shift,ctrl,alt are not distinguished between left & right {KEY_SHIFT ,"SHIFT"}, {KEY_CTRL ,"CTRL"}, {KEY_ALT ,"ALT"}, // keypad keys {KEY_KPADSLASH,"KEYPAD /"}, {KEY_KEYPAD7, "KEYPAD 7"}, {KEY_KEYPAD8, "KEYPAD 8"}, {KEY_KEYPAD9, "KEYPAD 9"}, {KEY_MINUSPAD,"KEYPAD -"}, {KEY_KEYPAD4, "KEYPAD 4"}, {KEY_KEYPAD5, "KEYPAD 5"}, {KEY_KEYPAD6, "KEYPAD 6"}, {KEY_PLUSPAD, "KEYPAD +"}, {KEY_KEYPAD1, "KEYPAD 1"}, {KEY_KEYPAD2, "KEYPAD 2"}, {KEY_KEYPAD3, "KEYPAD 3"}, {KEY_KEYPAD0, "KEYPAD 0"}, {KEY_KPADDEL, "KEYPAD ."}, // extended keys (not keypad) {KEY_HOME, "HOME"}, {KEY_UPARROW, "UP ARROW"}, {KEY_PGUP, "PGUP"}, {KEY_LEFTARROW ,"LEFT ARROW"}, {KEY_RIGHTARROW,"RIGHT ARROW"}, {KEY_END, "END"}, {KEY_DOWNARROW, "DOWN ARROW"}, {KEY_PGDN, "PGDN"}, {KEY_INS, "INS"}, {KEY_DEL, "DEL"}, // other keys {KEY_F1, "F1"}, {KEY_F2, "F2"}, {KEY_F3, "F3"}, {KEY_F4, "F4"}, {KEY_F5, "F5"}, {KEY_F6, "F6"}, {KEY_F7, "F7"}, {KEY_F8, "F8"}, {KEY_F9, "F9"}, {KEY_F10,"F10"}, {KEY_F11,"F11"}, {KEY_F12,"F12"}, // virtual keys for mouse buttons and joystick buttons {KEY_MOUSE1, "MOUSE1"}, {KEY_MOUSE1+1,"MOUSE2"}, {KEY_MOUSE1+2,"MOUSE3"}, {KEY_MOUSE1+3,"MOUSE4"},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -