119 lines
2.8 KiB
C++
119 lines
2.8 KiB
C++
//========= 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
|