2023-07-20 18:11:37 +00:00
|
|
|
|
//========= Copyright <20> 1996-2001, Valve LLC, All rights reserved. ============
|
2001-08-29 00:00:00 +00:00
|
|
|
|
//
|
|
|
|
|
// Purpose:
|
|
|
|
|
//
|
|
|
|
|
// $NoKeywords: $
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
#ifndef SPECTATOR_H
|
|
|
|
|
#define SPECTATOR_H
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "cl_entity.h"
|
2023-07-20 18:11:37 +00:00
|
|
|
|
#include "interpolation.h"
|
2001-08-29 00:00:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define INSET_OFF 0
|
|
|
|
|
#define INSET_CHASE_FREE 1
|
|
|
|
|
#define INSET_IN_EYE 2
|
|
|
|
|
#define INSET_MAP_FREE 3
|
2002-12-23 00:00:00 +00:00
|
|
|
|
#define INSET_MAP_CHASE 4
|
|
|
|
|
|
|
|
|
|
#define MAX_SPEC_HUD_MESSAGES 8
|
|
|
|
|
|
2001-08-29 00:00:00 +00:00
|
|
|
|
#define OVERVIEW_TILE_SIZE 128 // don't change this
|
|
|
|
|
#define OVERVIEW_MAX_LAYERS 1
|
|
|
|
|
|
2023-07-20 18:11:37 +00:00
|
|
|
|
extern void VectorAngles( const float *forward, float *angles );
|
|
|
|
|
extern "C" void NormalizeAngles( float *angles );
|
|
|
|
|
|
2001-08-29 00:00:00 +00:00
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
// Purpose: Handles the drawing of the spectator stuff (camera & top-down map and all the things on it )
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
typedef struct overviewInfo_s {
|
2002-12-23 00:00:00 +00:00
|
|
|
|
char map[64]; // cl.levelname or empty
|
2001-08-29 00:00:00 +00:00
|
|
|
|
vec3_t origin; // center of map
|
|
|
|
|
float zoom; // zoom of map images
|
|
|
|
|
int layers; // how may layers do we have
|
|
|
|
|
float layersHeights[OVERVIEW_MAX_LAYERS];
|
|
|
|
|
char layersImages[OVERVIEW_MAX_LAYERS][255];
|
|
|
|
|
qboolean rotated; // are map images rotated (90 degrees) ?
|
|
|
|
|
|
|
|
|
|
int insetWindowX;
|
|
|
|
|
int insetWindowY;
|
|
|
|
|
int insetWindowHeight;
|
|
|
|
|
int insetWindowWidth;
|
|
|
|
|
} overviewInfo_t;
|
|
|
|
|
|
|
|
|
|
typedef struct overviewEntity_s {
|
|
|
|
|
|
|
|
|
|
HSPRITE hSprite;
|
|
|
|
|
struct cl_entity_s * entity;
|
|
|
|
|
double killTime;
|
|
|
|
|
} overviewEntity_t;
|
|
|
|
|
|
2023-07-20 18:11:37 +00:00
|
|
|
|
typedef struct cameraWayPoint_s
|
|
|
|
|
{
|
|
|
|
|
float time;
|
|
|
|
|
vec3_t position;
|
|
|
|
|
vec3_t angle;
|
|
|
|
|
float fov;
|
|
|
|
|
int flags;
|
|
|
|
|
} cameraWayPoint_t;
|
|
|
|
|
|
2001-08-29 00:00:00 +00:00
|
|
|
|
#define MAX_OVERVIEW_ENTITIES 128
|
2023-07-20 18:11:37 +00:00
|
|
|
|
#define MAX_CAM_WAYPOINTS 32
|
2001-08-29 00:00:00 +00:00
|
|
|
|
|
|
|
|
|
class CHudSpectator : public CHudBase
|
|
|
|
|
{
|
|
|
|
|
public:
|
2002-12-23 00:00:00 +00:00
|
|
|
|
void Reset();
|
|
|
|
|
int ToggleInset(bool allowOff);
|
|
|
|
|
void CheckSettings();
|
|
|
|
|
void InitHUDData( void );
|
2001-08-29 00:00:00 +00:00
|
|
|
|
bool AddOverviewEntityToList( HSPRITE sprite, cl_entity_t * ent, double killTime);
|
|
|
|
|
void DeathMessage(int victim);
|
|
|
|
|
bool AddOverviewEntity( int type, struct cl_entity_s *ent, const char *modelname );
|
|
|
|
|
void CheckOverviewEntities();
|
|
|
|
|
void DrawOverview();
|
|
|
|
|
void DrawOverviewEntities();
|
|
|
|
|
void GetMapPosition( float * returnvec );
|
|
|
|
|
void DrawOverviewLayer();
|
|
|
|
|
void LoadMapSprites();
|
|
|
|
|
bool ParseOverviewFile();
|
|
|
|
|
bool IsActivePlayer(cl_entity_t * ent);
|
|
|
|
|
void SetModes(int iMainMode, int iInsetMode);
|
|
|
|
|
void HandleButtonsDown(int ButtonPressed);
|
|
|
|
|
void HandleButtonsUp(int ButtonPressed);
|
|
|
|
|
void FindNextPlayer( bool bReverse );
|
2023-07-20 18:11:37 +00:00
|
|
|
|
void FindPlayer(const char *name);
|
2002-12-23 00:00:00 +00:00
|
|
|
|
void DirectorMessage( int iSize, void *pbuf );
|
2001-08-29 00:00:00 +00:00
|
|
|
|
void SetSpectatorStartPosition();
|
|
|
|
|
int Init();
|
|
|
|
|
int VidInit();
|
|
|
|
|
|
|
|
|
|
int Draw(float flTime);
|
|
|
|
|
|
2023-07-20 18:11:37 +00:00
|
|
|
|
void AddWaypoint( float time, vec3_t pos, vec3_t angle, float fov, int flags );
|
|
|
|
|
void SetCameraView( vec3_t pos, vec3_t angle, float fov);
|
|
|
|
|
float GetFOV();
|
|
|
|
|
bool GetDirectorCamera(vec3_t &position, vec3_t &angle);
|
|
|
|
|
void SetWayInterpolation(cameraWayPoint_t * prev, cameraWayPoint_t * start, cameraWayPoint_t * end, cameraWayPoint_t * next);
|
|
|
|
|
|
|
|
|
|
|
2001-08-29 00:00:00 +00:00
|
|
|
|
int m_iDrawCycle;
|
2002-12-23 00:00:00 +00:00
|
|
|
|
client_textmessage_t m_HUDMessages[MAX_SPEC_HUD_MESSAGES];
|
|
|
|
|
char m_HUDMessageText[MAX_SPEC_HUD_MESSAGES][128];
|
|
|
|
|
int m_lastHudMessage;
|
2001-08-29 00:00:00 +00:00
|
|
|
|
overviewInfo_t m_OverviewData;
|
|
|
|
|
overviewEntity_t m_OverviewEntities[MAX_OVERVIEW_ENTITIES];
|
2002-12-23 00:00:00 +00:00
|
|
|
|
int m_iObserverFlags;
|
|
|
|
|
int m_iSpectatorNumber;
|
|
|
|
|
|
2001-08-29 00:00:00 +00:00
|
|
|
|
float m_mapZoom; // zoom the user currently uses
|
|
|
|
|
vec3_t m_mapOrigin; // origin where user rotates around
|
2002-12-23 00:00:00 +00:00
|
|
|
|
cvar_t * m_drawnames;
|
|
|
|
|
cvar_t * m_drawcone;
|
|
|
|
|
cvar_t * m_drawstatus;
|
|
|
|
|
cvar_t * m_autoDirector;
|
|
|
|
|
cvar_t * m_pip;
|
|
|
|
|
qboolean m_chatEnabled;
|
2023-07-20 18:11:37 +00:00
|
|
|
|
|
|
|
|
|
qboolean m_IsInterpolating;
|
|
|
|
|
int m_ChaseEntity; // if != 0, follow this entity with viewangles
|
|
|
|
|
int m_WayPoint; // current waypoint 1
|
|
|
|
|
int m_NumWayPoints; // current number of waypoints
|
2002-12-23 00:00:00 +00:00
|
|
|
|
vec3_t m_cameraOrigin; // a help camera
|
|
|
|
|
vec3_t m_cameraAngles; // and it's angles
|
2023-07-20 18:11:37 +00:00
|
|
|
|
CInterpolation m_WayInterpolation;
|
2001-08-29 00:00:00 +00:00
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
vec3_t m_vPlayerPos[MAX_PLAYERS];
|
|
|
|
|
HSPRITE m_hsprPlayerBlue;
|
|
|
|
|
HSPRITE m_hsprPlayerRed;
|
|
|
|
|
HSPRITE m_hsprPlayer;
|
|
|
|
|
HSPRITE m_hsprCamera;
|
|
|
|
|
HSPRITE m_hsprPlayerDead;
|
|
|
|
|
HSPRITE m_hsprViewcone;
|
|
|
|
|
HSPRITE m_hsprUnkownMap;
|
|
|
|
|
HSPRITE m_hsprBeam;
|
|
|
|
|
HSPRITE m_hCrosshair;
|
2002-12-23 00:00:00 +00:00
|
|
|
|
|
|
|
|
|
wrect_t m_crosshairRect;
|
|
|
|
|
|
2001-08-29 00:00:00 +00:00
|
|
|
|
struct model_s * m_MapSprite; // each layer image is saved in one sprite, where each tile is a sprite frame
|
|
|
|
|
float m_flNextObserverInput;
|
2023-07-20 18:11:37 +00:00
|
|
|
|
float m_FOV;
|
2001-08-29 00:00:00 +00:00
|
|
|
|
float m_zoomDelta;
|
|
|
|
|
float m_moveDelta;
|
|
|
|
|
int m_lastPrimaryObject;
|
|
|
|
|
int m_lastSecondaryObject;
|
2023-07-20 18:11:37 +00:00
|
|
|
|
|
|
|
|
|
cameraWayPoint_t m_CamPath[MAX_CAM_WAYPOINTS];
|
2001-08-29 00:00:00 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // SPECTATOR_H
|