diff options
Diffstat (limited to 'mp/src/game/client/replay/replaycamera.h')
| -rw-r--r-- | mp/src/game/client/replay/replaycamera.h | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/mp/src/game/client/replay/replaycamera.h b/mp/src/game/client/replay/replaycamera.h new file mode 100644 index 00000000..8ab8e637 --- /dev/null +++ b/mp/src/game/client/replay/replaycamera.h @@ -0,0 +1,158 @@ +//========= 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 );
+ void SpecNamedPlayer( const char *szPlayerName );
+ 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
\ No newline at end of file |