diff options
Diffstat (limited to 'game/client/replay/replaycamera.h')
| -rw-r--r-- | game/client/replay/replaycamera.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/game/client/replay/replaycamera.h b/game/client/replay/replaycamera.h new file mode 100644 index 0000000..d5a7b0c --- /dev/null +++ b/game/client/replay/replaycamera.h @@ -0,0 +1,159 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#if defined( REPLAY_ENABLED ) + +#ifndef REPLAYCAMERA_H +#define REPLAYCAMERA_H +#ifdef _WIN32 +#pragma once +#endif + +#include "replay/ireplaycamera.h" +#include "GameEventListener.h" + +class C_ReplayCamera : public CGameEventListener, + public IReplayCamera +{ +public: + C_ReplayCamera(); + virtual ~C_ReplayCamera(); + + void Init(); + void Reset(); + + // + // IReplayCamera: + // + virtual void ClearOverrideView(); + + void EnableInput( bool bEnable ); + + void OverrideView( const Vector *pOrigin, const QAngle *pAngles, float flFov ); + void GetCachedView( Vector &origin, QAngle &angles, float &fov ); + + void CalcView(Vector& origin, QAngle& angles, float& fov); + void FireGameEvent( IGameEvent *event ); + + void SetMode(int iMode); + void SetChaseCamParams( float flOffset, float flDistance, float flTheta, float flPhi ); + void SpecNextPlayer( bool bInverse ); + // See UTIL_PlayerByCommandArg for what all might go in here. + void SpecPlayerByPredicate( const char *szPlayerSearch ); + bool IsPVSLocked(); + void SetAutoDirector( bool bActive ); + + int GetMode(); // returns current camera mode + C_BaseEntity *GetPrimaryTarget(); // return primary target + inline int GetPrimaryTargetIndex() { return m_iTarget1; } + void SetPrimaryTarget( int nEntity); // set the primary obs target + + void CreateMove(CUserCmd *cmd); + void FixupMovmentParents(); + void PostEntityPacketReceived(); + const char* GetTitleText() { return m_szTitleText; } + int GetNumSpectators() { return m_nNumSpectators; } + + void SmoothFov( float flDelta ); + + float m_flRoamingAccel; + float m_flRoamingSpeed; + float m_flRoamingFov[2]; // FOV for roaming only - current and target - smoothing done by replay editor + float m_flRoamingRotFilterFactor; + float m_flRoamingShakeAmount; + float m_flRoamingShakeSpeed; + float m_flRoamingShakeDir; + +protected: + void InitRoamingKeys(); + bool ShouldUseDefaultRoamingSettings() const; + + void CalcChaseCamView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov, float flDelta ); + void CalcFixedView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov, float flDelta ); + void CalcInEyeCamView( Vector& eyeOrigin, QAngle& eyeAngles, float& fov, float flDelta ); + void CalcRoamingView(Vector& eyeOrigin, QAngle& eyeAngles, float& fov, float flDelta); + + void SmoothCameraAngle( QAngle& targetAngle ); + void SetCameraAngle( QAngle& targetAngle ); + void Accelerate( Vector& wishdir, float wishspeed, float accel, float flDelta ); + + bool ShouldOverrideView( Vector& origin, QAngle& angles, float& fov ); // Fills with override data if m_bOverrideView is set + + struct View_t + { + Vector origin; + QAngle angles; + float fov; + }; + + bool m_bInputEnabled; + bool m_bOverrideView; + View_t m_OverrideViewData; + View_t m_CachedView; + float m_flOldTime; // Time of last CalcView() (uses gpGlobals->realtime) + int m_nCameraMode; // current camera mode + Vector m_vCamOrigin; //current camera origin + QAngle m_aCamAngle; //current camera angle + QAngle m_aSmoothedRoamingAngles; + int m_iTarget1; // first tracked target or 0 + int m_iTarget2; // second tracked target or 0 + float m_flFOV; // current FOV + float m_flOffset; // z-offset from target origin + float m_flDistance; // distance to traget origin+offset + float m_flLastDistance; // too smooth distance + float m_flTheta; // view angle horizontal + float m_flPhi; // view angle vertical + float m_flInertia; // camera inertia 0..100 + float m_flLastAngleUpdateTime; + bool m_bEntityPacketReceived; // true after a new packet was received + int m_nNumSpectators; + char m_szTitleText[64]; + CUserCmd m_LastCmd; + Vector m_vecVelocity; + + enum Dir_t + { + DIR_FWD, + DIR_BACK, + DIR_LEFT, + DIR_RIGHT, + + DIR_UP, + DIR_DOWN, + + NUM_DIRS + }; + ButtonCode_t m_aMovementButtons[NUM_DIRS]; + + float m_flNoiseSample; +}; + +//----------------------------------------------------------------------------- + +C_ReplayCamera *ReplayCamera(); + +//----------------------------------------------------------------------------- + +#define FREE_CAM_ACCEL_MIN 1.1f +#define FREE_CAM_ACCEL_MAX 10.0f +#define FREE_CAM_SPEED_MIN 0.1f +#define FREE_CAM_SPEED_MAX 20.0f +#define FREE_CAM_FOV_MIN 10.0f +#define FREE_CAM_FOV_MAX 130.0f +#define FREE_CAM_ROT_FILTER_MIN 30.0f +#define FREE_CAM_ROT_FILTER_MAX 5.0f +#define FREE_CAM_SHAKE_SPEED_MIN 0.1f +#define FREE_CAM_SHAKE_SPEED_MAX 15.0f +#define FREE_CAM_SHAKE_AMOUNT_MIN 0.0f +#define FREE_CAM_SHAKE_AMOUNT_MAX 35.0f +#define FREE_CAM_SHAKE_DIR_MIN -1.0f +#define FREE_CAM_SHAKE_DIR_MAX 1.0f + +//----------------------------------------------------------------------------- + +#endif // REPLAYCAMERA_H + +#endif |