114 lines
2.9 KiB
C++
114 lines
2.9 KiB
C++
|
//========= 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 );
|
||
|
}
|