csgo-2018-source/fow/fow_viewer.h

92 lines
3.6 KiB
C
Raw Normal View History

2021-07-25 12:11:47 +08:00
//========= Copyright <20> 1996-2009, Valve Corporation, All rights reserved. ============//
//
// Purpose: a localized viewer for the Fog of War
//
// $NoKeywords: $
//=====================================================================================//
#ifndef FOW_VIEWER_H
#define FOW_VIEWER_H
#if defined( COMPILER_MSVC )
#pragma once
#endif
#include "mathlib/vector.h"
class CFoW;
class CFoW_Viewer
{
public:
// constructor to init this viewer with the id and temp
CFoW_Viewer( int nID, unsigned nViewerTeam );
// destructor to free up the local vis grids
~CFoW_Viewer( void );
// update the radius of the viewer. this will realloc the local vis grids
void UpdateSize( CFoW *pFoW, float flRadius );
// update the location of the viewer
bool UpdateLocation( CFoW *pFoW, const Vector &vLocation, Vector *pvOldLocation );
// update the height group of this viewer
void UpdateHeightGroup( uint8 nHeightGroup );
//
inline void Dirty( ) { m_bDirty = true; }
//
inline bool IsDirty( ) { return m_bDirty; }
// get the team the viewer is on
inline unsigned GetTeam( void ) { return m_nViewerTeam; }
// get the radius of the viewer
inline float GetSize( void ) { return m_flRadius; }
// get the grid-centered location of the viewer
inline Vector &GetLocation( void ) { return m_vLocation; }
// get the real location of the viewer
inline Vector &GetRealLocation( void ) { return m_vRealLocation; }
// get the height group of the viewer
inline uint8 GetHeightGroup( void ) { return m_nHeightGroup; }
// get the grid units of the local vis. ( diameter / horizontal grid size ) rounded up
inline int GetGridUnits( void ) { return m_nGridUnits; }
// get the local visibility grid
inline byte *GetVisibility( void ) { return m_pVisibility; }
// get the visibility radius grid
inline int *GetVisibilityRadius( void ) { return m_pVisibilityRadius; }
// get the grid units of the radius grid ( circumference / horizontal grid size ) rounded up
inline int GetRadiusUnits( void ) { return m_nRadiusUnits; }
// get the upper left coords of this viewer
void GetStartPosition( Vector2D &vResults );
// get the lower right coords of this viewer
void GetEndPosition( Vector2D &vResults );
// calculate the localized visibility against all occluders.
void CalcLocalizedVisibility( CFoW *pFoW );
// clear the localized radius grid to the maximum distance
void DefaultViewingRadius( CFoW *pFoW );
//
void DrawDebugInfo( Vector &vLocation, float flViewRadius, unsigned nFlags );
//
size_t GetAllocatedMemory( ) { return m_nAllocatedMemory; }
private:
// clear the localized visibility grid to just the raw radius
void DefaultViewingArea( CFoW *pFoW );
// turn the radius grid into the localized visibility grid
void ResolveRadius( CFoW *pFoW );
int m_nID; // the id of this viewer
unsigned m_nViewerTeam; // the team this viewer belongs to
float m_flRadius; // the radius of this viewer
Vector m_vLocation; // the grid location of this viewer
Vector m_vRealLocation; // the real location of this viewer
byte *m_pVisibility; // the localized visibility grid
int m_nGridUnits; // the grid units ( diameter / horizontal grid size ) rounded up
int *m_pVisibilityRadius; // the localized visibility depth circle
int m_nRadiusUnits; // the grid units of the radius grid ( circumference / horizontal grid size ) rounded up
int *m_pVisibilityTable; // the visibility table to go from grid to radius
bool m_bDirty; //
uint8 m_nHeightGroup; // the height group this viewer belongs to
size_t m_nAllocatedMemory; //
};
#endif // FOW_VIEWER_H