You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.9 KiB
113 lines
2.9 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: Mouse input routines |
|
// |
|
// $Workfile: $ |
|
// $Date: $ |
|
// $NoKeywords: $ |
|
//===========================================================================// |
|
#if defined( WIN32 ) && !defined( _X360 ) |
|
#define _WIN32_WINNT 0x0502 |
|
#include <windows.h> |
|
#endif |
|
#include "cbase.h" |
|
#include "hud.h" |
|
#include "cdll_int.h" |
|
#include "kbutton.h" |
|
#include "basehandle.h" |
|
#include "usercmd.h" |
|
#include "input.h" |
|
#include "iviewrender.h" |
|
#include "iclientmode.h" |
|
#include "tier0/icommandline.h" |
|
#include "vgui/ISurface.h" |
|
#include "vgui_controls/Controls.h" |
|
#include "vgui/Cursor.h" |
|
#include "cdll_client_int.h" |
|
#include "cdll_util.h" |
|
#include "tier1/convar_serverbounded.h" |
|
#include "cam_thirdperson.h" |
|
#include "inputsystem/iinputsystem.h" |
|
#include "touch.h" |
|
|
|
// up / down |
|
#define PITCH 0 |
|
// left / right |
|
#define YAW 1 |
|
|
|
extern ConVar cl_sidespeed; |
|
extern ConVar cl_forwardspeed; |
|
extern ConVar sensitivity; |
|
extern ConVar lookstrafe; |
|
extern ConVar thirdperson_platformer; |
|
extern ConVar touch_pitch; |
|
extern ConVar touch_yaw; |
|
extern ConVar default_fov; |
|
|
|
#ifdef PORTAL |
|
extern bool g_bUpsideDown; |
|
#endif |
|
|
|
ConVar touch_enable_accel( "touch_enable_accel", "0", FCVAR_ARCHIVE ); |
|
ConVar touch_accel( "touch_accel", "1.f", FCVAR_ARCHIVE ); |
|
ConVar touch_reverse( "touch_reverse", "0", FCVAR_ARCHIVE ); |
|
ConVar touch_sensitivity( "touch_sensitivity", "3.0", FCVAR_ARCHIVE, "touch look sensitivity" ); |
|
|
|
void CInput::TouchScale( float &dx, float &dy ) |
|
{ |
|
dx *= touch_yaw.GetFloat(); |
|
dy *= touch_pitch.GetFloat(); |
|
|
|
float sensitivity = touch_sensitivity.GetFloat() * gHUD.GetFOVSensitivityAdjust() * ( touch_reverse.GetBool() ? -1.f : 1.f ); |
|
|
|
if( touch_enable_accel.GetBool() ) |
|
{ |
|
float raw_touch_movement_distance_squared = dx * dx + dy * dy; |
|
float fExp = MAX(0.0f, (touch_accel.GetFloat() - 1.0f) / 2.0f); |
|
float accelerated_sensitivity = powf( raw_touch_movement_distance_squared, fExp ) * sensitivity; |
|
|
|
dx *= accelerated_sensitivity; |
|
dy *= accelerated_sensitivity; |
|
} |
|
else |
|
{ |
|
dx *= sensitivity; |
|
dy *= sensitivity; |
|
} |
|
} |
|
|
|
void CInput::ApplyTouch( QAngle &viewangles, CUserCmd *cmd, float dx, float dy ) |
|
{ |
|
viewangles[YAW] -= dx; |
|
viewangles[PITCH] += dy; |
|
cmd->mousedx = dx; |
|
cmd->mousedy = dy; |
|
} |
|
|
|
void CInput::TouchMove( CUserCmd *cmd ) |
|
{ |
|
QAngle viewangles; |
|
float dx,dy,side,forward,pitch,yaw; |
|
|
|
engine->GetViewAngles( viewangles ); |
|
|
|
view->StopPitchDrift(); |
|
|
|
gTouch.GetTouchAccumulators( &side, &forward, &yaw, &pitch ); |
|
|
|
cmd->sidemove -= cl_sidespeed.GetFloat() * side; |
|
cmd->forwardmove += cl_forwardspeed.GetFloat() * forward; |
|
|
|
gTouch.GetTouchDelta( yaw, pitch, &dx, &dy ); |
|
|
|
TouchScale( dx, dy ); |
|
|
|
// Let the client mode at the mouse input before it's used |
|
g_pClientMode->OverrideMouseInput( &dx, &dy ); |
|
|
|
// Add mouse X/Y movement to cmd |
|
ApplyTouch( viewangles, cmd, dx, dy ); |
|
|
|
// Store out the new viewangles. |
|
engine->SetViewAngles( viewangles ); |
|
}
|
|
|