diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/server/hltvdirector.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/hltvdirector.h')
| -rw-r--r-- | game/server/hltvdirector.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/game/server/hltvdirector.h b/game/server/hltvdirector.h new file mode 100644 index 0000000..653bf1d --- /dev/null +++ b/game/server/hltvdirector.h @@ -0,0 +1,124 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#ifndef HLTVDIRECTOR_H +#define HLTVDIRECTOR_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "GameEventListener.h" +#include <igamesystem.h> +#include <ihltvdirector.h> +#include <ihltv.h> +#include <utlrbtree.h> + +#define HLTV_MIN_DIRECTOR_DELAY 10 // minimum delay if director is enabled +#define HLTV_MAX_DELAY 120 // maximum delay + + +#define MAX_NUM_CAMERAS 64 // support up to 64 fixed cameras per level + +#define MIN_SHOT_LENGTH 4.0f // minimum time of a cut (seconds) +#define MAX_SHOT_LENGTH 8.0f // maximum time of a cut (seconds) +#define DEF_SHOT_LENGTH 6.0f // average time of a cut (seconds) + +class CHLTVGameEvent +{ +public: + int m_Tick; // tick of this command + int m_Priority; // game event priority + IGameEvent *m_Event; // IGameEvent +}; + +class CHLTVDirector : public CGameEventListener, public CBaseGameSystemPerFrame, public IHLTVDirector +{ +public: + DECLARE_CLASS_NOBASE( CHLTVDirector ); + + virtual char const *Name() { return "CHLTVDirector"; } + + CHLTVDirector(); + virtual ~CHLTVDirector(); + + virtual void SetHLTVServer( IHLTVServer *hltv ); // give the director an HLTV interface + IHLTVServer* GetHLTVServer( void ); + int GetDirectorTick( void ); // get current broadcast tick from director + int GetPVSEntity( void ); // get current view entity (PVS) + Vector GetPVSOrigin( void ); // get current PVS origin, if PVS entity is 0 + float GetDelay( void ); // returns current delay in seconds + bool IsActive( void ); + + virtual const char** GetModEvents(); // returns list of event names forwarded to HLTV clients + + void BuildCameraList( void ); + + +public: // IGameEventListener Interface + virtual void FireGameEvent( IGameEvent * event ); + +public: // CBaseGameSystem overrides + + virtual bool Init(); + virtual void Shutdown(); + virtual void FrameUpdatePostEntityThink(); + virtual void LevelInitPostEntity(); + virtual char *GetFixedCameraEntityName( void ) { return "point_viewcontrol"; } + + bool SetCameraMan( int iPlayerIndex ); + int GetCameraMan() { return m_iCameraManIndex; } + + +protected: + + virtual void StartNewShot(); + virtual void StartRandomShot(); + virtual void StartDelayMessage(); + virtual void StartBestFixedCameraShot(bool bForce); + virtual void StartBestPlayerCameraShot(); + virtual void StartFixedCameraShot(int iCamera, int iTarget); + virtual void StartChaseCameraShot(int iTarget1, int iTarget2, int distance, int phi, int theta, bool bInEye); + virtual void UpdateSettings(); + virtual void AnalyzePlayers(); + virtual void AnalyzeCameras(); + virtual bool StartCameraManShot(); + virtual void StartInstantBroadcastShot(); + virtual void FinishCameraManShot(); + virtual void BuildActivePlayerList(); + virtual CHLTVGameEvent *FindBestGameEvent(); + virtual void CreateShotFromEvent( CHLTVGameEvent *ge ); + + int FindFirstEvent( int tick ); // finds first event >= tick + void CheckHistory(); + void RemoveEventsFromHistory(int tick); // removes all commands < tick, or all if tick -1 + + IHLTVServer *m_pHLTVServer; // interface to servers HLTV object + float m_fDelay; // hltv delay in seconds + int m_nBroadcastTick; // world time that is currently "on the air" + int m_iPVSEntity; // entity for PVS center + Vector m_vPVSOrigin; // PVS origin if PVS entity is 0 + int m_iCameraMan; // >0 if current view entity is a cameraman + CBasePlayer *m_pHLTVClient; // the HLTV fake client + int m_nNextShotTick; // time for the next scene cut + int m_iLastPlayer; // last player in random rotation + + int m_nNextAnalyzeTick; + + int m_nNumFixedCameras; //number of cameras in current map + CBaseEntity *m_pFixedCameras[MAX_NUM_CAMERAS]; // fixed cameras (point_viewcontrol) + + int m_nNumActivePlayers; //number of cameras in current map + CBasePlayer *m_pActivePlayers[MAX_PLAYERS]; // fixed cameras (point_viewcontrol) + int m_iCameraManIndex; // entity index of current camera man or 0 + + CUtlRBTree<CHLTVGameEvent> m_EventHistory; +}; + +extern IGameSystem* HLTVDirectorSystem(); +extern CHLTVDirector* HLTVDirector(); + +#endif // HLTVDIRECTOR_H |