From bca49754578cd6c002fa258f89fe85bb9966e9c1 Mon Sep 17 00:00:00 2001 From: navewindre Date: Wed, 5 Dec 2018 00:08:02 +0100 Subject: Auto stash before merge of "master" and "origin/master" --- cheat/internal_rewrite/c_base_player.cpp | 38 ++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 14 deletions(-) (limited to 'cheat/internal_rewrite/c_base_player.cpp') 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( -- cgit v1.2.3