⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 g_input.c

📁 The source code of Doom legacy for windows
💻 C
📖 第 1 页 / 共 2 页
字号:
// 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 + -