summaryrefslogtreecommitdiff
path: root/internal_rewrite/c_base_player.cpp
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2018-11-21 18:45:39 +0100
committernavewindre <boneyaard@gmail.com>2018-11-21 18:45:39 +0100
commit0bc63d4dbbfe4fb74b4114f0ae11bfe8c87d5cc9 (patch)
treec549a36b0daaa27d7463a7236b9e90223161f88e /internal_rewrite/c_base_player.cpp
parent83237c211f21b83959f234b58f44980423864f02 (diff)
d
Diffstat (limited to 'internal_rewrite/c_base_player.cpp')
-rw-r--r--internal_rewrite/c_base_player.cpp29
1 files changed, 23 insertions, 6 deletions
diff --git a/internal_rewrite/c_base_player.cpp b/internal_rewrite/c_base_player.cpp
index 957aa2a..a4cdb7e 100644
--- a/internal_rewrite/c_base_player.cpp
+++ b/internal_rewrite/c_base_player.cpp
@@ -890,16 +890,33 @@ void c_base_player::fix_animations( bool reset, bool resolver_change ) {
float prev_cycle = m_AnimOverlay( ).GetElements( )[ 6 ].m_flPrevCycle;
float prev_rate = m_AnimOverlay( ).GetElements( )[ 6 ].m_flPlaybackRate;
- /*needs testing but seems to work*/
if( !reset ) {
- auto& layer = m_AnimOverlay( ).GetElements( )[ 3 ];
+ auto fraction = get_animstate( )->m_flStopToFullRunningFraction;
+ bool stopping = sm_animdata[ idx ].m_is_stopping;
- int sequence = get_seq_activity( layer.m_nSequence );
+ if( fraction > 0.1f && fraction < 1.f ) {
+ float delta_2x = get_animstate( )->m_flLastUpdateDelta * 2.f;
- if( sequence == 979 ) {
- //if( sm_animdata[ idx ].m_adjust_cycle + sm_animdata[ idx ].m_adjust_rate >= 1.f )
- // eye_angles.y = m_flLowerBodyYawTarget( );
+ if( stopping )
+ fraction -= delta_2x;
+ else
+ fraction += delta_2x;
+
+ fraction = std::clamp( fraction, 0.f, 1.f );
+ }
+
+ auto speed = get_anim_velocity( ).length2d( );
+
+ if( speed > 135.2f && stopping ) {
+ sm_animdata[ idx ].m_is_stopping = false;
+ fraction = std::max( fraction, 0.0099999998f );
+ }
+ if( speed < 135.2f && !stopping ) {
+ sm_animdata[ idx ].m_is_stopping = true;
+ fraction = std::min( fraction, 0.99000001f );
}
+
+ get_animstate( )->m_flStopToFullRunningFraction = fraction;
}
get_animstate( )->update( eye_angles.y, eye_angles.x );