//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=============================================================================// #ifndef CAM_THIRDPERSON_H #define CAM_THIRDPERSON_H #if defined( _WIN32 ) #pragma once #endif #ifdef CLIENT_DLL #include "c_baseplayer.h" #else #include "baseplayer.h" #endif #define DIST_FORWARD 0 #define DIST_RIGHT 1 #define DIST_UP 2 //-------------------------------------------------- Constants #define CAM_MIN_DIST 30.0 #define CAM_ANGLE_MOVE .5 #define MAX_ANGLE_DIFF 10.0 #define PITCH_MAX 90.0 #define PITCH_MIN 0 #define YAW_MAX 135.0 #define YAW_MIN -135.0 #define DIST 2 #define CAM_HULL_OFFSET 14.0 // the size of the bounding hull used for collision checking #define CAMERA_UP_OFFSET 25.0f #define CAMERA_OFFSET_LERP_TIME 0.5f #define CAMERA_UP_OFFSET_LERP_TIME 0.25f class CThirdPersonManager { public: CThirdPersonManager(); void SetCameraOffsetAngles( const Vector& vecOffset ) { m_vecCameraOffset = vecOffset; } const Vector& GetCameraOffsetAngles( void ) const { return m_vecCameraOffset; } void SetDesiredCameraOffset( const Vector& vecOffset ) { m_vecDesiredCameraOffset = vecOffset; } const Vector& GetDesiredCameraOffset( void ) const { return m_vecDesiredCameraOffset; } Vector GetFinalCameraOffset( void ); void SetCameraOrigin( const Vector& vecOffset ) { m_vecCameraOrigin = vecOffset; } const Vector& GetCameraOrigin( void ) const { return m_vecCameraOrigin; } void Update( void ); void PositionCamera( CBasePlayer *pPlayer, const QAngle& angles ); void UseCameraOffsets( bool bUse ) { m_bUseCameraOffsets = bUse; } bool UsingCameraOffsets( void ) { return m_bUseCameraOffsets; } const QAngle& GetCameraViewAngles( void ) const { return m_ViewAngles; } Vector GetDistanceFraction( void ); bool WantToUseGameThirdPerson( void ); void SetOverridingThirdPerson( bool bOverride ) { m_bOverrideThirdPerson = bOverride; } bool IsOverridingThirdPerson( void ) { return m_bOverrideThirdPerson; } void Init( void ); void SetForcedThirdPerson( bool bForced ) { m_bForced = bForced; } bool GetForcedThirdPerson() const { return m_bForced; } private: // What is the current camera offset from the view origin? Vector m_vecCameraOffset; // Distances from the center Vector m_vecDesiredCameraOffset; Vector m_vecCameraOrigin; bool m_bUseCameraOffsets; QAngle m_ViewAngles; float m_flFraction; float m_flUpFraction; float m_flTargetFraction; float m_flTargetUpFraction; bool m_bOverrideThirdPerson; bool m_bForced; float m_flUpOffset; float m_flLerpTime; float m_flUpLerpTime; }; extern CThirdPersonManager g_ThirdPersonManager; #endif // CAM_THIRDPERSON_H