mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-05 22:09:59 +03:00
1
This commit is contained in:
180
game/shared/usercmd.h
Normal file
180
game/shared/usercmd.h
Normal file
@@ -0,0 +1,180 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//
|
||||
//=============================================================================//
|
||||
#if !defined( USERCMD_H )
|
||||
#define USERCMD_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "mathlib/vector.h"
|
||||
#include "utlvector.h"
|
||||
#include "imovehelper.h"
|
||||
#include "checksum_crc.h"
|
||||
|
||||
|
||||
class bf_read;
|
||||
class bf_write;
|
||||
|
||||
class CEntityGroundContact
|
||||
{
|
||||
public:
|
||||
int entindex;
|
||||
float minheight;
|
||||
float maxheight;
|
||||
};
|
||||
|
||||
class CUserCmd
|
||||
{
|
||||
public:
|
||||
CUserCmd()
|
||||
{
|
||||
Reset();
|
||||
}
|
||||
|
||||
virtual ~CUserCmd() { };
|
||||
|
||||
void Reset()
|
||||
{
|
||||
command_number = 0;
|
||||
tick_count = 0;
|
||||
viewangles.Init();
|
||||
forwardmove = 0.0f;
|
||||
sidemove = 0.0f;
|
||||
upmove = 0.0f;
|
||||
buttons = 0;
|
||||
impulse = 0;
|
||||
weaponselect = 0;
|
||||
weaponsubtype = 0;
|
||||
random_seed = 0;
|
||||
#ifdef GAME_DLL
|
||||
server_random_seed = 0;
|
||||
#endif
|
||||
mousedx = 0;
|
||||
mousedy = 0;
|
||||
|
||||
hasbeenpredicted = false;
|
||||
#if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL )
|
||||
entitygroundcontact.RemoveAll();
|
||||
#endif
|
||||
}
|
||||
|
||||
CUserCmd& operator =( const CUserCmd& src )
|
||||
{
|
||||
if ( this == &src )
|
||||
return *this;
|
||||
|
||||
command_number = src.command_number;
|
||||
tick_count = src.tick_count;
|
||||
viewangles = src.viewangles;
|
||||
forwardmove = src.forwardmove;
|
||||
sidemove = src.sidemove;
|
||||
upmove = src.upmove;
|
||||
buttons = src.buttons;
|
||||
impulse = src.impulse;
|
||||
weaponselect = src.weaponselect;
|
||||
weaponsubtype = src.weaponsubtype;
|
||||
random_seed = src.random_seed;
|
||||
#ifdef GAME_DLL
|
||||
server_random_seed = src.server_random_seed;
|
||||
#endif
|
||||
mousedx = src.mousedx;
|
||||
mousedy = src.mousedy;
|
||||
|
||||
hasbeenpredicted = src.hasbeenpredicted;
|
||||
|
||||
#if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL )
|
||||
entitygroundcontact = src.entitygroundcontact;
|
||||
#endif
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
CUserCmd( const CUserCmd& src )
|
||||
{
|
||||
*this = src;
|
||||
}
|
||||
|
||||
CRC32_t GetChecksum( void ) const
|
||||
{
|
||||
CRC32_t crc;
|
||||
|
||||
CRC32_Init( &crc );
|
||||
CRC32_ProcessBuffer( &crc, &command_number, sizeof( command_number ) );
|
||||
CRC32_ProcessBuffer( &crc, &tick_count, sizeof( tick_count ) );
|
||||
CRC32_ProcessBuffer( &crc, &viewangles, sizeof( viewangles ) );
|
||||
CRC32_ProcessBuffer( &crc, &forwardmove, sizeof( forwardmove ) );
|
||||
CRC32_ProcessBuffer( &crc, &sidemove, sizeof( sidemove ) );
|
||||
CRC32_ProcessBuffer( &crc, &upmove, sizeof( upmove ) );
|
||||
CRC32_ProcessBuffer( &crc, &buttons, sizeof( buttons ) );
|
||||
CRC32_ProcessBuffer( &crc, &impulse, sizeof( impulse ) );
|
||||
CRC32_ProcessBuffer( &crc, &weaponselect, sizeof( weaponselect ) );
|
||||
CRC32_ProcessBuffer( &crc, &weaponsubtype, sizeof( weaponsubtype ) );
|
||||
CRC32_ProcessBuffer( &crc, &random_seed, sizeof( random_seed ) );
|
||||
CRC32_ProcessBuffer( &crc, &mousedx, sizeof( mousedx ) );
|
||||
CRC32_ProcessBuffer( &crc, &mousedy, sizeof( mousedy ) );
|
||||
CRC32_Final( &crc );
|
||||
|
||||
return crc;
|
||||
}
|
||||
|
||||
// Allow command, but negate gameplay-affecting values
|
||||
void MakeInert( void )
|
||||
{
|
||||
viewangles = vec3_angle;
|
||||
forwardmove = 0.f;
|
||||
sidemove = 0.f;
|
||||
upmove = 0.f;
|
||||
buttons = 0;
|
||||
impulse = 0;
|
||||
}
|
||||
|
||||
// For matching server and client commands for debugging
|
||||
int command_number;
|
||||
|
||||
// the tick the client created this command
|
||||
int tick_count;
|
||||
|
||||
// Player instantaneous view angles.
|
||||
QAngle viewangles;
|
||||
// Intended velocities
|
||||
// forward velocity.
|
||||
float forwardmove;
|
||||
// sideways velocity.
|
||||
float sidemove;
|
||||
// upward velocity.
|
||||
float upmove;
|
||||
// Attack button states
|
||||
int buttons;
|
||||
// Impulse command issued.
|
||||
byte impulse;
|
||||
// Current weapon id
|
||||
int weaponselect;
|
||||
int weaponsubtype;
|
||||
|
||||
int random_seed; // For shared random functions
|
||||
#ifdef GAME_DLL
|
||||
int server_random_seed; // Only the server populates this seed
|
||||
#endif
|
||||
|
||||
short mousedx; // mouse accum in x from create move
|
||||
short mousedy; // mouse accum in y from create move
|
||||
|
||||
// Client only, tracks whether we've predicted this command at least once
|
||||
bool hasbeenpredicted;
|
||||
|
||||
// Back channel to communicate IK state
|
||||
#if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL )
|
||||
CUtlVector< CEntityGroundContact > entitygroundcontact;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from );
|
||||
void WriteUsercmd( bf_write *buf, const CUserCmd *to, const CUserCmd *from );
|
||||
|
||||
#endif // USERCMD_H
|
||||
Reference in New Issue
Block a user