mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-15 21:26:57 +00:00
1
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef C_VGUISCREEN_H
|
||||
#define C_VGUISCREEN_H
|
||||
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
|
||||
#include <vgui_controls/EditablePanel.h>
|
||||
#include "c_baseentity.h"
|
||||
#include "panelmetaclassmgr.h"
|
||||
|
||||
class KeyValues;
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Helper macro to make overlay factories one line of code. Use like this:
|
||||
// DECLARE_VGUI_SCREEN_FACTORY( CVguiScreenPanel, "image" );
|
||||
//-----------------------------------------------------------------------------
|
||||
struct VGuiScreenInitData_t
|
||||
{
|
||||
C_BaseEntity *m_pEntity;
|
||||
|
||||
VGuiScreenInitData_t() : m_pEntity(NULL) {}
|
||||
VGuiScreenInitData_t( C_BaseEntity *pEntity ) : m_pEntity(pEntity) {}
|
||||
};
|
||||
|
||||
#define DECLARE_VGUI_SCREEN_FACTORY( _PanelClass, _nameString ) \
|
||||
DECLARE_PANEL_FACTORY( _PanelClass, VGuiScreenInitData_t, _nameString )
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Base class for vgui screen panels
|
||||
//-----------------------------------------------------------------------------
|
||||
class CVGuiScreenPanel : public vgui::EditablePanel
|
||||
{
|
||||
DECLARE_CLASS_GAMEROOT( CVGuiScreenPanel, vgui::EditablePanel );
|
||||
|
||||
public:
|
||||
CVGuiScreenPanel( vgui::Panel *parent, const char *panelName );
|
||||
CVGuiScreenPanel( vgui::Panel *parent, const char *panelName, vgui::HScheme hScheme );
|
||||
virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData );
|
||||
vgui::Panel *CreateControlByName(const char *controlName);
|
||||
virtual void OnCommand( const char *command );
|
||||
|
||||
protected:
|
||||
C_BaseEntity *GetEntity() const { return m_hEntity.Get(); }
|
||||
|
||||
private:
|
||||
EHANDLE m_hEntity;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
class C_VGuiScreen : public C_BaseEntity
|
||||
{
|
||||
DECLARE_CLASS( C_VGuiScreen, C_BaseEntity );
|
||||
public:
|
||||
DECLARE_CLIENTCLASS();
|
||||
|
||||
C_VGuiScreen();
|
||||
~C_VGuiScreen();
|
||||
|
||||
virtual void PreDataUpdate( DataUpdateType_t updateType );
|
||||
virtual void OnDataChanged( DataUpdateType_t type );
|
||||
virtual int DrawModel( int flags );
|
||||
virtual bool ShouldDraw( void );
|
||||
virtual void ClientThink( );
|
||||
virtual void GetAimEntOrigin( IClientEntity *pAttachedTo, Vector *pOrigin, QAngle *pAngles );
|
||||
virtual bool IsVisibleToPlayer( C_BasePlayer *pViewingPlayer );
|
||||
virtual bool IsTransparent( void );
|
||||
|
||||
const char *PanelName() const;
|
||||
|
||||
// The view screen has the cursor pointing at it
|
||||
void GainFocus( );
|
||||
void LoseFocus();
|
||||
|
||||
// Button state...
|
||||
void SetButtonState( int nButtonState );
|
||||
|
||||
// Is the screen backfaced given a view position?
|
||||
bool IsBackfacing( const Vector &viewOrigin );
|
||||
|
||||
// Return intersection point of ray with screen in barycentric coords
|
||||
bool IntersectWithRay( const Ray_t &ray, float *u, float *v, float *t );
|
||||
|
||||
// Is the screen turned on?
|
||||
bool IsActive() const;
|
||||
|
||||
// Are we only visible to teammates?
|
||||
bool IsVisibleOnlyToTeammates() const;
|
||||
|
||||
// Are we visible to someone on this team?
|
||||
bool IsVisibleToTeam( int nTeam );
|
||||
|
||||
bool IsAttachedToViewModel() const;
|
||||
|
||||
virtual RenderGroup_t GetRenderGroup();
|
||||
|
||||
bool AcceptsInput() const;
|
||||
void SetAcceptsInput( bool acceptsinput );
|
||||
|
||||
C_BasePlayer *GetPlayerOwner( void );
|
||||
bool IsInputOnlyToOwner( void );
|
||||
|
||||
private:
|
||||
// Vgui screen management
|
||||
void CreateVguiScreen( const char *pTypeName );
|
||||
void DestroyVguiScreen( );
|
||||
|
||||
// Computes the panel to world transform
|
||||
void ComputePanelToWorld();
|
||||
|
||||
// Computes control points of the quad describing the screen
|
||||
void ComputeEdges( Vector *pUpperLeft, Vector *pUpperRight, Vector *pLowerLeft );
|
||||
|
||||
// Writes the z buffer
|
||||
void DrawScreenOverlay();
|
||||
|
||||
private:
|
||||
int m_nPixelWidth;
|
||||
int m_nPixelHeight;
|
||||
float m_flWidth;
|
||||
float m_flHeight;
|
||||
int m_nPanelName; // The name of the panel
|
||||
int m_nButtonState;
|
||||
int m_nButtonPressed;
|
||||
int m_nButtonReleased;
|
||||
int m_nOldPx;
|
||||
int m_nOldPy;
|
||||
int m_nOldButtonState;
|
||||
int m_nAttachmentIndex;
|
||||
int m_nOverlayMaterial;
|
||||
int m_fScreenFlags;
|
||||
|
||||
int m_nOldPanelName;
|
||||
int m_nOldOverlayMaterial;
|
||||
|
||||
bool m_bLoseThinkNextFrame;
|
||||
|
||||
bool m_bAcceptsInput;
|
||||
|
||||
CMaterialReference m_WriteZMaterial;
|
||||
CMaterialReference m_OverlayMaterial;
|
||||
|
||||
VMatrix m_PanelToWorld;
|
||||
|
||||
CPanelWrapper m_PanelWrapper;
|
||||
|
||||
CHandle<C_BasePlayer> m_hPlayerOwner;
|
||||
};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns an entity that is the nearby vgui screen; NULL if there isn't one
|
||||
//-----------------------------------------------------------------------------
|
||||
C_BaseEntity *FindNearbyVguiScreen( const Vector &viewPosition, const QAngle &viewAngle, int nTeam = -1 );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Activates/Deactivates vgui screen
|
||||
//-----------------------------------------------------------------------------
|
||||
void ActivateVguiScreen( C_BaseEntity *pVguiScreen );
|
||||
void DeactivateVguiScreen( C_BaseEntity *pVguiScreen );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Updates vgui screen button state
|
||||
//-----------------------------------------------------------------------------
|
||||
void SetVGuiScreenButtonState( C_BaseEntity *pVguiScreen, int nButtonState );
|
||||
|
||||
|
||||
#endif // C_VGUISCREEN_H
|
||||
|
||||
Reference in New Issue
Block a user