From 1f3f1ab2a20c6d90189cf1fd03cfbb08077bc02e Mon Sep 17 00:00:00 2001 From: navewindre Date: Thu, 30 Aug 2018 22:58:37 +0200 Subject: dsad --- internal_rewrite/c_base_player.cpp | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'internal_rewrite/c_base_player.cpp') diff --git a/internal_rewrite/c_base_player.cpp b/internal_rewrite/c_base_player.cpp index 0cc95aa..5274f63 100644 --- a/internal_rewrite/c_base_player.cpp +++ b/internal_rewrite/c_base_player.cpp @@ -675,6 +675,31 @@ void c_base_player::calc_abs_velocity( ) { } } +void c_base_player::fix_jump_fall( bool reset ) { + if( reset ) + return; + + int prev_flags = get_animdata( ).m_prev_flags; + int flags = m_fFlags( ); + + if( ( prev_flags & FL_ONGROUND ) && ( flags & FL_ONGROUND ) ) { + flags |= FL_ONGROUND; + } + else { + auto layer_weight = m_AnimOverlay( ).GetElements( )[ 4 ].m_flWeight; + auto last_weight = get_animdata( ).m_last_layers.at( 4 ).m_flWeight; + + if( layer_weight != 1.f && last_weight == 1.f && + m_AnimOverlay( ).GetElements( )[ 5 ].m_flWeight != 0.f ) + flags |= FL_ONGROUND; + + if( ( flags & FL_ONGROUND ) && !( prev_flags & FL_ONGROUND ) ) + flags &= ~FL_ONGROUND; + } + + m_fFlags( ) = flags; +} + void c_base_player::fix_animations( bool reset, bool resolver_change ) { //todo: legs dont match up when fakelagging <- not anymore int idx = ce( )->GetIndex( ); @@ -732,6 +757,7 @@ void c_base_player::fix_animations( bool reset, bool resolver_change ) { set_abs_origin( m_vecOrigin( ) ); //networked duck amount comes from the last simulation tick instead of the current one calculate_duckamount( reset ); + fix_jump_fall( reset ); validate_animation_layers( ); float old_cycle = m_AnimOverlay( ).GetElements( )[ 6 ].m_flCycle; @@ -751,8 +777,16 @@ void c_base_player::fix_animations( bool reset, bool resolver_change ) { } sm_animdata[ idx ].m_last_duck = m_flDuckAmount( ); + get_animstate( )->update( eye_angles.y, eye_angles.x ); + get_animdata( ).m_prev_flags = flags; + memcpy( + get_animdata( ).m_last_layers.data( ), + m_AnimOverlay( ).GetElements( ), + sizeof( C_AnimationLayer ) * 13 + ); + sm_animdata[ idx ].m_fraction = get_animstate( )->m_flUnknownFraction; m_vecVelocity( ) = velocity; @@ -762,8 +796,6 @@ void c_base_player::fix_animations( bool reset, bool resolver_change ) { m_AnimOverlay( ).GetElements( )[ 6 ].m_flPrevCycle = old_cycle; - //estimate_layers( reset ); - //check for any possible mistakes validate_animation_layers( ); @@ -804,8 +836,6 @@ void c_base_player::fix_animations( bool reset, bool resolver_change ) { invalidate_bone_cache( ); ce( )->SetupBones( nullptr, -1, BONE_USED_BY_ANYTHING, anim_time ); cache_anim_data( ); - ///let the game calculate its velocity again... - //calc_abs_velocity( ); g_csgo.m_globals->m_curtime = backup_curtime; g_csgo.m_globals->m_frametime = backup_frametime; -- cgit v1.2.3