Skip to content

Commit

Permalink
Merge pull request #41 from TomyLobo/fix-slope-slide
Browse files Browse the repository at this point in the history
Split up m_flSlideTime into m_flSlideStartTime and m_flSlideAutoEndTime
  • Loading branch information
TomyLobo committed Apr 1, 2016
2 parents 7612309 + 40882ae commit 54fb178
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 28 deletions.
10 changes: 6 additions & 4 deletions mp/src/game/client/da/c_da_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,9 @@ BEGIN_RECV_TABLE_NOBASE( CDAPlayerShared, DT_DAPlayerShared )
RecvPropBool( RECVINFO( m_bSliding ) ),
RecvPropBool( RECVINFO( m_bInAirSlide ) ),
RecvPropVector( RECVINFO(m_vecSlideDirection) ),
RecvPropTime( RECVINFO(m_flSlideTime) ),
RecvPropTime( RECVINFO( m_flUnSlideTime ) ),
RecvPropTime( RECVINFO(m_flSlideStartTime) ),
RecvPropTime( RECVINFO(m_flSlideAutoEndTime) ),
RecvPropTime( RECVINFO( m_flLastUnSlideTime ) ),
RecvPropBool( RECVINFO( m_bDiveSliding ) ),
RecvPropVector( RECVINFO(m_vecUnSlideEyeStartOffset) ),
RecvPropTime( RECVINFO( m_flLastDuckPress ) ),
Expand Down Expand Up @@ -277,8 +278,9 @@ BEGIN_PREDICTION_DATA_NO_BASE( CDAPlayerShared )
DEFINE_PRED_FIELD( m_bSliding, FIELD_BOOLEAN, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_bInAirSlide, FIELD_BOOLEAN, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_vecSlideDirection, FIELD_VECTOR, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_flSlideTime, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_flUnSlideTime, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_flSlideStartTime, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_flSlideAutoEndTime, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_flLastUnSlideTime, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_vecUnSlideEyeStartOffset, FIELD_VECTOR, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_bDiveSliding, FIELD_BOOLEAN, FTYPEDESC_INSENDTABLE ),
DEFINE_PRED_FIELD( m_flLastDuckPress, FIELD_FLOAT, FTYPEDESC_INSENDTABLE ),
Expand Down
5 changes: 3 additions & 2 deletions mp/src/game/server/da/da_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,9 @@ BEGIN_SEND_TABLE_NOBASE( CDAPlayerShared, DT_DAPlayerShared )
SendPropBool( SENDINFO( m_bSliding ) ),
SendPropBool( SENDINFO( m_bInAirSlide ) ),
SendPropVector( SENDINFO(m_vecSlideDirection) ),
SendPropTime( SENDINFO( m_flSlideTime ) ),
SendPropTime( SENDINFO( m_flUnSlideTime ) ),
SendPropTime( SENDINFO( m_flSlideStartTime ) ),
SendPropTime( SENDINFO( m_flSlideAutoEndTime ) ),
SendPropTime( SENDINFO( m_flLastUnSlideTime ) ),
SendPropVector( SENDINFO(m_vecUnSlideEyeStartOffset) ),
SendPropBool( SENDINFO( m_bDiveSliding ) ),
SendPropTime( SENDINFO( m_flLastDuckPress ) ),
Expand Down
14 changes: 8 additions & 6 deletions mp/src/game/shared/da/da_gamemovement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ class CDAGameMovement : public CGameMovement

#define ROLL_TIME 0.65f
#define ROLLFINISH_TIME 0.2f
// Time it takes for the eye offset to go from stand to slide
#define TIME_TO_SLIDE 0.2f
// Time between slide starts
#define TIME_TO_RESLIDE 0.75f
#define SLIDE_TIME 6.0f
#define DIVE_RISE_TIME 0.4f
Expand Down Expand Up @@ -1458,7 +1460,7 @@ void CDAGameMovement::FinishProne( void )

void CDAGameMovement::FinishUnSlide( void )
{
m_pDAPlayer->m_Shared.m_flUnSlideTime = 0.0f;
m_pDAPlayer->m_Shared.m_flLastUnSlideTime = 0.0f;

SetUnSlideEyeOffset( 1.0 );
m_pDAPlayer->m_Shared.EndSlide();
Expand Down Expand Up @@ -1831,7 +1833,7 @@ void CDAGameMovement::Duck( void )
}
if( m_pDAPlayer->m_Shared.IsGettingUpFromSlide() == true )
{
float slidetime = m_pDAPlayer->m_Shared.m_flUnSlideTime - m_pDAPlayer->GetCurrentTime();
float slidetime = m_pDAPlayer->m_Shared.m_flLastUnSlideTime - m_pDAPlayer->GetCurrentTime();

if( slidetime < 0 )
{
Expand Down Expand Up @@ -1877,7 +1879,7 @@ void CDAGameMovement::Duck( void )
m_pDAPlayer->m_Shared.SetAirSliding( true );
}
}
else */if (m_pDAPlayer->GetCurrentTime() - m_pDAPlayer->m_Shared.GetSlideTime() > da_slidetime.GetFloat() && !m_pDAPlayer->m_Shared.IsGettingUpFromSlide())
else */if (m_pDAPlayer->GetCurrentTime() > m_pDAPlayer->m_Shared.GetSlideAutoEndTime() && !m_pDAPlayer->m_Shared.IsGettingUpFromSlide())
{
// if there's no room to crouch indicate transition to prone
if( !CanUnprone() )
Expand All @@ -1898,7 +1900,7 @@ void CDAGameMovement::Duck( void )
}
else
{
float fraction = (m_pDAPlayer->GetCurrentTime() - m_pDAPlayer->m_Shared.GetSlideTime()) / TIME_TO_SLIDE;
float fraction = (m_pDAPlayer->GetCurrentTime() - m_pDAPlayer->m_Shared.GetSlideStartTime()) / TIME_TO_SLIDE;
SetSlideEyeOffset( fraction );
}
}
Expand Down Expand Up @@ -2076,7 +2078,7 @@ void CDAGameMovement::Duck( void )
bool bGetUp = !!(buttonsPressed & (IN_ALT1|IN_JUMP));
bool bGetUpFromProne = (m_pDAPlayer->GetCurrentTime() > m_pDAPlayer->m_Shared.m_flDisallowUnProneTime) && (bGetUp || !!(mv->m_nButtons & (IN_BACK|IN_FORWARD|IN_MOVELEFT|IN_MOVERIGHT)));

if (m_pDAPlayer->m_Shared.IsSliding() && (buttonsReleased & IN_ALT1) && m_pDAPlayer->GetCurrentTime() - m_pDAPlayer->m_Shared.GetSlideTime() > m_pDAPlayer->GetUserInfoFloat("da_slide_unclick_time", 0.25f))
if (m_pDAPlayer->m_Shared.IsSliding() && (buttonsReleased & IN_ALT1) && m_pDAPlayer->GetCurrentTime() - m_pDAPlayer->m_Shared.GetSlideStartTime() > m_pDAPlayer->GetUserInfoFloat("da_slide_unclick_time", 0.25f))
bGetUp = true;

bool bSlide = false;
Expand Down Expand Up @@ -2105,7 +2107,7 @@ void CDAGameMovement::Duck( void )
{
bSlide = (m_pDAPlayer->GetAbsVelocity().Length() > 10.0f) && (mv->m_nButtons & (IN_BACK|IN_FORWARD|IN_MOVELEFT|IN_MOVERIGHT)) &&
(m_pDAPlayer->GetFlags() & FL_ONGROUND) && (mv->m_nButtons & IN_DUCK) &&
(m_pDAPlayer->m_Shared.GetSlideTime() < (m_pDAPlayer->GetCurrentTime() - TIME_TO_RESLIDE));
(m_pDAPlayer->GetCurrentTime() - m_pDAPlayer->m_Shared.GetSlideStartTime() > TIME_TO_RESLIDE);

bDive = (m_pDAPlayer->GetAbsVelocity().Length() > 10.0f);
}
Expand Down
27 changes: 15 additions & 12 deletions mp/src/game/shared/da/da_player_shared.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,8 @@ CDAPlayerShared::CDAPlayerShared()
m_bSliding = false;
m_bDiveSliding = false;
m_bRolling = false;
m_flSlideTime = 0;
m_flSlideStartTime = 0;
m_flSlideAutoEndTime = 0;
}

CDAPlayerShared::~CDAPlayerShared()
Expand Down Expand Up @@ -719,7 +720,7 @@ bool CDAPlayerShared::CanChangePosition( void ) const

bool CDAPlayerShared::IsGettingUpFromSlide() const
{
return ( m_flUnSlideTime > 0 );
return ( m_flLastUnSlideTime > 0 );
}

bool CDAPlayerShared::IsSliding() const
Expand Down Expand Up @@ -792,14 +793,17 @@ void CDAPlayerShared::StartSliding(bool bDiveSliding)
m_vecSlideDirection = m_pOuter->GetAbsVelocity();
m_vecSlideDirection.GetForModify().NormalizeInPlace();

m_flSlideTime = m_pOuter->GetCurrentTime();
m_flUnSlideTime = 0;
ConVarRef da_slidetime("da_slidetime");

m_flSlideStartTime = m_pOuter->GetCurrentTime();
m_flSlideAutoEndTime = m_flSlideStartTime + da_slidetime.GetFloat();
m_flLastUnSlideTime = 0;
}

void CDAPlayerShared::EndSlide()
{
// If it was long enough to notice what it was, then train the slide.
if (gpGlobals->curtime > m_flSlideTime + 1)
if (m_pOuter->GetCurrentTime() - m_flSlideStartTime > 1)
{
if (m_bDiveSliding)
m_pOuter->Instructor_LessonLearned("slideafterdive");
Expand All @@ -816,7 +820,7 @@ void CDAPlayerShared::EndSlide()
void CDAPlayerShared::StandUpFromSlide( bool bJumpUp )
{
// If it was long enough to notice what it was, then train the slide.
if (gpGlobals->curtime > m_flSlideTime + 1)
if (m_pOuter->GetCurrentTime() - m_flSlideStartTime > 1)
{
if (m_bDiveSliding)
m_pOuter->Instructor_LessonLearned("slideafterdive");
Expand All @@ -834,7 +838,7 @@ void CDAPlayerShared::StandUpFromSlide( bool bJumpUp )
{
m_bSliding = false;
// and trigger brief slide cooldown
m_flSlideTime = m_pOuter->GetCurrentTime();
m_flSlideStartTime = m_pOuter->GetCurrentTime();
}
else
m_pOuter->FreezePlayer(0.4f, 0.3f);
Expand All @@ -846,7 +850,7 @@ void CDAPlayerShared::StandUpFromSlide( bool bJumpUp )
SetAirSliding(false);
}

m_flUnSlideTime = m_pOuter->GetCurrentTime() + TIME_TO_UNSLIDE;
m_flLastUnSlideTime = m_pOuter->GetCurrentTime() + TIME_TO_UNSLIDE;

m_vecUnSlideEyeStartOffset = m_pOuter->GetViewOffset();
}
Expand All @@ -856,10 +860,9 @@ float CDAPlayerShared::GetSlideFriction() const
if (!m_bSliding)
return 1;

ConVarRef da_slidetime("da_slidetime");

if (m_pOuter->GetCurrentTime() - m_flSlideTime < da_slidetime.GetFloat() - 0.2f)
return 0.05f;
// While there are more than 0.2 seconds until the slide automatically ends...
if (m_flSlideAutoEndTime - m_pOuter->GetCurrentTime() > 0.2f)
return 0.05f; // ...Use a low friction coefficient

return 1;
}
Expand Down
11 changes: 7 additions & 4 deletions mp/src/game/shared/da/da_player_shared.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,9 @@ class CDAPlayerShared
void StartSliding(bool bDiveSliding = false);
void EndSlide();
void StandUpFromSlide(bool bJumpUp = false);
float GetSlideTime() const { return m_flSlideTime; };
void AddSlideTime(float flAdd) { m_flSlideTime += flAdd; }
float GetSlideStartTime() const { return m_flSlideStartTime; };
float GetSlideAutoEndTime() const { return m_flSlideAutoEndTime; };
void AddSlideTime(float flAdd) { m_flSlideAutoEndTime += flAdd; }
Vector GetSlideDirection() const { return m_vecSlideDirection; };
float GetSlideFriction() const;

Expand Down Expand Up @@ -181,7 +182,8 @@ class CDAPlayerShared
CNetworkVar( bool, m_bSliding );
CNetworkVar( bool, m_bInAirSlide );
CNetworkVar( Vector, m_vecSlideDirection );
CNetworkVar( float, m_flSlideTime );
CNetworkVar( float, m_flSlideStartTime );
CNetworkVar( float, m_flSlideAutoEndTime );
CNetworkVar( bool, m_bDiveSliding );

CNetworkVar( float, m_flLastDuckPress );
Expand Down Expand Up @@ -231,7 +233,8 @@ class CDAPlayerShared
CNetworkVar( bool, m_bIsTryingUnprone );
#endif

CNetworkVar( float, m_flUnSlideTime );
// > 0 apparently means getting up from slide (?)
CNetworkVar( float, m_flLastUnSlideTime );
CNetworkVar( Vector, m_vecUnSlideEyeStartOffset );
CNetworkVar( bool, m_bIsTryingUnduck );

Expand Down

0 comments on commit 54fb178

Please sign in to comment.