diff options
Diffstat (limited to 'game/shared/hl2/hl_gamemovement.h')
| -rw-r--r-- | game/shared/hl2/hl_gamemovement.h | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/game/shared/hl2/hl_gamemovement.h b/game/shared/hl2/hl_gamemovement.h new file mode 100644 index 0000000..1e9abef --- /dev/null +++ b/game/shared/hl2/hl_gamemovement.h @@ -0,0 +1,129 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Special handling for hl2 usable ladders +// +//=============================================================================// + +#include "gamemovement.h" +#include "func_ladder.h" + +#if defined( CLIENT_DLL ) + +#include "c_basehlplayer.h" +#define CHL2_Player C_BaseHLPlayer +#else + +#include "hl2_player.h" + +#endif + +struct LadderMove_t; +class CInfoLadderDismount; + +struct NearbyDismount_t +{ + CInfoLadderDismount *dismount; + float distSqr; +}; + +//----------------------------------------------------------------------------- +// Purpose: HL2 specific movement code +//----------------------------------------------------------------------------- +class CHL2GameMovement : public CGameMovement +{ + typedef CGameMovement BaseClass; +public: + + CHL2GameMovement(); + +// Overrides + virtual void FullLadderMove(); + virtual bool LadderMove( void ); + virtual bool OnLadder( trace_t &trace ); + virtual int GetCheckInterval( IntervalType_t type ); + virtual void SetGroundEntity( trace_t *pm ); + virtual bool CanAccelerate( void ); + +private: + + // See if we are pressing use near a ladder "mount" point and if so, latch us onto the ladder + bool CheckLadderAutoMount( CFuncLadder *ladder, const Vector& bestOrigin ); + + bool CheckLadderAutoMountCone( CFuncLadder *ladder, const Vector& bestOrigin, float maxAngleDelta, float maxDistToLadder ); + bool CheckLadderAutoMountEndPoint(CFuncLadder *ladder, const Vector& bestOrigin ); + + + bool LookingAtLadder( CFuncLadder *ladder ); + + // Are we forcing the user's position to a new spot + bool IsForceMoveActive(); + // Start forcing player position + void StartForcedMove( bool mounting, float transit_speed, const Vector& goalpos, CFuncLadder *ladder ); + // Returns false when finished + bool ContinueForcedMove(); + + // Given a list of nearby ladders, find the best ladder and the "mount" origin + void Findladder( float maxdist, CFuncLadder **ppLadder, Vector& ladderOrigin, const CFuncLadder *skipLadder ); + + // Debounce the +USE key + void SwallowUseKey(); + + // Returns true if the player will auto-exit the ladder via a dismount node + bool ExitLadderViaDismountNode( CFuncLadder *ladder, bool strict, bool useAlternate = false ); + void GetSortedDismountNodeList( const Vector &org, float radius, CFuncLadder *ladder, CUtlRBTree< NearbyDismount_t, int >& list ); + + LadderMove_t *GetLadderMove(); + CHL2_Player *GetHL2Player(); + + void SetLadder( CFuncLadder *ladder ); + CFuncLadder *GetLadder(); +}; + + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +inline CHL2_Player *CHL2GameMovement::GetHL2Player() +{ + return static_cast< CHL2_Player * >( player ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : inline LadderMove* +//----------------------------------------------------------------------------- +inline LadderMove_t *CHL2GameMovement::GetLadderMove() +{ + CHL2_Player *p = GetHL2Player(); + if ( !p ) + { + return NULL; + } + return p->GetLadderMove(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *ladder - +//----------------------------------------------------------------------------- +inline void CHL2GameMovement::SetLadder( CFuncLadder *ladder ) +{ + CFuncLadder* oldLadder = GetLadder(); + + if ( !ladder && oldLadder ) + { + oldLadder->PlayerGotOff( GetHL2Player() ); + } + + + GetHL2Player()->m_HL2Local.m_hLadder.Set( ladder ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : CFuncLadder +//----------------------------------------------------------------------------- +inline CFuncLadder *CHL2GameMovement::GetLadder() +{ + return static_cast<CFuncLadder*>( static_cast<CBaseEntity *>( GetHL2Player()->m_HL2Local.m_hLadder.Get() ) ); +} |