diff options
Diffstat (limited to 'cheat/internal_rewrite/c_base_player.cpp')
| -rw-r--r-- | cheat/internal_rewrite/c_base_player.cpp | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/cheat/internal_rewrite/c_base_player.cpp b/cheat/internal_rewrite/c_base_player.cpp index b24e7b5..3ace4ab 100644 --- a/cheat/internal_rewrite/c_base_player.cpp +++ b/cheat/internal_rewrite/c_base_player.cpp @@ -720,7 +720,7 @@ void c_base_player::calc_anim_velocity( bool reset ) { vec3_t anim_vel;
- if( on_ground ) {
+ if( on_ground && !( m_fFlags( ) & FL_ONGROUND ) ) {
vec3_t ang = math::vector_angles( vec3_t( ), velocity );
float move_yaw = math::vector_angles( velocity ).y;
@@ -747,18 +747,16 @@ void c_base_player::calc_anim_velocity( bool reset ) { for( int i{ }; i < ticks; i++ ) {
est_tick_vel = friction( est_tick_vel );
- if( i <= ticks / 2 ) {
- accelerate( anim_vel, wishdir, m_fFlags( ) & FL_DUCKING ? 83.3333333f : 250.f, sv_accelerate->get_float( ) );
+ if( i <= ticks * 0.75f ) {
+ accelerate( anim_vel, wishdir, 250.f, sv_accelerate->get_float( ) );
}
-
- est_tick_vel = friction( est_tick_vel );
}
if( velocity.length2d( ) > last_velocity.length2d( ) )
- anim_vel = accelerate( anim_vel, wishdir, m_fFlags( ) & FL_DUCKING ? 83.3333333f : 250.f, sv_accelerate->get_float( ) );
+ anim_vel = accelerate( anim_vel, wishdir, 250.f, sv_accelerate->get_float( ) );
//assume fakewalk
- if( anim_vel.length2d( ) >= sm_animdata[ idx ].m_anim_velocity.length2d( ) && est_tick_vel.length2d( ) < 5.f && delta > TICK_INTERVAL( ) )
+ if( anim_vel.length2d( ) >= sm_animdata[ idx ].m_anim_velocity.length2d( ) && est_tick_vel.length2d( ) < 1.f && delta > TICK_INTERVAL( ) )
anim_vel = vec3_t( );
}
else {
@@ -816,6 +814,8 @@ void c_base_player::fix_jump_fall( bool reset ) { void c_base_player::fix_animations( bool reset, bool resolver_change ) {
//todo: legs dont match up when fakelagging <- not anymore
int idx = ce( )->GetIndex( );
+
+ bool was_valid = sm_animdata[ idx ].m_valid;
sm_animdata[ idx ].m_valid = false;
if( !get_animstate( ) )
@@ -921,17 +921,27 @@ void c_base_player::fix_animations( bool reset, bool resolver_change ) { }
sm_animdata[ idx ].m_last_animtime = get_animstate( )->m_flLastClientSideAnimationUpdateTime;
- get_animstate( )->update( eye_angles.y, eye_angles.x );
m_AnimOverlay( ).GetElements( )[ 6 ].m_flPrevCycle = m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle;
+ get_animstate( )->update( eye_angles.y, eye_angles.x );
- float lerp_rate = math::lerp(
- prev_rate,
- m_AnimOverlay( ).GetElements( )[ 6 ].m_flPlaybackRate,
- TICK_INTERVAL( ) / ( m_flSimulationTime( ) - m_flOldSimulationTime( ) ) );
+ if( was_valid && !reset ) {
+ float lerp_rate = math::lerp(
+ prev_rate,
+ m_AnimOverlay( ).GetElements( )[ 6 ].m_flPlaybackRate,
+ TICK_INTERVAL( ) / ( m_flSimulationTime( ) - m_flOldSimulationTime( ) ) );
- if( !reset ) {
- //m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle = prev_cycle + lerp_rate;
+ m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle = prev_cycle + lerp_rate;
}
+ else if( !reset ) {
+ float cycle = m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle;
+ float rate = m_AnimOverlay( ).GetElements( )[ 6 ].m_flPlaybackRate;
+
+ float est_cycle = cycle - rate + ( rate * TICK_INTERVAL( ) / ( m_flSimulationTime( ) - m_flOldSimulationTime( ) ) );
+
+ m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle = est_cycle;
+ }
+
+ m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle = std::fmod( m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle, 1.0f );
get_animdata( ).m_prev_flags = flags;
memcpy(
|
