diff options
Diffstat (limited to 'mp/src/game/client/sdk/sdk_hud_message.cpp')
| -rw-r--r-- | mp/src/game/client/sdk/sdk_hud_message.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/mp/src/game/client/sdk/sdk_hud_message.cpp b/mp/src/game/client/sdk/sdk_hud_message.cpp new file mode 100644 index 00000000..20179727 --- /dev/null +++ b/mp/src/game/client/sdk/sdk_hud_message.cpp @@ -0,0 +1,107 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Simple HUD element
+//
+//=============================================================================
+
+#include "cbase.h"
+#include "hudelement.h"
+#include "hud_macros.h"
+#include "iclientmode.h"
+#include "view.h"
+
+using namespace vgui;
+
+#include <vgui_controls/Panel.h>
+#include <vgui_controls/Frame.h>
+#include <vgui/IScheme.h>
+#include <vgui/ISurface.h>
+#include <vgui/ILocalize.h>
+
+class CHudGameMessage : public CHudElement, public vgui::Panel
+{
+private:
+ DECLARE_CLASS_SIMPLE( CHudGameMessage, vgui::Panel );
+
+public:
+
+ CHudGameMessage( const char *pElementName ) : CHudElement( pElementName ), vgui::Panel( NULL, "HudGameMessage" )
+ {
+ // Set our parent window
+ SetParent( g_pClientMode->GetViewport() );
+
+ m_pIcon = NULL;
+
+ // Never hide
+ SetHiddenBits( 0 );
+ };
+
+ void Init( void );
+ void VidInit( void );
+ void Paint( void );
+
+ // Callback function for the "GameMessage" user message
+ void MsgFunc_GameMessage( bf_read &msg );
+
+private:
+ CHudTexture *m_pIcon; // Icon texture reference
+ wchar_t m_pText[256]; // Unicode text buffer
+
+ float m_flStartTime; // When the message was recevied
+ float m_flDuration; // Duration of the message
+};
+
+DECLARE_HUDELEMENT( CHudGameMessage );
+DECLARE_HUD_MESSAGE( CHudGameMessage, GameMessage );
+
+void CHudGameMessage::VidInit( void )
+{
+ // Store off a reference to our icon
+ m_pIcon = gHUD.GetIcon( "message_icon" );
+
+ m_pText[0] = '\0';
+}
+
+void CHudGameMessage::Init( void )
+{
+ HOOK_HUD_MESSAGE( CHudGameMessage, GameMessage );
+}
+
+void CHudGameMessage::MsgFunc_GameMessage( bf_read &msg )
+{
+ // Read in our string
+ char szString[256];
+ msg.ReadString( szString, sizeof(szString) );
+
+ // Convert it to localize friendly unicode
+ g_pVGuiLocalize->ConvertANSIToUnicode( szString, m_pText, sizeof(m_pText) );
+
+ // Setup our time trackers
+ m_flStartTime = gpGlobals->curtime;
+ m_flDuration = 5.0f;
+}
+
+void CHudGameMessage::Paint( void )
+{
+ if ( !m_pIcon )
+ return;
+
+ // Find our fade based on our time shown
+ float dt = ( m_flStartTime - gpGlobals->curtime );
+ float flAlpha = SimpleSplineRemapVal( dt, 0.0f, m_flDuration, 255, 0 );
+ flAlpha = clamp( flAlpha, 0.0f, 255.0f );
+
+ // Draw our icon
+ m_pIcon->DrawSelf( 0, 0, 32, 32, Color(255,255,255,flAlpha) );
+
+ // Get our scheme and font information
+ vgui::HScheme scheme = vgui::scheme()->GetScheme( "ClientScheme" );
+ vgui::HFont hFont = vgui::scheme()->GetIScheme(scheme)->GetFont( "Default" );
+
+ // Draw our text
+ surface()->DrawSetTextFont( hFont ); // set the font
+ surface()->DrawSetTextColor( 255, 255, 255, flAlpha ); // white
+ surface()->DrawSetTextPos( 32, 8 ); // x,y position
+ surface()->DrawPrintText( m_pText, wcslen(m_pText) ); // print text
+}
+
|