diff --git a/game/client/in_main.cpp b/game/client/in_main.cpp index 9b44154ede..a3b2bf495d 100644 --- a/game/client/in_main.cpp +++ b/game/client/in_main.cpp @@ -9,6 +9,8 @@ #include "cbase.h" +#include "baseentity_shared.h" +#include "c_baseanimating.h" #include #include #include "bone_setup.h" @@ -1298,12 +1300,6 @@ void CInput::CreateMove ( int sequence_number, float input_sample_frametime, boo m_EntityGroundContact.RemoveAll(); #endif - for (int i = 0; i < MAX_EDICTS; i++) - { - cmd->has_simulation[i] = false; - cmd->has_animation[i] = false; - } - // Send interpolated simulation time for lag compensation for (int i = 0; i <= ClientEntityList().GetHighestEntityIndex(); i++) { @@ -1314,23 +1310,8 @@ void CInput::CreateMove ( int sequence_number, float input_sample_frametime, boo continue; } - cmd->has_simulation[pEntity->index] = true; - cmd->simulationtimes[pEntity->index] = pEntity->m_flInterpolatedSimulationTime; - - if (pEntity->index < 1 && pEntity->index > MAX_PLAYERS) - { - continue; - } - - auto pBasePlayer = ToBasePlayer(pEntity); - - if (!pBasePlayer) - { - continue; - } - - cmd->has_animation[pBasePlayer->index] = true; - cmd->animationdata[pBasePlayer->index].m_flUninterpolatedSimulationTime = pBasePlayer->m_flSimulationTime; + cmd->simulationdata[pEntity->index].m_flInterpolatedSimulationTime = pEntity->m_flInterpolatedSimulationTime; + cmd->simulationdata[pEntity->index].m_flSimulationTime = pEntity->m_flSimulationTime; } static ConVarRef cl_showhitboxes("cl_showhitboxes"); diff --git a/game/server/player_lagcompensation.cpp b/game/server/player_lagcompensation.cpp index a7134872e6..9d43980cc1 100644 --- a/game/server/player_lagcompensation.cpp +++ b/game/server/player_lagcompensation.cpp @@ -398,8 +398,8 @@ void CLagCompensationManager::BacktrackPlayer( CBasePlayer *pPlayer, CUserCmd *c VPROF_BUDGET( "BacktrackPlayer", "CLagCompensationManager" ); int pl_index = pPlayer->entindex() - 1; - float flTargetSimulationTime = cmd->simulationtimes[pl_index + 1]; - auto animationData = &cmd->animationdata[pl_index + 1]; + float flTargetSimulationTime = cmd->simulationdata[pl_index + 1].m_flInterpolatedSimulationTime; + float flTargetSimulatedAnimationTime = cmd->simulationdata[pl_index + 1].m_flSimulationTime; // get track history of this player CUtlFixedLinkedList< LagRecord > *trackSim = &m_PlayerTrack[ pl_index ]; @@ -428,7 +428,7 @@ void CLagCompensationManager::BacktrackPlayer( CBasePlayer *pPlayer, CUserCmd *c recordSim = &trackSim->Element(currSim); if (recordSim->m_flSimulationTime - <= animationData->m_flUninterpolatedSimulationTime && !foundAnimationData) + <= flTargetSimulatedAnimationTime && !foundAnimationData) { recordAnim = recordSim; foundAnimationData = true; diff --git a/game/server/rope.cpp b/game/server/rope.cpp index 7ca53298b8..b204e817b4 100644 --- a/game/server/rope.cpp +++ b/game/server/rope.cpp @@ -43,7 +43,7 @@ IMPLEMENT_SERVERCLASS_ST_NOBASE( CRopeKeyframe, DT_RopeKeyframe ) SendPropInt( SENDINFO(m_iRopeMaterialModelIndex), 16, SPROP_UNSIGNED ), SendPropInt( SENDINFO(m_Subdiv), 4, SPROP_UNSIGNED ), - SendPropFloat( SENDINFO(m_TextureScale), 10, 0, 0.1f, 10.0f ), + SendPropFloat( SENDINFO(m_TextureScale), 10, 0, 0.0f, 10.0f ), SendPropFloat( SENDINFO(m_Width), 0, SPROP_NOSCALE ), SendPropFloat( SENDINFO(m_flScrollSpeed), 0, SPROP_NOSCALE ), diff --git a/game/shared/usercmd.cpp b/game/shared/usercmd.cpp index 5b8434b8dc..b19f39cc84 100644 --- a/game/shared/usercmd.cpp +++ b/game/shared/usercmd.cpp @@ -192,36 +192,23 @@ void WriteUsercmd( bf_write *buf, const CUserCmd *to, const CUserCmd *from ) { for (int i = 0; i <= entityCount; i++) { - buf->WriteOneBit(to->has_simulation[i]); - - if (!to->has_simulation[i]) - { - continue; - } - - if (to->simulationtimes[i] != from->simulationtimes[i]) + if (to->simulationdata[i].m_flInterpolatedSimulationTime + != from->simulationdata[i].m_flInterpolatedSimulationTime) { buf->WriteOneBit(1); - buf->WriteFloat(to->simulationtimes[i]); + buf->WriteFloat( + to->simulationdata[i].m_flInterpolatedSimulationTime); } else { buf->WriteOneBit(0); } - buf->WriteOneBit(to->has_animation[i]); - - if (!to->has_animation[i]) - { - continue; - } - - if (to->animationdata[i].m_flUninterpolatedSimulationTime - != from->animationdata[i].m_flUninterpolatedSimulationTime) + if (to->simulationdata[i].m_flSimulationTime + != from->simulationdata[i].m_flSimulationTime) { buf->WriteOneBit(1); - buf->WriteFloat( - to->animationdata[i].m_flUninterpolatedSimulationTime); + buf->WriteFloat(to->simulationdata[i].m_flSimulationTime); } else { @@ -365,31 +352,16 @@ void ReadUsercmd( bf_read *buf, CUserCmd *move, CUserCmd *from ) { for (int i = 0; i <= entityCount; i++) { - // Has simulation ? - move->has_simulation[i] = buf->ReadOneBit(); - - if (!move->has_simulation[i]) + if (buf->ReadOneBit()) { - continue; + move->simulationdata[i].m_flInterpolatedSimulationTime = buf + ->ReadFloat(); } if (buf->ReadOneBit()) { - move->simulationtimes[i] = buf->ReadFloat(); - } - - // Has animation ? - move->has_animation[i] = buf->ReadOneBit(); - - if (!move->has_animation[i]) - { - continue; - } - - if (buf->ReadOneBit()) - { - move->animationdata[i].m_flUninterpolatedSimulationTime = buf - ->ReadFloat(); + move->simulationdata[i].m_flSimulationTime = buf + ->ReadFloat(); } } } diff --git a/game/shared/usercmd.h b/game/shared/usercmd.h index 161241d3db..25efcf56e7 100644 --- a/game/shared/usercmd.h +++ b/game/shared/usercmd.h @@ -5,6 +5,7 @@ // $NoKeywords: $ // //=============================================================================// +#include "const.h" #ifdef CLIENT_DLL #include "cbase.h" #endif @@ -51,12 +52,13 @@ struct LayerRecord } }; -struct ClientSideAnimationData +struct SimulationData { // TODO_ENHANCED: // For now we send the last received update for animations. // anim time is unreliable on low fps. - float m_flUninterpolatedSimulationTime; + float m_flInterpolatedSimulationTime; + float m_flSimulationTime; }; class CEntityGroundContact @@ -93,18 +95,11 @@ public: mousedx = 0; mousedy = 0; - hasbeenpredicted = false; + hasbeenpredicted = false; for (int i = 0; i < MAX_EDICTS; i++) { - simulationtimes[i] = 0.0f; - has_simulation[i] = false; - has_animation[i] = false; - } - - for (int i = 0; i <= MAX_PLAYERS; i++) - { - animationdata[i] = {}; + simulationdata[i] = {}; } debug_hitboxes = DEBUG_HITBOXES_OFF; #if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL ) @@ -135,14 +130,7 @@ public: for (int i = 0; i < MAX_EDICTS; i++) { - simulationtimes[i] = src.simulationtimes[i]; - has_simulation[i] = src.has_simulation[i]; - has_animation[i] = src.has_animation[i]; - } - - for (int i = 0; i <= MAX_PLAYERS; i++) - { - animationdata[i] = src.animationdata[i]; + simulationdata[i] = src.simulationdata[i]; } debug_hitboxes = src.debug_hitboxes; #if defined( HL2_DLL ) || defined( HL2_CLIENT_DLL ) @@ -175,10 +163,7 @@ public: CRC32_ProcessBuffer( &crc, &random_seed, sizeof( random_seed ) ); CRC32_ProcessBuffer( &crc, &mousedx, sizeof( mousedx ) ); CRC32_ProcessBuffer(&crc, &mousedy, sizeof(mousedy)); - CRC32_ProcessBuffer(&crc, has_simulation, sizeof(has_simulation)); - CRC32_ProcessBuffer(&crc, has_animation, sizeof(has_animation)); - CRC32_ProcessBuffer( &crc, simulationtimes, sizeof( simulationtimes ) ); - CRC32_ProcessBuffer(&crc, animationdata, sizeof(animationdata)); + CRC32_ProcessBuffer(&crc, simulationdata, sizeof(simulationdata)); CRC32_ProcessBuffer(&crc, &debug_hitboxes, sizeof(debug_hitboxes)); CRC32_Final( &crc ); @@ -230,10 +215,7 @@ public: // TODO_ENHANCED: Lag compensate also other entities when needed. // Send simulation times for each players for lag compensation. - bool has_simulation[MAX_EDICTS]; - bool has_animation[MAX_EDICTS]; - float simulationtimes[MAX_EDICTS]; - ClientSideAnimationData animationdata[MAX_PLAYERS+1]; + SimulationData simulationdata[MAX_EDICTS]; enum debug_hitboxes_t : uint8 {