Merged joystick code. Great deal of cleanup in input, reduced bizarre overuse of protocol.h...

Maimed joy_win.c, very likely to get odd behavior there, even if it compiles.
This commit is contained in:
Ragnvald Maartmann-Moe IV 2001-04-11 07:57:08 +00:00
parent 5cd24de097
commit f789b61c56
38 changed files with 282 additions and 775 deletions

View file

@ -1440,6 +1440,8 @@ AC_OUTPUT(
libs/audio/targets/Makefile libs/audio/targets/Makefile
libs/gamecode/Makefile libs/gamecode/Makefile
libs/util/Makefile libs/util/Makefile
libs/video/Makefile
libs/video/targets/Makefile
qw/Makefile qw/Makefile
qw/quakeforge.lsm qw/quakeforge.lsm

View file

@ -29,10 +29,13 @@
#ifndef _INPUT_H #ifndef _INPUT_H
#define _INPUT_H #define _INPUT_H
#include "client.h"
#include "protocol.h"
#include "QF/cvar.h" #include "QF/cvar.h"
struct {
vec3_t angles;
vec3_t position;
} viewdelta;
#define freelook (in_mlook.state&1 || cl_freelook->int_val) #define freelook (in_mlook.state&1 || cl_freelook->int_val)
void IN_Init (void); void IN_Init (void);
@ -46,7 +49,7 @@ void IN_Commands (void);
void IN_SendKeyEvents (void); void IN_SendKeyEvents (void);
// Perform Key_Event () callbacks until the input que is empty // Perform Key_Event () callbacks until the input que is empty
void IN_Move (usercmd_t *cmd); void IN_Move (void); // FIXME: was cmduser_t?
// add additional movement on top of the keyboard move cmd // add additional movement on top of the keyboard move cmd
void IN_ModeChanged (void); void IN_ModeChanged (void);

View file

@ -53,14 +53,14 @@ extern qboolean joy_active; // Joystick in use?
void JOY_Command (void); void JOY_Command (void);
/* /*
JOY_Move (usercmd_t *) JOY_Move (usercmd_t *) // FIXME: Not anymore!
Use this function to process joystick movements to move the player around. Use this function to process joystick movements to move the player around.
You should exit this function immediately if either joy_active or You should exit this function immediately if either joy_active or
joy_enable->int_val are zero. joy_enable->int_val are zero.
*/ */
void JOY_Move (usercmd_t *); void JOY_Move (void);
/* /*
JOY_Init () JOY_Init ()

View file

@ -28,7 +28,7 @@
#ifndef _IN_WIN_H #ifndef _IN_WIN_H
#define _IN_WIN_H #define _IN_WIN_H
#include "protocol.h" #include "protocol.h" // FIXME: Do away with this.
extern qboolean mouseactive; extern qboolean mouseactive;
extern float mouse_x, mouse_y; extern float mouse_x, mouse_y;
@ -45,11 +45,9 @@ extern void IN_Init (void);
extern void IN_Shutdown (void); extern void IN_Shutdown (void);
extern void IN_MouseEvent (int mstate); extern void IN_MouseEvent (int mstate);
extern void IN_MouseMove (usercmd_t *cmd); extern void IN_MouseMove (usercmd_t *cmd);
extern void IN_Move (usercmd_t *cmd); extern void IN_Move (void);
extern void IN_Accumulate (void); extern void IN_Accumulate (void);
extern void IN_ClearStates (void); extern void IN_ClearStates (void);
extern void IN_Commands (void); extern void IN_Commands (void);
#endif // _IN_WIN_H #endif // _IN_WIN_H

View file

@ -1,4 +1,4 @@
SUBDIRS= audio gamecode util SUBDIRS= audio gamecode util video
clean-local: clean-local:
rm -f *.a rm -f *.a

3
libs/video/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
.vimrc
Makefile.in
Makefile

4
libs/video/Makefile.am Normal file
View file

@ -0,0 +1,4 @@
SUBDIRS= targets
clean-local:
rm -f *.a

3
libs/video/targets/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
.vimrc
Makefile.in
Makefile

View file

@ -0,0 +1,16 @@
lib_LTLIBRARIES = libQFjs.la
libQFjs_la_LDFLAGS = -version-info 1:0:0 $(CD_LIBS)
if JOYTYPE_LINUX
libQFjs_la_SOURCES= joy_linux.c
endif
if JOYTYPE_WIN32
libQFjs_la_SOURCES= joy_win.c
endif
if JOYTYPE_NULL
libQFjs_la_SOURCES= joy_null.c
endif
libQFjs_la_CFLAGS= $(JOY_CFLAGS)
LIBLIST = libQFjs.la @LIBRARY_SEARCH_PATH@

View file

@ -37,11 +37,10 @@
#include "QF/compat.h" #include "QF/compat.h"
#include "QF/console.h" #include "QF/console.h"
#include "client.h"
#include "QF/cvar.h" #include "QF/cvar.h"
#include "QF/input.h"
#include "QF/keys.h" #include "QF/keys.h"
#include "protocol.h" #include "QF/mathlib.h"
#include "view.h"
#define JOY_MAX_AXES 6 #define JOY_MAX_AXES 6
#define JOY_MAX_BUTTONS 16 #define JOY_MAX_BUTTONS 16
@ -119,44 +118,41 @@ JOY_Command (void)
} }
void void
JOY_Move (usercmd_t *cmd) JOY_Move (void)
{ {
int i; int i;
if (!joy_active || !joy_enable->int_val) if (!joy_active || !joy_enable->int_val)
return; return;
Cvar_SetValue (joy_sensitivity, bound (1, joy_sensitivity->value, 25)); Cvar_SetValue (joy_sensitivity, max (0.01, joy_sensitivity->value));
for (i = 0; i < JOY_MAX_AXES; i++) { for (i = 0; i < JOY_MAX_AXES; i++) {
switch (joy_axes[i].axis->int_val) { switch (joy_axes[i].axis->int_val) {
case 1: case 1:
cl.viewangles[YAW] -= viewdelta.angles[YAW] -=
m_yaw->value * (float) (joy_axes[i].current / (float) (joy_axes[i].current /
(201 - (201 -
(joy_sensitivity->value * 4))); (joy_sensitivity->value * 4)));
break; break;
case 2: case 2:
cmd->forwardmove -= viewdelta.position[2] -=
m_forward->value * (float) (joy_axes[i].current / (float) (joy_axes[i].current /
(201 - (201 -
(joy_sensitivity->value * 4))); (joy_sensitivity->value * 4)));
break; break;
case 3: case 3:
cmd->sidemove += viewdelta.position[0] +=
m_side->value * (float) (joy_axes[i].current / (float) (joy_axes[i].current /
(201 - (201 -
(joy_sensitivity->value * 4))); (joy_sensitivity->value * 4)));
break; break;
case 4: case 4:
if (joy_axes[i].current) { if (joy_axes[i].current) {
V_StopPitchDrift (); viewdelta.angles[PITCH] -=
cl.viewangles[PITCH] -= (float) (joy_axes[i].current /
m_pitch->value * (float) (joy_axes[i].current / (201 -
(201 - (joy_sensitivity->value *
(joy_sensitivity->value * 4)));
4)));
cl.viewangles[PITCH] =
bound (-70, cl.viewangles[PITCH], 80);
} }
break; break;
} }
@ -199,19 +195,19 @@ JOY_Init_Cvars (void)
int i; int i;
joy_device = joy_device =
Cvar_Get ("joy_device", "/dev/js0", CVAR_NONE | CVAR_ROM, NULL, Cvar_Get ("joy_device", "/dev/js0", CVAR_NONE | CVAR_ROM, 0,
"Joystick device"); "Joystick device");
joy_enable = joy_enable =
Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, NULL, Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, 0,
"Joystick enable flag"); "Joystick enable flag");
joy_sensitivity = joy_sensitivity =
Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, NULL, Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, 0,
"Joystick sensitivity"); "Joystick sensitivity");
for (i = 0; i < JOY_MAX_AXES; i++) { for (i = 0; i < JOY_MAX_AXES; i++) {
joy_axes[i].axis = Cvar_Get (joy_axes[i].var.name, joy_axes[i].axis = Cvar_Get (joy_axes[i].var.name,
joy_axes[i].var.string, joy_axes[i].var.string,
CVAR_ARCHIVE, NULL, "Set joystick axes"); CVAR_ARCHIVE, 0, "Set joystick axes");
} }
} }

View file

@ -32,7 +32,6 @@
#include "QF/console.h" #include "QF/console.h"
#include "QF/cvar.h" #include "QF/cvar.h"
#include "protocol.h"
#include "QF/qtypes.h" #include "QF/qtypes.h"
// Joystick variables and structures // Joystick variables and structures
@ -49,7 +48,7 @@ JOY_Command (void)
} }
void void
JOY_Move (usercmd_t *cmd) JOY_Move (void)
{ {
} }
@ -63,13 +62,13 @@ void
JOY_Init_Cvars (void) JOY_Init_Cvars (void)
{ {
joy_device = joy_device =
Cvar_Get ("joy_device", "none", CVAR_NONE | CVAR_ROM, NULL, Cvar_Get ("joy_device", "none", CVAR_NONE | CVAR_ROM, 0,
"Joystick device"); "Joystick device");
joy_enable = joy_enable =
Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, NULL, Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, 0,
"Joystick enable flag"); "Joystick enable flag");
joy_sensitivity = joy_sensitivity =
Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, NULL, Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, 0,
"Joystick sensitivity"); "Joystick sensitivity");
} }

View file

@ -40,8 +40,6 @@
#include <dinput.h> #include <dinput.h>
#undef byte #undef byte
#include "cl_input.h"
#include "client.h"
#include "QF/cmd.h" #include "QF/cmd.h"
#include "QF/compat.h" #include "QF/compat.h"
#include "QF/console.h" #include "QF/console.h"
@ -49,9 +47,7 @@
#include "host.h" #include "host.h"
#include "QF/input.h" #include "QF/input.h"
#include "QF/keys.h" #include "QF/keys.h"
#include "protocol.h"
#include "QF/qargs.h" #include "QF/qargs.h"
#include "view.h"
// Joystick variables and structures // Joystick variables and structures
cvar_t *joy_device; // Joystick device name cvar_t *joy_device; // Joystick device name
@ -129,7 +125,7 @@ DWORD joy_numbuttons;
// //
void JOY_AdvancedUpdate_f (void); void JOY_AdvancedUpdate_f (void);
void JOY_StartupJoystick (void); void JOY_StartupJoystick (void);
void JOY_Move (usercmd_t *cmd); void JOY_Move (void);
void JOY_Init_Cvars(void); void JOY_Init_Cvars(void);
PDWORD RawValuePointer (int axis); PDWORD RawValuePointer (int axis);
@ -221,7 +217,7 @@ JOY_Command (void)
} }
void void
JOY_Move (usercmd_t *cmd) JOY_Move (void)
{ {
float speed, aspeed; float speed, aspeed;
float fAxisValue, fTemp; float fAxisValue, fTemp;
@ -286,15 +282,14 @@ JOY_Move (usercmd_t *cmd)
// only absolute control support here (joy_advanced // only absolute control support here (joy_advanced
// is false) // is false)
if (m_pitch->value < 0.0) { if (m_pitch->value < 0.0) {
cl.viewangles[PITCH] -= viewdelta.angles[PITCH] -=
(fAxisValue * joy_pitchsensitivity->value) * (fAxisValue * joy_pitchsensitivity->value) *
aspeed * cl_pitchspeed->value; aspeed * cl_pitchspeed->value;
} else { } else {
cl.viewangles[PITCH] += viewdelta.angles[PITCH] +=
(fAxisValue * joy_pitchsensitivity->value) * (fAxisValue * joy_pitchsensitivity->value) *
aspeed * cl_pitchspeed->value; aspeed * cl_pitchspeed->value;
} }
V_StopPitchDrift ();
} else { } else {
// no pitch movement // no pitch movement
// disable pitch return-to-center unless requested by // disable pitch return-to-center unless requested by
@ -308,7 +303,7 @@ JOY_Move (usercmd_t *cmd)
} else { } else {
// user wants forward control to be forward control // user wants forward control to be forward control
if (fabs (fAxisValue) > joy_forwardthreshold->value) { if (fabs (fAxisValue) > joy_forwardthreshold->value) {
cmd->forwardmove += viewdelta.position[0] +=
(fAxisValue * joy_forwardsensitivity->value) * (fAxisValue * joy_forwardsensitivity->value) *
speed * cl_forwardspeed->value; speed * cl_forwardspeed->value;
} }
@ -317,7 +312,7 @@ JOY_Move (usercmd_t *cmd)
case AxisSide: case AxisSide:
if (fabs (fAxisValue) > joy_sidethreshold->value) { if (fabs (fAxisValue) > joy_sidethreshold->value) {
cmd->sidemove += viewdelta.position[1] +=
(fAxisValue * joy_sidesensitivity->value) * speed * (fAxisValue * joy_sidesensitivity->value) * speed *
cl_sidespeed->value; cl_sidespeed->value;
} }
@ -327,7 +322,7 @@ JOY_Move (usercmd_t *cmd)
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) { if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) {
// user wants turn control to become side control // user wants turn control to become side control
if (fabs (fAxisValue) > joy_sidethreshold->value) { if (fabs (fAxisValue) > joy_sidethreshold->value) {
cmd->sidemove -= viewdelta.position[0] -=
(fAxisValue * joy_sidesensitivity->value) * speed * (fAxisValue * joy_sidesensitivity->value) * speed *
cl_sidespeed->value; cl_sidespeed->value;
} }
@ -335,11 +330,11 @@ JOY_Move (usercmd_t *cmd)
// user wants turn control to be turn control // user wants turn control to be turn control
if (fabs (fAxisValue) > joy_yawthreshold->value) { if (fabs (fAxisValue) > joy_yawthreshold->value) {
if (dwControlMap[i] == JOY_ABSOLUTE_AXIS) { if (dwControlMap[i] == JOY_ABSOLUTE_AXIS) {
cl.viewangles[YAW] += viewdelta.angles[YAW] +=
(fAxisValue * joy_yawsensitivity->value) * (fAxisValue * joy_yawsensitivity->value) *
aspeed * cl_yawspeed->value; aspeed * cl_yawspeed->value;
} else { } else {
cl.viewangles[YAW] += viewdelta.angles[YAW] +=
(fAxisValue * joy_yawsensitivity->value) * (fAxisValue * joy_yawsensitivity->value) *
speed * 180.0; speed * 180.0;
} }
@ -353,15 +348,14 @@ JOY_Move (usercmd_t *cmd)
// pitch movement detected and pitch movement desired // pitch movement detected and pitch movement desired
// by user // by user
if (dwControlMap[i] == JOY_ABSOLUTE_AXIS) { if (dwControlMap[i] == JOY_ABSOLUTE_AXIS) {
cl.viewangles[PITCH] += viewdelta.angles[PITCH] +=
(fAxisValue * joy_pitchsensitivity->value) * (fAxisValue * joy_pitchsensitivity->value) *
aspeed * cl_pitchspeed->value; aspeed * cl_pitchspeed->value;
} else { } else {
cl.viewangles[PITCH] += viewdelta.angles[PITCH] +=
(fAxisValue * joy_pitchsensitivity->value) * (fAxisValue * joy_pitchsensitivity->value) *
speed * 180.0; speed * 180.0;
} }
V_StopPitchDrift ();
} else { } else {
// no pitch movement // no pitch movement
// disable pitch return-to-center unless requested by // disable pitch return-to-center unless requested by
@ -379,9 +373,6 @@ JOY_Move (usercmd_t *cmd)
break; break;
} }
} }
// bounds check pitch
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} }
void void
@ -555,66 +546,54 @@ void
JOY_Init_Cvars(void) JOY_Init_Cvars(void)
{ {
joy_device = joy_device =
Cvar_Get ("joy_device", "none", CVAR_NONE | CVAR_ROM, NULL, Cvar_Get ("joy_device", "none", CVAR_NONE | CVAR_ROM, 0,
"Joystick device"); "Joystick device");
joy_enable = joy_enable =
Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, NULL, Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, 0,
"Joystick enable flag"); "Joystick enable flag");
joy_sensitivity = joy_sensitivity =
Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, NULL, Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, 0,
"Joystick sensitivity"); "Joystick sensitivity");
// joystick variables // joystick variables
in_joystick = in_joystick =
Cvar_Get ("joystick", "0", CVAR_ARCHIVE, NULL, "FIXME: No Description"); Cvar_Get ("joystick", "0", CVAR_ARCHIVE, 0, "FIXME: No Description");
joy_name = joy_name =
Cvar_Get ("joyname", "joystick", CVAR_NONE, NULL, Cvar_Get ("joyname", "joystick", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_advanced = joy_advanced =
Cvar_Get ("joyadvanced", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvanced", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_advaxisx = joy_advaxisx =
Cvar_Get ("joyadvaxisx", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvaxisx", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_advaxisy = joy_advaxisy =
Cvar_Get ("joyadvaxisy", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvaxisy", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_advaxisz = joy_advaxisz =
Cvar_Get ("joyadvaxisz", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvaxisz", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_advaxisr = joy_advaxisr =
Cvar_Get ("joyadvaxisr", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvaxisr", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_advaxisu = joy_advaxisu =
Cvar_Get ("joyadvaxisu", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvaxisu", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_advaxisv = joy_advaxisv =
Cvar_Get ("joyadvaxisv", "0", CVAR_NONE, NULL, "FIXME: No Description"); Cvar_Get ("joyadvaxisv", "0", CVAR_NONE, 0, "FIXME: No Description");
joy_forwardthreshold = joy_forwardthreshold =
Cvar_Get ("joyforwardthreshold", "0.15", CVAR_NONE, NULL, Cvar_Get ("joyforwardthreshold", "0.15", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_sidethreshold = joy_sidethreshold =
Cvar_Get ("joysidethreshold", "0.15", CVAR_NONE, NULL, Cvar_Get ("joysidethreshold", "0.15", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_pitchthreshold = joy_pitchthreshold =
Cvar_Get ("joypitchthreshold", "0.15", CVAR_NONE, NULL, Cvar_Get ("joypitchthreshold", "0.15", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description"); joy_yawthreshold = Cvar_Get ("joyyawthreshold", "0.15", CVAR_NONE, 0, "FIXME: No Description");
joy_yawthreshold = Cvar_Get ("joyyawthreshold", "0.15", CVAR_NONE, NULL,
"FIXME: No Description");
joy_forwardsensitivity = joy_forwardsensitivity =
Cvar_Get ("joyforwardsensitivity", "-1.0", CVAR_NONE, NULL, Cvar_Get ("joyforwardsensitivity", "-1.0", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_sidesensitivity = joy_sidesensitivity =
Cvar_Get ("joysidesensitivity", "-1.0", CVAR_NONE, NULL, Cvar_Get ("joysidesensitivity", "-1.0", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_pitchsensitivity = joy_pitchsensitivity =
Cvar_Get ("joypitchsensitivity", "1.0", CVAR_NONE, NULL, Cvar_Get ("joypitchsensitivity", "1.0", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_yawsensitivity = joy_yawsensitivity =
Cvar_Get ("joyyawsensitivity", "-1.0", CVAR_NONE, NULL, Cvar_Get ("joyyawsensitivity", "-1.0", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description"); joy_wwhack1 = Cvar_Get ("joywwhack1", "0.0", CVAR_NONE, 0, "FIXME: No Description");
joy_wwhack1 = Cvar_Get ("joywwhack1", "0.0", CVAR_NONE, NULL, joy_wwhack2 = Cvar_Get ("joywwhack2", "0.0", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
joy_wwhack2 = Cvar_Get ("joywwhack2", "0.0", CVAR_NONE, NULL,
"FIXME: No Description");
joy_debug = Cvar_Get ("joy_debug", "0.0", CVAR_NONE, NULL, joy_debug = Cvar_Get ("joy_debug", "0.0", CVAR_NONE, 0, "FIXME: No Description");
"FIXME: No Description");
return; return;
} }

View file

@ -224,6 +224,7 @@ extern mplane_t *mirror_plane;
extern float r_world_matrix[16]; extern float r_world_matrix[16];
extern float bubble_sintable[], bubble_costable[]; extern float bubble_sintable[], bubble_costable[];
extern float v_blend[4];
extern const char *gl_vendor; extern const char *gl_vendor;
extern const char *gl_renderer; extern const char *gl_renderer;

View file

@ -1,64 +0,0 @@
/*
view.h
@description@
Copyright (C) 1996-1997 Id Software, Inc.
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
#ifndef __view_h
#define __view_h
#include "QF/qtypes.h"
#include "QF/cvar.h"
extern byte gammatable[256]; // palette is sent through this
extern byte ramps[3][256];
extern float v_blend[4];
extern cvar_t *brightness;
extern cvar_t *contrast;
extern cvar_t *crosshair;
void V_Init (void);
void V_RenderView (void);
float V_CalcRoll (vec3_t angles, vec3_t velocity);
void V_UpdatePalette (void);
void V_CalcBlend (void);
void V_CalcIntermissionRefdef (void);
void V_CalcRefdef (void);
void V_CalcPowerupCshift (void);
qboolean V_CheckGamma (void);
extern cvar_t *scr_ofsx;
extern cvar_t *scr_ofsy;
extern cvar_t *scr_ofsz;
extern cvar_t *cl_crossx;
extern cvar_t *cl_crossy;
extern cvar_t *gl_cshiftpercent;
extern vec3_t forward, right, up;
#endif // __cvar_h

View file

@ -38,7 +38,7 @@ bin_PROGRAMS = @NQ_TARGETS@
EXTRA_PROGRAMS= nq-3dfx nq-fbdev nq-glx nq-mgl nq-sdl \ EXTRA_PROGRAMS= nq-3dfx nq-fbdev nq-glx nq-mgl nq-sdl \
nq-sgl nq-svga nq-wgl nq-x11 nq-server nq-sgl nq-svga nq-wgl nq-x11 nq-server
noinst_LIBRARIES= libqfjs.a libqfnet.a noinst_LIBRARIES= libqfsys.a libqfnet.a
#if ASM_ARCH #if ASM_ARCH
math_ASM= cl_math.S math_ASM= cl_math.S
@ -62,18 +62,6 @@ else
qfsys_SRC= sys_unix.c qfsys_SRC= sys_unix.c
endif endif
#
# ... Joystick
#
if JOYTYPE_LINUX
libqfjs_a_SOURCES= joy_linux.c
endif
if JOYTYPE_NULL
libqfjs_a_SOURCES= joy_null.c
endif
libqfjs_a_CFLAGS= $(JOY_CFLAGS)
EXTRA_libqfjs_a_SOURCES= joy_linux.c joy_null.c
# #
# ... Networking # ... Networking
# #
@ -87,8 +75,9 @@ client_LIBS= $(top_builddir)/libs/gamecode/libQFgamecode.la \
$(top_builddir)/libs/util/libQFutil.la \ $(top_builddir)/libs/util/libQFutil.la \
$(top_builddir)/libs/audio/cd/libQFcd.la \ $(top_builddir)/libs/audio/cd/libQFcd.la \
$(top_builddir)/libs/audio/targets/libQFsound.la \ $(top_builddir)/libs/audio/targets/libQFsound.la \
-L. -lqfjs -lqfnet $(SOUND_LIBS) $(NET_LIBS) $(top_builddir)/libs/video/targets/libQFjs.la \
client_LIB_DEPS= libqfjs.a libqfnet.a -L. -lqfsys -lqfnet $(SOUND_LIBS) $(NET_LIBS)
client_LIB_DEPS= libqfsys.a libqfnet.a
client_SOURCES= cl_cam.c cl_cmd.c cl_demo.c cl_input.c cl_main.c cl_parse.c \ client_SOURCES= cl_cam.c cl_cmd.c cl_demo.c cl_input.c cl_main.c cl_parse.c \
cl_tent.c console.c keys.c sbar.c r_part.c r_view.c \ cl_tent.c console.c keys.c sbar.c r_part.c r_view.c \

View file

@ -34,9 +34,11 @@
#include "QF/msg.h" #include "QF/msg.h"
#include "host.h" #include "host.h"
#include "QF/console.h"
#include "client.h" #include "client.h"
#include "QF/cmd.h" #include "QF/cmd.h"
#include "QF/console.h"
#include "QF/compat.h"
#include "QF/input.h"
/* /*
=============================================================================== ===============================================================================
@ -512,6 +514,25 @@ CL_BaseMove (usercmd_t *cmd)
#ifdef QUAKE2 #ifdef QUAKE2
cmd->lightlevel = cl.light_level; cmd->lightlevel = cl.light_level;
#endif #endif
if (freelook)
V_StopPitchDrift ();
viewdelta.angles[0] = viewdelta.angles[1] = viewdelta.angles[2] = 0;
viewdelta.position[0] = viewdelta.position[1] = viewdelta.position[2] = 0;
IN_Move ();
cmd->forwardmove += viewdelta.position[2] * m_forward->value;
cmd->sidemove += viewdelta.position[0] * m_side->value;
cmd->upmove += viewdelta.position[1];
cl.viewangles[PITCH] += viewdelta.angles[PITCH] * m_pitch->value;
cl.viewangles[YAW] += viewdelta.angles[YAW] * m_yaw->value;
cl.viewangles[ROLL] += viewdelta.angles[ROLL];
if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
}
} }

View file

@ -803,12 +803,8 @@ CL_SendCmd (void)
return; return;
if (cls.signon == SIGNONS) { if (cls.signon == SIGNONS) {
// get basic movement from keyboard
CL_BaseMove (&cmd); CL_BaseMove (&cmd);
// allow mice or other external controllers to add to the move
IN_Move (&cmd);
// send the unreliable message // send the unreliable message
CL_SendMove (&cmd); CL_SendMove (&cmd);

View file

@ -31,11 +31,26 @@
# include "config.h" # include "config.h"
#endif #endif
#include "view.h"
#include "client.h" #include "client.h"
#include "host.h"
#include "QF/console.h" #include "QF/console.h"
#include "QF/compat.h" #include "QF/compat.h"
#include "glquake.h"
#include "host.h"
#include "view.h"
extern byte gammatable[256];
extern qboolean V_CheckGamma (void);
extern void V_CalcIntermissionRefdef (void);
extern void V_CalcPowerupCshift (void);
extern void V_CalcRefdef (void);
extern cvar_t *crosshair;
extern cvar_t *gl_cshiftpercent;
extern cvar_t *scr_ofsx;
extern cvar_t *scr_ofsy;
extern cvar_t *scr_ofsz;
byte ramps[3][256]; byte ramps[3][256];
float v_blend[4]; // rgba 0.0 - 1.0 float v_blend[4]; // rgba 0.0 - 1.0

View file

@ -275,7 +275,7 @@ IN_Move
=========== ===========
*/ */
void void
IN_MouseMove (usercmd_t *cmd) IN_MouseMove (void)
{ {
int mx, my; int mx, my;
@ -306,20 +306,13 @@ IN_MouseMove (usercmd_t *cmd)
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; cl.viewangles[YAW] -= m_yaw->value * mouse_x;
if (in_mlook.state & 1)
V_StopPitchDrift ();
if ((in_mlook.state & 1) && !(in_strafe.state & 1)) { if ((in_mlook.state & 1) && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
if (cl.viewangles[PITCH] > 80)
cl.viewangles[PITCH] = 80;
if (cl.viewangles[PITCH] < -70)
cl.viewangles[PITCH] = -70;
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
} }
@ -329,7 +322,7 @@ IN_JoyMove
=========== ===========
*/ */
void void
IN_JoyMove (usercmd_t *cmd) IN_JoyMove (void)
{ {
float speed, aspeed; float speed, aspeed;
@ -383,10 +376,10 @@ IN_Move
=========== ===========
*/ */
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
IN_MouseMove (cmd); IN_MouseMove ();
IN_JoyMove (cmd); IN_JoyMove ();
IN_ExternalMove (cmd); IN_ExternalMove (cmd);
} }

View file

@ -139,7 +139,7 @@ IN_Commands (void)
} }
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
} }

View file

@ -53,7 +53,7 @@ IN_Commands (void)
} }
void void
IN_Move (usercmd_t *cmd) IN_Move (null)
{ {
} }

View file

@ -52,6 +52,7 @@
HWND mainwindow; HWND mainwindow;
#endif #endif
cvar_t *m_filter;
cvar_t *_windowed_mouse; cvar_t *_windowed_mouse;
int old_windowed_mouse; int old_windowed_mouse;
@ -61,6 +62,7 @@ int modestate; // FIXME: just to avoid cross-comp.
static qboolean mouse_avail; static qboolean mouse_avail;
static float mouse_x, mouse_y; static float mouse_x, mouse_y;
static float old_mouse_x, old_mouse_y;
static int mouse_oldbuttonstate = 0; static int mouse_oldbuttonstate = 0;
extern viddef_t vid; // global video state extern viddef_t vid; // global video state
@ -359,8 +361,7 @@ IN_Init_Cvars (void)
_windowed_mouse = _windowed_mouse =
Cvar_Get ("_windowed_mouse", "0", CVAR_ARCHIVE, NULL, Cvar_Get ("_windowed_mouse", "0", CVAR_ARCHIVE, NULL,
"If set to 1, quake will grab the mouse in X"); "If set to 1, quake will grab the mouse in X");
// m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL, m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL, "Toggle mouse input filtering");
// "Toggle mouse input filtering");
} }
void void
@ -394,42 +395,35 @@ IN_Frame (void)
} }
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
JOY_Move (cmd); JOY_Move ();
if (!mouse_avail) if (!mouse_avail)
return; return;
/* from vid_sdl.c
if (m_filter->value) { if (m_filter->value) {
mouse_x = (mouse_x + old_mouse_x) * 0.5; mouse_x = (mouse_x + old_mouse_x) * 0.5;
mouse_y = (mouse_y + old_mouse_y) * 0.5; mouse_y = (mouse_y + old_mouse_y) * 0.5;
} }
old_mouse_x = mouse_x; old_mouse_x = mouse_x;
old_mouse_y = mouse_y; old_mouse_y = mouse_y;
*/
mouse_x *= sensitivity->value; mouse_x *= sensitivity->value;
mouse_y *= sensitivity->value; mouse_y *= sensitivity->value;
if ((in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1))) if ((in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1)))
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] = viewdelta.angles[PITCH] += mouse_y;
bound (-70, cl.viewangles[PITCH] + (m_pitch->value * mouse_y), 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
mouse_x = mouse_y = 0.0; mouse_x = mouse_y = 0.0;
} }

View file

@ -69,6 +69,7 @@ extern int global_dx, global_dy;
// globals // globals
// //
cvar_t *m_filter;
cvar_t *_windowed_mouse; cvar_t *_windowed_mouse;
int x_root, y_root; int x_root, y_root;
int x_root_old, y_root_old; int x_root_old, y_root_old;
@ -199,7 +200,7 @@ IN_Commands (void)
// //
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
static int last_dx, last_dy; static int last_dx, last_dy;
static long long last_movement; static long long last_movement;
@ -250,24 +251,17 @@ IN_Move (usercmd_t *cmd)
} }
// add mouse X/Y movement to cmd // add mouse X/Y movement to cmd
if ((in_strafe.state & 1) || (lookstrafe->int_val && (in_mlook.state & 1))) if ((in_strafe.state & 1) || (lookstrafe->int_val && (in_mlook.state & 1)))
cmd->sidemove += m_side->value * dx; viewdelta.position[0] += dx;
else else
cl.viewangles[YAW] -= m_yaw->value * dx; viewdelta.angles[YAW] -= dx;
if (in_mlook.state & 1)
V_StopPitchDrift ();
if ((in_mlook.state & 1) && !(in_strafe.state & 1)) { if ((in_mlook.state & 1) && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * dy; viewdelta.angles[PITCH] += dy;
if (cl.viewangles[PITCH] > 80)
cl.viewangles[PITCH] = 80;
if (cl.viewangles[PITCH] < -70)
cl.viewangles[PITCH] = -70;
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * dy; viewdelta.position[1] -= dy;
else else
cmd->forwardmove -= m_forward->value * dy; viewdelta.position[2] -= dy;
} }
} }

View file

@ -360,9 +360,10 @@ IN_Commands (void)
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
JOY_Move (cmd); JOY_Move ();
if (!UseMouse) if (!UseMouse)
return; return;
@ -378,6 +379,7 @@ IN_Move (usercmd_t *cmd)
} }
old_mouse_x = mx; old_mouse_x = mx;
old_mouse_y = my; old_mouse_y = my;
/* Clear for next update */ /* Clear for next update */
mx = my = 0; mx = my = 0;
@ -386,22 +388,18 @@ IN_Move (usercmd_t *cmd)
/* Add mouse X/Y movement to cmd */ /* Add mouse X/Y movement to cmd */
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) { if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) {
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
} else { } else {
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
} }
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) { if ((in_strafe.state & 1) && noclip_anglehack) {
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
} else { } else {
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
} }
} }

View file

@ -591,7 +591,7 @@ IN_MouseMove
=========== ===========
*/ */
void void
IN_MouseMove (usercmd_t *cmd) IN_MouseMove (void)
{ {
int mx, my; int mx, my;
@ -696,21 +696,17 @@ IN_MouseMove (usercmd_t *cmd)
// add mouse X/Y movement to cmd // add mouse X/Y movement to cmd
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook))
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] = mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
// if the mouse has moved, force it to the center, so there's room to move // if the mouse has moved, force it to the center, so there's room to move
@ -726,12 +722,12 @@ IN_Move
=========== ===========
*/ */
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
if (ActiveApp && !Minimized) { if (ActiveApp && !Minimized) {
IN_MouseMove (cmd); IN_MouseMove ();
IN_JoyMove (cmd); IN_JoyMove ();
} }
} }

View file

@ -431,9 +431,9 @@ IN_SendKeyEvents (void)
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
JOY_Move (cmd); JOY_Move ();
if (!mouse_avail) if (!mouse_avail)
return; return;
@ -441,30 +441,25 @@ IN_Move (usercmd_t *cmd)
if (m_filter->int_val) { if (m_filter->int_val) {
mouse_x = (mouse_x + old_mouse_x) * 0.5; mouse_x = (mouse_x + old_mouse_x) * 0.5;
mouse_y = (mouse_y + old_mouse_y) * 0.5; mouse_y = (mouse_y + old_mouse_y) * 0.5;
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
} }
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
mouse_x *= sensitivity->value; mouse_x *= sensitivity->value;
mouse_y *= sensitivity->value; mouse_y *= sensitivity->value;
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook))
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
mouse_x = mouse_y = 0.0; mouse_x = mouse_y = 0.0;
} }

View file

@ -1,231 +0,0 @@
/*
joy_linux.c
Joystick driver for Linux
Copyright (C) 2000 David Jeffery
Copyright (C) 2000 Jeff Teunissen <deek@dusknet.dhs.org>
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <linux/joystick.h>
#include <fcntl.h>
#include <unistd.h>
#include "QF/compat.h"
#include "QF/console.h"
#include "client.h"
#include "QF/cvar.h"
#include "QF/keys.h"
#include "protocol.h"
#include "view.h"
#define JOY_MAX_AXES 6
#define JOY_MAX_BUTTONS 16
cvar_t *joy_device; // Joystick device name
cvar_t *joy_enable; // Joystick enabling flag
cvar_t *joy_sensitivity; // Joystick sensitivity
qboolean joy_found = false;
qboolean joy_active = false;
// Variables and structures for this driver
int joy_handle;
typedef struct {
char *name;
char *string;
} ocvar_t;
struct joy_axis {
cvar_t *axis;
ocvar_t var;
int current;
};
struct joy_button {
int old;
int current;
};
struct joy_axis joy_axes[JOY_MAX_AXES] = {
{NULL, {"joyaxis1", "1"}, 0},
{NULL, {"joyaxis2", "2"}, 0},
{NULL, {"joyaxis3", "3"}, 0},
{NULL, {"joyaxis4", "0"}, 0},
{NULL, {"joyaxis5", "0"}, 0},
{NULL, {"joyaxis6", "0"}, 0}
};
struct joy_button joy_buttons[JOY_MAX_BUTTONS];
void
JOY_Command (void)
{
struct js_event event;
if (!joy_active || !joy_enable->int_val)
return;
while (read (joy_handle, &event, sizeof (struct js_event)) > -1) {
if (event.type & JS_EVENT_BUTTON) {
if (event.number >= JOY_MAX_BUTTONS)
continue;
joy_buttons[event.number].current = event.value;
if (joy_buttons[event.number].current >
joy_buttons[event.number].old) {
Key_Event (K_AUX1 + event.number, 0, true);
} else {
if (joy_buttons[event.number].current <
joy_buttons[event.number].old) {
Key_Event (K_AUX1 + event.number, 0, false);
}
}
joy_buttons[event.number].old = joy_buttons[event.number].current;
} else {
if (event.type & JS_EVENT_AXIS) {
if (event.number >= JOY_MAX_AXES)
continue;
joy_axes[event.number].current = event.value;
}
}
}
}
void
JOY_Move (usercmd_t *cmd)
{
int i;
if (!joy_active || !joy_enable->int_val)
return;
Cvar_SetValue (joy_sensitivity, bound (1, joy_sensitivity->value, 25));
for (i = 0; i < JOY_MAX_AXES; i++) {
switch (joy_axes[i].axis->int_val) {
case 1:
cl.viewangles[YAW] -=
m_yaw->value * (float) (joy_axes[i].current /
(201 - (joy_sensitivity->value * 4)));
break;
case 2:
cmd->forwardmove -=
m_forward->value * (float) (joy_axes[i].current /
(201 -
(joy_sensitivity->value * 4)));
break;
case 3:
cmd->sidemove +=
m_side->value * (float) (joy_axes[i].current /
(201 - (joy_sensitivity->value * 4)));
break;
case 4:
if (joy_axes[i].current) {
V_StopPitchDrift ();
cl.viewangles[PITCH] -=
m_pitch->value * (float) (joy_axes[i].current /
(201 -
(joy_sensitivity->value * 4)));
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
}
break;
}
}
}
void
JOY_Init (void)
{
// Open joystick device
joy_handle = open (joy_device->string, O_RDONLY | O_NONBLOCK);
if (joy_handle < 0) {
Con_Printf ("JOY: Joystick not found.\n");
} else {
int i;
joy_found = true;
if (!joy_enable->int_val) {
Con_Printf ("JOY: Joystick found, but not enabled.\n");
i = close (joy_handle);
if (i) {
Con_Printf ("JOY: Failed to close joystick device!\n");
}
} else {
// Initialize joystick if found and enabled
for (i = 0; i < JOY_MAX_BUTTONS; i++) {
joy_buttons[i].old = 0;
joy_buttons[i].current = 0;
}
joy_active = true;
Con_Printf ("JOY: Joystick found and activated.\n");
}
}
}
void
JOY_Init_Cvars (void)
{
int i;
joy_device =
Cvar_Get ("joy_device", "/dev/js0", CVAR_NONE | CVAR_ROM, NULL,
"Joystick device");
joy_enable =
Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, NULL,
"Joystick enable flag");
joy_sensitivity =
Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, NULL,
"Joystick sensitivity");
for (i = 0; i < JOY_MAX_AXES; i++) {
joy_axes[i].axis = Cvar_Get (joy_axes[i].var.name,
joy_axes[i].var.string,
CVAR_ARCHIVE, NULL, "Set joystick axes");
}
}
void
JOY_Shutdown (void)
{
int i;
if (!joy_active)
return;
i = close (joy_handle);
if (i) {
Con_Printf ("JOY: Failed to close joystick device!\n");
} else {
Con_Printf ("JOY_Shutdown\n");
}
joy_active = false;
joy_found = false;
}

View file

@ -1,82 +0,0 @@
/*
joy_null.c
Joystick device driver template
Copyright (C) 2000 Jeff Teunissen <deek@dusknet.dhs.org>
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "QF/console.h"
#include "QF/cvar.h"
#include "protocol.h"
#include "QF/qtypes.h"
#include "client.h"
// Joystick variables and structures
cvar_t *joy_device; // Joystick device name
cvar_t *joy_enable; // Joystick enabling flag
cvar_t *joy_sensitivity; // Joystick sensitivity
qboolean joy_found = false;
qboolean joy_active = false;
void
JOY_Command (void)
{
}
void
JOY_Move (usercmd_t *cmd)
{
}
void
JOY_Init (void)
{
Con_DPrintf ("This system does not have joystick support.\n");
}
void
JOY_Init_Cvars (void)
{
joy_device =
Cvar_Get ("joy_device", "none", CVAR_NONE | CVAR_ROM, NULL,
"Joystick device");
joy_enable =
Cvar_Get ("joy_enable", "1", CVAR_NONE | CVAR_ARCHIVE, NULL,
"Joystick enable flag");
joy_sensitivity =
Cvar_Get ("joy_sensitivity", "1", CVAR_NONE | CVAR_ARCHIVE, NULL,
"Joystick sensitivity");
}
void
JOY_Shutdown (void)
{
joy_active = false;
joy_found = false;
}

View file

@ -31,13 +31,26 @@
# include "config.h" # include "config.h"
#endif #endif
#include "client.h"
#include "QF/compat.h" #include "QF/compat.h"
#include "QF/console.h"
#include "draw.h"
#include "host.h"
#include "view.h" #include "view.h"
#include "vid.h" #include "vid.h"
#include "QF/console.h"
#include "host.h" extern byte gammatable[256];
#include "client.h"
#include "draw.h" extern qboolean V_CheckGamma (void);
extern void V_CalcIntermissionRefdef (void);
extern void V_CalcPowerupCshift (void);
extern void V_CalcRefdef (void);
extern cvar_t *crosshair;
extern cvar_t *scr_ofsx;
extern cvar_t *scr_ofsy;
extern cvar_t *scr_ofsz;
/* /*
V_UpdatePalette V_UpdatePalette

View file

@ -1,55 +0,0 @@
/*
in_win.h
Win32 input prototypes
Copyright (C) 1996-1997 Id Software, Inc.
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
*/
#ifndef _IN_WIN_H
#define _IN_WIN_H
#include "protocol.h"
extern qboolean mouseactive;
extern float mouse_x, mouse_y;
extern unsigned int uiWheelMessage;
extern void IN_UpdateClipCursor (void);
extern void IN_ShowMouse (void);
extern void IN_HideMouse (void);
extern void IN_ActivateMouse (void);
extern void IN_SetQuakeMouseState (void);
extern void IN_DeactivateMouse (void);
extern void IN_RestoreOriginalMouseState (void);
extern void IN_Init (void);
extern void IN_Shutdown (void);
extern void IN_MouseEvent (int mstate);
extern void IN_MouseMove (usercmd_t *cmd);
extern void IN_Move (usercmd_t *cmd);
extern void IN_Accumulate (void);
extern void IN_ClearStates (void);
extern void IN_Commands (void);
#endif // _IN_WIN_H

View file

@ -1,59 +0,0 @@
/*
view.h
(description)
Copyright (C) 1996-1997 Id Software, Inc.
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.
You should have received a copy of the GNU General Public License
along with this program; if not, write to:
Free Software Foundation, Inc.
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
$Id$
*/
// view.h
#ifndef __view_h_
#define __view_h_
#include "QF/mathlib.h"
#include "QF/cvar.h"
extern cvar_t *brightness;
extern cvar_t *contrast;
#define INFO_CSHIFT_BONUS (1 << 0)
#define INFO_CSHIFT_CONTENTS (1 << 1)
#define INFO_CSHIFT_DAMAGE (1 << 2)
#define INFO_CSHIFT_POWERUP (1 << 3)
void V_Init (void);
void V_Init_Cvars (void);
void V_RenderView (void);
float V_CalcRoll (vec3_t angles, vec3_t velocity);
void V_UpdatePalette (void);
void V_StartPitchDrift (void);
void V_StopPitchDrift (void);
void V_RenderView (void);
void V_UpdatePalette (void);
void V_Register (void);
void V_ParseDamage (void);
void V_SetContentsColor (int contents);
void V_CalcBlend (void);
#endif // __view_h_

View file

@ -40,7 +40,7 @@ EXTRA_PROGRAMS= qw-client-3dfx qw-client-fbdev \
qw-client-sgl qw-client-svga qw-client-wgl \ qw-client-sgl qw-client-svga qw-client-wgl \
qw-client-x11 qw-server qw-client-x11 qw-server
noinst_LIBRARIES= libqfjs.a libqfnet.a noinst_LIBRARIES= libqfnet.a
#libqfsys_cl.a libqfsys_sv.a #libqfsys_cl.a libqfsys_sv.a
if PACKETLOG if PACKETLOG
@ -102,28 +102,14 @@ else
syscl_SRC= cl_sys_unix.c syscl_SRC= cl_sys_unix.c
endif endif
#
# ... Joystick
#
if JOYTYPE_LINUX
libqfjs_a_SOURCES= joy_linux.c
endif
if JOYTYPE_WIN32
libqfjs_a_SOURCES= joy_win.c
endif
if JOYTYPE_NULL
libqfjs_a_SOURCES= joy_null.c
endif
libqfjs_a_CFLAGS= $(JOY_CFLAGS)
EXTRA_libqfjs_a_SOURCES= joy_linux.c joy_win.c joy_null.c
CLIENT_LIBS= $(top_builddir)/libs/util/libQFutil.la \ CLIENT_LIBS= $(top_builddir)/libs/util/libQFutil.la \
$(top_builddir)/libs/gamecode/libQFgamecode.la \ $(top_builddir)/libs/gamecode/libQFgamecode.la \
$(top_builddir)/libs/audio/cd/libQFcd.la \ $(top_builddir)/libs/audio/cd/libQFcd.la \
$(top_builddir)/libs/audio/targets/libQFsound.la \ $(top_builddir)/libs/audio/targets/libQFsound.la \
-L. -lqfnet -lqfjs \ $(top_builddir)/libs/video/targets/libQFjs.la \
$(SOUND_LIBS) $(NET_LIBS) $(JOY_LIBS) -L. -lqfnet \
CLIENT_LIB_DEPS= libqfnet.a libqfjs.a $(SOUND_LIBS) $(NET_LIBS)
CLIENT_LIB_DEPS= libqfnet.a
if ASM_ARCH if ASM_ARCH
client_ASM= cl_math.S client_ASM= cl_math.S

View file

@ -43,6 +43,7 @@
#include "cl_parse.h" #include "cl_parse.h"
#include "client.h" #include "client.h"
#include "QF/cmd.h" #include "QF/cmd.h"
#include "QF/compat.h"
#include "QF/console.h" #include "QF/console.h"
#include "host.h" #include "host.h"
#include "QF/input.h" #include "QF/input.h"
@ -516,6 +517,25 @@ CL_BaseMove (usercmd_t *cmd)
cmd->sidemove *= cl_movespeedkey->value; cmd->sidemove *= cl_movespeedkey->value;
cmd->upmove *= cl_movespeedkey->value; cmd->upmove *= cl_movespeedkey->value;
} }
if (freelook)
V_StopPitchDrift ();
viewdelta.angles[0] = viewdelta.angles[1] = viewdelta.angles[2] = 0;
viewdelta.position[0] = viewdelta.position[1] = viewdelta.position[2] = 0;
IN_Move ();
cmd->forwardmove += viewdelta.position[2] * m_forward->value;
cmd->sidemove += viewdelta.position[0] * m_side->value;
cmd->upmove += viewdelta.position[1];
cl.viewangles[PITCH] += viewdelta.angles[PITCH] * m_pitch->value;
cl.viewangles[YAW] += viewdelta.angles[YAW] * m_yaw->value;
cl.viewangles[ROLL] += viewdelta.angles[ROLL];
if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
}
} }
int int
@ -616,7 +636,7 @@ CL_SendCmd (void)
CL_BaseMove (cmd); CL_BaseMove (cmd);
// allow mice or other external controllers to add to the move // allow mice or other external controllers to add to the move
IN_Move (cmd); IN_Move (); // FIXME: was cmd, should it even exist at all?
// if we are spectator, try autocam // if we are spectator, try autocam
if (cl.spectator) if (cl.spectator)

View file

@ -139,7 +139,7 @@ IN_Commands (void)
} }
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
} }

View file

@ -54,6 +54,7 @@
HWND mainwindow; HWND mainwindow;
#endif #endif
cvar_t *m_filter;
cvar_t *_windowed_mouse; cvar_t *_windowed_mouse;
int old_windowed_mouse; int old_windowed_mouse;
@ -63,6 +64,7 @@ int modestate; // FIXME: just to avoid cross-comp.
static qboolean mouse_avail; static qboolean mouse_avail;
static float mouse_x, mouse_y; static float mouse_x, mouse_y;
static float old_mouse_x, old_mouse_y;
static int mouse_oldbuttonstate = 0; static int mouse_oldbuttonstate = 0;
extern viddef_t vid; // global video state extern viddef_t vid; // global video state
@ -362,9 +364,8 @@ IN_Init_Cvars (void)
{ {
JOY_Init_Cvars (); JOY_Init_Cvars ();
_windowed_mouse = Cvar_Get ("_windowed_mouse", "0", CVAR_ARCHIVE, NULL, _windowed_mouse = Cvar_Get ("_windowed_mouse", "0", CVAR_ARCHIVE, NULL, "If set to 1, quake will grab the mouse in X");
"If set to 1, quake will grab the mouse in X"); m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL, "Toggle mouse input filtering");
// m_filter = Cvar_Get ("m_filter", "0", CVAR_ARCHIVE, NULL, "Toggle mouse input filtering");
} }
void void
@ -398,42 +399,36 @@ IN_Frame (void)
} }
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
JOY_Move (cmd);
JOY_Move ();
if (!mouse_avail) if (!mouse_avail)
return; return;
/* from vid_sdl.c
if (m_filter->value) { if (m_filter->value) {
mouse_x = (mouse_x + old_mouse_x) * 0.5; mouse_x = (mouse_x + old_mouse_x) * 0.5;
mouse_y = (mouse_y + old_mouse_y) * 0.5; mouse_y = (mouse_y + old_mouse_y) * 0.5;
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
} }
old_mouse_x = mouse_x;
old_mouse_y = mouse_y;
*/
mouse_x *= sensitivity->value; mouse_x *= sensitivity->value;
mouse_y *= sensitivity->value; mouse_y *= sensitivity->value;
if ((in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1))) if ((in_strafe.state & 1) || (lookstrafe->value && (in_mlook.state & 1)))
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] = viewdelta.angles[PITCH] += mouse_y;
bound (-70, cl.viewangles[PITCH] + (m_pitch->value * mouse_y), 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
mouse_x = mouse_y = 0.0; mouse_x = mouse_y = 0.0;
} }

View file

@ -358,9 +358,10 @@ IN_Commands (void)
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
JOY_Move (cmd); JOY_Move ();
if (!UseMouse) if (!UseMouse)
return; return;
@ -384,22 +385,18 @@ IN_Move (usercmd_t *cmd)
/* Add mouse X/Y movement to cmd */ /* Add mouse X/Y movement to cmd */
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) { if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) {
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
} else { } else {
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
} }
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) { if ((in_strafe.state & 1) && noclip_anglehack) {
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
} else { } else {
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
} }
} }

View file

@ -124,7 +124,7 @@ extern void JOY_Command(void);
extern void JOY_Init_Cvars(void); extern void JOY_Init_Cvars(void);
extern void JOY_Init (void); extern void JOY_Init (void);
extern void JOY_AdvancedUpdate_f (void); extern void JOY_AdvancedUpdate_f (void);
extern void JOY_Move (usercmd_t *cmd); extern void JOY_Move (void);
/* /*
Force_CenterView_f Force_CenterView_f
@ -482,7 +482,7 @@ IN_MouseEvent (int mstate)
IN_MouseMove IN_MouseMove
*/ */
void void
IN_MouseMove (usercmd_t *cmd) IN_MouseMove (void)
{ {
int mx, my; int mx, my;
@ -587,21 +587,17 @@ IN_MouseMove (usercmd_t *cmd)
// add mouse X/Y movement to cmd // add mouse X/Y movement to cmd
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook))
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
// if the mouse has moved, force it to the center, so there's room to move // if the mouse has moved, force it to the center, so there's room to move
@ -619,8 +615,8 @@ IN_Move (usercmd_t *cmd)
{ {
if (ActiveApp && !Minimized) { if (ActiveApp && !Minimized) {
IN_MouseMove (cmd); IN_MouseMove ();
JOY_Move (cmd); JOY_Move ();
} }
} }

View file

@ -432,9 +432,9 @@ IN_SendKeyEvents (void)
void void
IN_Move (usercmd_t *cmd) IN_Move (void)
{ {
JOY_Move (cmd); JOY_Move ();
if (!mouse_avail) if (!mouse_avail)
return; return;
@ -451,21 +451,17 @@ IN_Move (usercmd_t *cmd)
mouse_y *= sensitivity->value; mouse_y *= sensitivity->value;
if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook)) if ((in_strafe.state & 1) || (lookstrafe->int_val && freelook))
cmd->sidemove += m_side->value * mouse_x; viewdelta.position[0] += mouse_x;
else else
cl.viewangles[YAW] -= m_yaw->value * mouse_x; viewdelta.angles[YAW] -= mouse_x;
if (freelook)
V_StopPitchDrift ();
if (freelook && !(in_strafe.state & 1)) { if (freelook && !(in_strafe.state & 1)) {
cl.viewangles[PITCH] += m_pitch->value * mouse_y; viewdelta.angles[PITCH] += mouse_y;
cl.viewangles[PITCH] = bound (-70, cl.viewangles[PITCH], 80);
} else { } else {
if ((in_strafe.state & 1) && noclip_anglehack) if ((in_strafe.state & 1) && noclip_anglehack)
cmd->upmove -= m_forward->value * mouse_y; viewdelta.position[1] -= mouse_y;
else else
cmd->forwardmove -= m_forward->value * mouse_y; viewdelta.position[2] -= mouse_y;
} }
mouse_x = mouse_y = 0.0; mouse_x = mouse_y = 0.0;
} }