|
|
|
//========= 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() = default;
|
|
|
|
void SetCameraOffsetAngles( Vector vecOffset ) { m_vecCameraOffset = vecOffset; }
|
|
|
|
Vector GetCameraOffsetAngles( void ) { return m_vecCameraOffset; }
|
|
|
|
|
|
|
|
void SetDesiredCameraOffset( Vector vecOffset ) { m_vecDesiredCameraOffset = vecOffset; }
|
|
|
|
Vector GetDesiredCameraOffset( void );
|
|
|
|
|
|
|
|
Vector GetFinalCameraOffset( void );
|
|
|
|
|
|
|
|
void SetCameraOrigin( Vector vecOffset ) { m_vecCameraOrigin = vecOffset; }
|
|
|
|
Vector GetCameraOrigin( void ) { return m_vecCameraOrigin; }
|
|
|
|
|
|
|
|
void Update( void );
|
|
|
|
|
|
|
|
void PositionCamera( CBasePlayer *pPlayer, QAngle angles );
|
|
|
|
|
|
|
|
void UseCameraOffsets( bool bUse ) { m_bUseCameraOffsets = bUse; }
|
|
|
|
bool UsingCameraOffsets( void ) { return m_bUseCameraOffsets; }
|
|
|
|
|
|
|
|
QAngle GetCameraViewAngles( void ) { 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
|