aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/shared/gamemovement.h
diff options
context:
space:
mode:
Diffstat (limited to 'mp/src/game/shared/gamemovement.h')
-rw-r--r--mp/src/game/shared/gamemovement.h582
1 files changed, 291 insertions, 291 deletions
diff --git a/mp/src/game/shared/gamemovement.h b/mp/src/game/shared/gamemovement.h
index e1b6f88c..79c83fc1 100644
--- a/mp/src/game/shared/gamemovement.h
+++ b/mp/src/game/shared/gamemovement.h
@@ -1,291 +1,291 @@
-//========= Copyright Valve Corporation, All rights reserved. ============//
-//
-// Purpose:
-//
-// $Workfile: $
-// $Date: $
-// $NoKeywords: $
-//=============================================================================//
-#if !defined( GAMEMOVEMENT_H )
-#define GAMEMOVEMENT_H
-#ifdef _WIN32
-#pragma once
-#endif
-
-#include "igamemovement.h"
-#include "cmodel.h"
-#include "tier0/vprof.h"
-
-#define CTEXTURESMAX 512 // max number of textures loaded
-#define CBTEXTURENAMEMAX 13 // only load first n chars of name
-
-#define GAMEMOVEMENT_DUCK_TIME 1000.0f // ms
-#define GAMEMOVEMENT_JUMP_TIME 510.0f // ms approx - based on the 21 unit height jump
-#define GAMEMOVEMENT_JUMP_HEIGHT 21.0f // units
-#define GAMEMOVEMENT_TIME_TO_UNDUCK ( TIME_TO_UNDUCK * 1000.0f ) // ms
-#define GAMEMOVEMENT_TIME_TO_UNDUCK_INV ( GAMEMOVEMENT_DUCK_TIME - GAMEMOVEMENT_TIME_TO_UNDUCK )
-
-enum
-{
- SPEED_CROPPED_RESET = 0,
- SPEED_CROPPED_DUCK = 1,
- SPEED_CROPPED_WEAPON = 2,
-};
-
-struct surfacedata_t;
-
-class CBasePlayer;
-
-class CGameMovement : public IGameMovement
-{
-public:
- DECLARE_CLASS_NOBASE( CGameMovement );
-
- CGameMovement( void );
- virtual ~CGameMovement( void );
-
- virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMove );
-
- virtual void StartTrackPredictionErrors( CBasePlayer *pPlayer );
- virtual void FinishTrackPredictionErrors( CBasePlayer *pPlayer );
- virtual void DiffPrint( PRINTF_FORMAT_STRING char const *fmt, ... );
- virtual Vector GetPlayerMins( bool ducked ) const;
- virtual Vector GetPlayerMaxs( bool ducked ) const;
- virtual Vector GetPlayerViewOffset( bool ducked ) const;
-
-// For sanity checking getting stuck on CMoveData::SetAbsOrigin
- virtual void TracePlayerBBox( const Vector& start, const Vector& end, unsigned int fMask, int collisionGroup, trace_t& pm );
-
- // allows derived classes to exclude entities from trace
- virtual void TryTouchGround( const Vector& start, const Vector& end, const Vector& mins, const Vector& maxs, unsigned int fMask, int collisionGroup, trace_t& pm );
-
-
-#define BRUSH_ONLY true
- virtual unsigned int PlayerSolidMask( bool brushOnly = false ); ///< returns the solid mask for the given player, so bots can have a more-restrictive set
- CBasePlayer *player;
- CMoveData *GetMoveData() { return mv; }
-protected:
- // Input/Output for this movement
- CMoveData *mv;
-
- int m_nOldWaterLevel;
- float m_flWaterEntryTime;
- int m_nOnLadder;
-
- Vector m_vecForward;
- Vector m_vecRight;
- Vector m_vecUp;
-
-
- // Does most of the player movement logic.
- // Returns with origin, angles, and velocity modified in place.
- // were contacted during the move.
- virtual void PlayerMove( void );
-
- // Set ground data, etc.
- void FinishMove( void );
-
- virtual float CalcRoll( const QAngle &angles, const Vector &velocity, float rollangle, float rollspeed );
-
- virtual void DecayPunchAngle( void );
-
- virtual void CheckWaterJump(void );
-
- virtual void WaterMove( void );
-
- void WaterJump( void );
-
- // Handles both ground friction and water friction
- void Friction( void );
-
- virtual void AirAccelerate( Vector& wishdir, float wishspeed, float accel );
-
- virtual void AirMove( void );
- virtual float GetAirSpeedCap( void ) { return 30.f; }
-
- virtual bool CanAccelerate();
- virtual void Accelerate( Vector& wishdir, float wishspeed, float accel);
-
- // Only used by players. Moves along the ground when player is a MOVETYPE_WALK.
- virtual void WalkMove( void );
-
- // Try to keep a walking player on the ground when running down slopes etc
- void StayOnGround( void );
-
- // Handle MOVETYPE_WALK.
- virtual void FullWalkMove();
-
- // allow overridden versions to respond to jumping
- virtual void OnJump( float fImpulse ) {}
- virtual void OnLand( float fVelocity ) {}
-
- // Implement this if you want to know when the player collides during OnPlayerMove
- virtual void OnTryPlayerMoveCollision( trace_t &tr ) {}
-
- virtual Vector GetPlayerMins( void ) const; // uses local player
- virtual Vector GetPlayerMaxs( void ) const; // uses local player
-
- typedef enum
- {
- GROUND = 0,
- STUCK,
- LADDER
- } IntervalType_t;
-
- virtual int GetCheckInterval( IntervalType_t type );
-
- // Useful for things that happen periodically. This lets things happen on the specified interval, but
- // spaces the events onto different frames for different players so they don't all hit their spikes
- // simultaneously.
- bool CheckInterval( IntervalType_t type );
-
-
- // Decompoosed gravity
- void StartGravity( void );
- void FinishGravity( void );
-
- // Apply normal ( undecomposed ) gravity
- void AddGravity( void );
-
- // Handle movement in noclip mode.
- void FullNoClipMove( float factor, float maxacceleration );
-
- // Returns true if he started a jump (ie: should he play the jump animation)?
- virtual bool CheckJumpButton( void ); // Overridden by each game.
-
- // Dead player flying through air., e.g.
- virtual void FullTossMove( void );
-
- // Player is a Observer chasing another player
- void FullObserverMove( void );
-
- // Handle movement when in MOVETYPE_LADDER mode.
- virtual void FullLadderMove();
-
- // The basic solid body movement clip that slides along multiple planes
- virtual int TryPlayerMove( Vector *pFirstDest=NULL, trace_t *pFirstTrace=NULL );
-
- virtual bool LadderMove( void );
- virtual bool OnLadder( trace_t &trace );
- virtual float LadderDistance( void ) const { return 2.0f; } ///< Returns the distance a player can be from a ladder and still attach to it
- virtual unsigned int LadderMask( void ) const { return MASK_PLAYERSOLID; }
- virtual float ClimbSpeed( void ) const { return MAX_CLIMB_SPEED; }
- virtual float LadderLateralMultiplier( void ) const { return 1.0f; }
-
- // See if the player has a bogus velocity value.
- void CheckVelocity( void );
-
- // Does not change the entities velocity at all
- void PushEntity( Vector& push, trace_t *pTrace );
-
- // Slide off of the impacting object
- // returns the blocked flags:
- // 0x01 == floor
- // 0x02 == step / wall
- int ClipVelocity( Vector& in, Vector& normal, Vector& out, float overbounce );
-
- // If pmove.origin is in a solid position,
- // try nudging slightly on all axis to
- // allow for the cut precision of the net coordinates
- virtual int CheckStuck( void );
-
- // Check if the point is in water.
- // Sets refWaterLevel and refWaterType appropriately.
- // If in water, applies current to baseVelocity, and returns true.
- virtual bool CheckWater( void );
-
- // Determine if player is in water, on ground, etc.
- virtual void CategorizePosition( void );
-
- virtual void CheckParameters( void );
-
- virtual void ReduceTimers( void );
-
- virtual void CheckFalling( void );
-
- virtual void PlayerRoughLandingEffects( float fvol );
-
- void PlayerWaterSounds( void );
-
- void ResetGetPointContentsCache();
- int GetPointContentsCached( const Vector &point, int slot );
-
- // Ducking
- virtual void Duck( void );
- virtual void HandleDuckingSpeedCrop();
- virtual void FinishUnDuck( void );
- virtual void FinishDuck( void );
- virtual bool CanUnduck();
- void UpdateDuckJumpEyeOffset( void );
- bool CanUnDuckJump( trace_t &trace );
- void StartUnDuckJump( void );
- void FinishUnDuckJump( trace_t &trace );
- void SetDuckedEyeOffset( float duckFraction );
- void FixPlayerCrouchStuck( bool moveup );
-
- float SplineFraction( float value, float scale );
-
- void CategorizeGroundSurface( trace_t &pm );
-
- bool InWater( void );
-
- // Commander view movement
- void IsometricMove( void );
-
- // Traces the player bbox as it is swept from start to end
- virtual CBaseHandle TestPlayerPosition( const Vector& pos, int collisionGroup, trace_t& pm );
-
- // Checks to see if we should actually jump
- void PlaySwimSound();
-
- bool IsDead( void ) const;
-
- // Figures out how the constraint should slow us down
- float ComputeConstraintSpeedFactor( void );
-
- virtual void SetGroundEntity( trace_t *pm );
-
- virtual void StepMove( Vector &vecDestination, trace_t &trace );
-
- // when we step on ground that's too steep, search to see if there's any ground nearby that isn't too steep
- void TryTouchGroundInQuadrants( const Vector& start, const Vector& end, unsigned int fMask, int collisionGroup, trace_t& pm );
-
-
-protected:
-
- // Performs the collision resolution for fliers.
- void PerformFlyCollisionResolution( trace_t &pm, Vector &move );
-
- virtual bool GameHasLadders() const;
-
- enum
- {
- // eyes, waist, feet points (since they are all deterministic
- MAX_PC_CACHE_SLOTS = 3,
- };
-
- // Cache used to remove redundant calls to GetPointContents().
- int m_CachedGetPointContents[ MAX_PLAYERS ][ MAX_PC_CACHE_SLOTS ];
- Vector m_CachedGetPointContentsPoint[ MAX_PLAYERS ][ MAX_PC_CACHE_SLOTS ];
-
- Vector m_vecProximityMins; // Used to be globals in sv_user.cpp.
- Vector m_vecProximityMaxs;
-
- float m_fFrameTime;
-
-//private:
- int m_iSpeedCropped;
-
- float m_flStuckCheckTime[MAX_PLAYERS+1][2]; // Last time we did a full test
-
- // special function for teleport-with-duck for episodic
-#ifdef HL2_EPISODIC
-public:
- void ForceDuck( void );
-
-#endif
-};
-
-
-
-#endif // GAMEMOVEMENT_H
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $Workfile: $
+// $Date: $
+// $NoKeywords: $
+//=============================================================================//
+#if !defined( GAMEMOVEMENT_H )
+#define GAMEMOVEMENT_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "igamemovement.h"
+#include "cmodel.h"
+#include "tier0/vprof.h"
+
+#define CTEXTURESMAX 512 // max number of textures loaded
+#define CBTEXTURENAMEMAX 13 // only load first n chars of name
+
+#define GAMEMOVEMENT_DUCK_TIME 1000.0f // ms
+#define GAMEMOVEMENT_JUMP_TIME 510.0f // ms approx - based on the 21 unit height jump
+#define GAMEMOVEMENT_JUMP_HEIGHT 21.0f // units
+#define GAMEMOVEMENT_TIME_TO_UNDUCK ( TIME_TO_UNDUCK * 1000.0f ) // ms
+#define GAMEMOVEMENT_TIME_TO_UNDUCK_INV ( GAMEMOVEMENT_DUCK_TIME - GAMEMOVEMENT_TIME_TO_UNDUCK )
+
+enum
+{
+ SPEED_CROPPED_RESET = 0,
+ SPEED_CROPPED_DUCK = 1,
+ SPEED_CROPPED_WEAPON = 2,
+};
+
+struct surfacedata_t;
+
+class CBasePlayer;
+
+class CGameMovement : public IGameMovement
+{
+public:
+ DECLARE_CLASS_NOBASE( CGameMovement );
+
+ CGameMovement( void );
+ virtual ~CGameMovement( void );
+
+ virtual void ProcessMovement( CBasePlayer *pPlayer, CMoveData *pMove );
+
+ virtual void StartTrackPredictionErrors( CBasePlayer *pPlayer );
+ virtual void FinishTrackPredictionErrors( CBasePlayer *pPlayer );
+ virtual void DiffPrint( PRINTF_FORMAT_STRING char const *fmt, ... );
+ virtual Vector GetPlayerMins( bool ducked ) const;
+ virtual Vector GetPlayerMaxs( bool ducked ) const;
+ virtual Vector GetPlayerViewOffset( bool ducked ) const;
+
+// For sanity checking getting stuck on CMoveData::SetAbsOrigin
+ virtual void TracePlayerBBox( const Vector& start, const Vector& end, unsigned int fMask, int collisionGroup, trace_t& pm );
+
+ // allows derived classes to exclude entities from trace
+ virtual void TryTouchGround( const Vector& start, const Vector& end, const Vector& mins, const Vector& maxs, unsigned int fMask, int collisionGroup, trace_t& pm );
+
+
+#define BRUSH_ONLY true
+ virtual unsigned int PlayerSolidMask( bool brushOnly = false ); ///< returns the solid mask for the given player, so bots can have a more-restrictive set
+ CBasePlayer *player;
+ CMoveData *GetMoveData() { return mv; }
+protected:
+ // Input/Output for this movement
+ CMoveData *mv;
+
+ int m_nOldWaterLevel;
+ float m_flWaterEntryTime;
+ int m_nOnLadder;
+
+ Vector m_vecForward;
+ Vector m_vecRight;
+ Vector m_vecUp;
+
+
+ // Does most of the player movement logic.
+ // Returns with origin, angles, and velocity modified in place.
+ // were contacted during the move.
+ virtual void PlayerMove( void );
+
+ // Set ground data, etc.
+ void FinishMove( void );
+
+ virtual float CalcRoll( const QAngle &angles, const Vector &velocity, float rollangle, float rollspeed );
+
+ virtual void DecayPunchAngle( void );
+
+ virtual void CheckWaterJump(void );
+
+ virtual void WaterMove( void );
+
+ void WaterJump( void );
+
+ // Handles both ground friction and water friction
+ void Friction( void );
+
+ virtual void AirAccelerate( Vector& wishdir, float wishspeed, float accel );
+
+ virtual void AirMove( void );
+ virtual float GetAirSpeedCap( void ) { return 30.f; }
+
+ virtual bool CanAccelerate();
+ virtual void Accelerate( Vector& wishdir, float wishspeed, float accel);
+
+ // Only used by players. Moves along the ground when player is a MOVETYPE_WALK.
+ virtual void WalkMove( void );
+
+ // Try to keep a walking player on the ground when running down slopes etc
+ void StayOnGround( void );
+
+ // Handle MOVETYPE_WALK.
+ virtual void FullWalkMove();
+
+ // allow overridden versions to respond to jumping
+ virtual void OnJump( float fImpulse ) {}
+ virtual void OnLand( float fVelocity ) {}
+
+ // Implement this if you want to know when the player collides during OnPlayerMove
+ virtual void OnTryPlayerMoveCollision( trace_t &tr ) {}
+
+ virtual Vector GetPlayerMins( void ) const; // uses local player
+ virtual Vector GetPlayerMaxs( void ) const; // uses local player
+
+ typedef enum
+ {
+ GROUND = 0,
+ STUCK,
+ LADDER
+ } IntervalType_t;
+
+ virtual int GetCheckInterval( IntervalType_t type );
+
+ // Useful for things that happen periodically. This lets things happen on the specified interval, but
+ // spaces the events onto different frames for different players so they don't all hit their spikes
+ // simultaneously.
+ bool CheckInterval( IntervalType_t type );
+
+
+ // Decompoosed gravity
+ void StartGravity( void );
+ void FinishGravity( void );
+
+ // Apply normal ( undecomposed ) gravity
+ void AddGravity( void );
+
+ // Handle movement in noclip mode.
+ void FullNoClipMove( float factor, float maxacceleration );
+
+ // Returns true if he started a jump (ie: should he play the jump animation)?
+ virtual bool CheckJumpButton( void ); // Overridden by each game.
+
+ // Dead player flying through air., e.g.
+ virtual void FullTossMove( void );
+
+ // Player is a Observer chasing another player
+ void FullObserverMove( void );
+
+ // Handle movement when in MOVETYPE_LADDER mode.
+ virtual void FullLadderMove();
+
+ // The basic solid body movement clip that slides along multiple planes
+ virtual int TryPlayerMove( Vector *pFirstDest=NULL, trace_t *pFirstTrace=NULL );
+
+ virtual bool LadderMove( void );
+ virtual bool OnLadder( trace_t &trace );
+ virtual float LadderDistance( void ) const { return 2.0f; } ///< Returns the distance a player can be from a ladder and still attach to it
+ virtual unsigned int LadderMask( void ) const { return MASK_PLAYERSOLID; }
+ virtual float ClimbSpeed( void ) const { return MAX_CLIMB_SPEED; }
+ virtual float LadderLateralMultiplier( void ) const { return 1.0f; }
+
+ // See if the player has a bogus velocity value.
+ void CheckVelocity( void );
+
+ // Does not change the entities velocity at all
+ void PushEntity( Vector& push, trace_t *pTrace );
+
+ // Slide off of the impacting object
+ // returns the blocked flags:
+ // 0x01 == floor
+ // 0x02 == step / wall
+ int ClipVelocity( Vector& in, Vector& normal, Vector& out, float overbounce );
+
+ // If pmove.origin is in a solid position,
+ // try nudging slightly on all axis to
+ // allow for the cut precision of the net coordinates
+ virtual int CheckStuck( void );
+
+ // Check if the point is in water.
+ // Sets refWaterLevel and refWaterType appropriately.
+ // If in water, applies current to baseVelocity, and returns true.
+ virtual bool CheckWater( void );
+
+ // Determine if player is in water, on ground, etc.
+ virtual void CategorizePosition( void );
+
+ virtual void CheckParameters( void );
+
+ virtual void ReduceTimers( void );
+
+ virtual void CheckFalling( void );
+
+ virtual void PlayerRoughLandingEffects( float fvol );
+
+ void PlayerWaterSounds( void );
+
+ void ResetGetPointContentsCache();
+ int GetPointContentsCached( const Vector &point, int slot );
+
+ // Ducking
+ virtual void Duck( void );
+ virtual void HandleDuckingSpeedCrop();
+ virtual void FinishUnDuck( void );
+ virtual void FinishDuck( void );
+ virtual bool CanUnduck();
+ void UpdateDuckJumpEyeOffset( void );
+ bool CanUnDuckJump( trace_t &trace );
+ void StartUnDuckJump( void );
+ void FinishUnDuckJump( trace_t &trace );
+ void SetDuckedEyeOffset( float duckFraction );
+ void FixPlayerCrouchStuck( bool moveup );
+
+ float SplineFraction( float value, float scale );
+
+ void CategorizeGroundSurface( trace_t &pm );
+
+ bool InWater( void );
+
+ // Commander view movement
+ void IsometricMove( void );
+
+ // Traces the player bbox as it is swept from start to end
+ virtual CBaseHandle TestPlayerPosition( const Vector& pos, int collisionGroup, trace_t& pm );
+
+ // Checks to see if we should actually jump
+ void PlaySwimSound();
+
+ bool IsDead( void ) const;
+
+ // Figures out how the constraint should slow us down
+ float ComputeConstraintSpeedFactor( void );
+
+ virtual void SetGroundEntity( trace_t *pm );
+
+ virtual void StepMove( Vector &vecDestination, trace_t &trace );
+
+ // when we step on ground that's too steep, search to see if there's any ground nearby that isn't too steep
+ void TryTouchGroundInQuadrants( const Vector& start, const Vector& end, unsigned int fMask, int collisionGroup, trace_t& pm );
+
+
+protected:
+
+ // Performs the collision resolution for fliers.
+ void PerformFlyCollisionResolution( trace_t &pm, Vector &move );
+
+ virtual bool GameHasLadders() const;
+
+ enum
+ {
+ // eyes, waist, feet points (since they are all deterministic
+ MAX_PC_CACHE_SLOTS = 3,
+ };
+
+ // Cache used to remove redundant calls to GetPointContents().
+ int m_CachedGetPointContents[ MAX_PLAYERS ][ MAX_PC_CACHE_SLOTS ];
+ Vector m_CachedGetPointContentsPoint[ MAX_PLAYERS ][ MAX_PC_CACHE_SLOTS ];
+
+ Vector m_vecProximityMins; // Used to be globals in sv_user.cpp.
+ Vector m_vecProximityMaxs;
+
+ float m_fFrameTime;
+
+//private:
+ int m_iSpeedCropped;
+
+ float m_flStuckCheckTime[MAX_PLAYERS+1][2]; // Last time we did a full test
+
+ // special function for teleport-with-duck for episodic
+#ifdef HL2_EPISODIC
+public:
+ void ForceDuck( void );
+
+#endif
+};
+
+
+
+#endif // GAMEMOVEMENT_H