summaryrefslogtreecommitdiff
path: root/game/shared/usercmd.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/usercmd.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/shared/usercmd.h')
-rw-r--r--game/shared/usercmd.h180
1 files changed, 180 insertions, 0 deletions
diff --git a/game/shared/usercmd.h b/game/shared/usercmd.h
new file mode 100644
index 0000000..0005bde
--- /dev/null
+++ b/game/shared/usercmd.h
@@ -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