diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/c_vguiscreen.h | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/client/c_vguiscreen.h')
| -rw-r--r-- | mp/src/game/client/c_vguiscreen.h | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/mp/src/game/client/c_vguiscreen.h b/mp/src/game/client/c_vguiscreen.h new file mode 100644 index 00000000..14519ed2 --- /dev/null +++ b/mp/src/game/client/c_vguiscreen.h @@ -0,0 +1,187 @@ +//========= 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 );
+
+
+// Called at shutdown.
+void ClearKeyValuesCache();
+
+
+#endif // C_VGUISCREEN_H
+
|