summaryrefslogtreecommitdiff
path: root/internal_rewrite/c_base_player.cpp
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2018-08-30 22:58:37 +0200
committernavewindre <boneyaard@gmail.com>2018-08-30 22:58:37 +0200
commit1f3f1ab2a20c6d90189cf1fd03cfbb08077bc02e (patch)
tree04595c6b6bb31b43811270961668dae2f8c9ed61 /internal_rewrite/c_base_player.cpp
parentc4e18b4e500dc603fb7546b7bc9bc574fb09e0a8 (diff)
dsad
Diffstat (limited to 'internal_rewrite/c_base_player.cpp')
-rw-r--r--internal_rewrite/c_base_player.cpp38
1 files changed, 34 insertions, 4 deletions
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;