aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/hud_lcd.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/hud_lcd.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/client/hud_lcd.h')
-rw-r--r--mp/src/game/client/hud_lcd.h273
1 files changed, 273 insertions, 0 deletions
diff --git a/mp/src/game/client/hud_lcd.h b/mp/src/game/client/hud_lcd.h
new file mode 100644
index 00000000..fed41a68
--- /dev/null
+++ b/mp/src/game/client/hud_lcd.h
@@ -0,0 +1,273 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: CLCD Manages the Logitech G-Series Gaming Keyboard LCD
+//
+// $NoKeywords: $
+//=============================================================================//
+#ifndef HUD_LCD_H
+#define HUD_LCD_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier1/utlvector.h"
+#include "tier1/utlstring.h"
+#include "tier1/utldict.h"
+
+#include "ihudlcd.h"
+
+class KeyValues;
+class IG15;
+class C_BasePlayer;
+
+enum
+{
+ LCDITEM_UNKNOWN = 0,
+ LCDITEM_PAGE,
+ LCDITEM_TEXT,
+ LCDITEM_ICON,
+ LCDITEM_AGGREGATE, // Made up of subitems
+};
+
+// Aggregate item types
+enum
+{
+ AGGTYPE_UNKNOWN = 0,
+ AGGTYPE_PERPLAYER,
+ AGGTYPE_PERTEAM,
+};
+
+class CLCDItem
+{
+public:
+ CLCDItem() :
+ m_bActive( true ),
+ m_nSubPage( 0 ),
+ m_Type( LCDITEM_UNKNOWN ),
+ m_Handle( 0 ),
+ x( 0 ),
+ y( 0 ),
+ w( 0 ),
+ h( 0 )
+ {
+ }
+
+ virtual ~CLCDItem() {}
+
+ virtual void Create( IG15 *lcd ) = 0;
+ virtual void Wipe( IG15 *lcd );
+
+ bool m_bActive;
+ int m_Type;
+ void *m_Handle;
+ int x, y, w, h;
+
+ int m_nSubPage;
+
+ CUtlVector< CLCDItem * > m_Children;
+};
+
+class CLCDItemText : public CLCDItem
+{
+ typedef CLCDItem BaseClass;
+public:
+ CLCDItemText() :
+ m_bHasWildcard( false ),
+ m_iSize( 0 ),
+ m_iAlign( 0 )
+ {
+ m_Type = LCDITEM_TEXT;
+ }
+
+ virtual void Create( IG15 *lcd );
+
+ CUtlString m_OriginalText;
+ bool m_bHasWildcard;
+ int m_iSize;
+ int m_iAlign;
+};
+
+class CLCDItemIcon : public CLCDItem
+{
+ typedef CLCDItem BaseClass;
+
+public:
+ CLCDItemIcon() :
+ m_icon( NULL )
+ {
+ m_Type = LCDITEM_ICON;
+ }
+
+ virtual void Create( IG15 *lcd );
+
+ CUtlString m_IconName;
+ void *m_icon;
+};
+
+class CLCDItemAggregate : public CLCDItem
+{
+ typedef CLCDItem BaseClass;
+
+public:
+ CLCDItemAggregate() :
+ m_AggType( AGGTYPE_UNKNOWN ),
+ m_dwNextUpdateTime( 0 ),
+ m_yincrement( 0 )
+ {
+ m_Type = LCDITEM_AGGREGATE;
+ }
+
+ virtual void Create( IG15 *lcd );
+ virtual void Wipe( IG15 *lcd );
+
+ void WipeChildrenOnly( IG15 *lcd );
+
+ unsigned int m_dwNextUpdateTime;
+ int m_AggType;
+
+ int m_yincrement;
+
+ // Representative row
+ CUtlVector< CLCDItem * > m_Definition;
+};
+
+class CLCDPage : public CLCDItem
+{
+public:
+ CLCDPage() :
+ m_bSubItem( false ),
+ m_bTitlePage( false ),
+ m_bRequiresPlayer( false ),
+ m_nSubPageCount( 1 )
+ {
+ m_Type = LCDITEM_PAGE;
+ }
+
+ ~CLCDPage()
+ {
+ }
+
+ virtual void Create( IG15 *lcd )
+ {
+ }
+
+ CLCDItem *Alloc( int type )
+ {
+ CLCDItem *item = NULL;
+
+ switch ( type )
+ {
+ default:
+ break;
+ case LCDITEM_PAGE:
+ // This shouldn't occur
+ break;
+ case LCDITEM_TEXT:
+ item = new CLCDItemText();
+ break;
+ case LCDITEM_ICON:
+ item = new CLCDItemIcon();
+ break;
+ case LCDITEM_AGGREGATE:
+ item = new CLCDItemAggregate();
+ break;
+ }
+
+ if ( item )
+ {
+ return item;
+ }
+
+ Assert( 0 );
+ return NULL;
+ }
+
+ void InitFromKeyValues( KeyValues *kv );
+
+ bool m_bSubItem;
+ bool m_bTitlePage;
+ bool m_bRequiresPlayer;
+ int m_nSubPageCount;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: Manages the Logitech G-Series Gaming Keyboard LCD
+//-----------------------------------------------------------------------------
+class CLCD : public IHudLCD
+{
+public:
+ CLCD();
+ ~CLCD();
+
+ // Implement IHudLCD
+ virtual void SetGlobalStat( char const *name, char const *value );
+ virtual void AddChatLine( char const *txt );
+
+ // Exposed as a ConCommand
+ void Reload();
+ void DumpPlayer();
+
+public:
+
+ // Init's called when the HUD's created at DLL load
+ void Init( void );
+ void Shutdown();
+ void Update( void );
+ bool IsConnected() const;
+
+private:
+
+ CLCDItemIcon *ParseItemIcon( CLCDPage *page, bool bCreateHandles, KeyValues *sub );
+ CLCDItemText *ParseItemText( CLCDPage *page, bool bCreateHandles, KeyValues *sub );
+ void ParseItems_R( CLCDPage *page, bool bCreateHandles, KeyValues *kv, CUtlVector< CLCDItem * >& list );
+
+ void ParsePage( KeyValues *kv );
+ void ParseIconMappings( KeyValues *kv );
+ void ParseReplacements( KeyValues *kv );
+ void DisplayCurrentPage( unsigned int dwCurTime );
+
+ void ShowItems_R( CLCDPage *page, unsigned int dwCurTime, CUtlVector< CLCDItem * >& list, bool show );
+
+ int FindTitlePage();
+ void BuildUpdatedText( char const *in, CUtlString& out );
+ void LookupToken( char const *token, CUtlString& value );
+ bool ExtractArrayIndex( char *str, size_t bufsize, int *index );
+
+ bool Replace( CUtlString& str, char const *search, char const *replace );
+ void DoGlobalReplacements( CUtlString& str );
+ void ReduceParentheses( CUtlString& str );
+
+ bool IsPageValid( int currentPage, C_BasePlayer *player );
+ void UpdateChat();
+
+ IG15 *m_lcd ;
+
+ CUtlString m_Title;
+ int m_Size[ 2 ];
+ CUtlVector< CLCDPage * > m_Pages;
+ int m_nCurrentPage;
+ int m_nSubPage;
+ int m_nMaxChatHistory;
+
+ CUtlDict< int, int > m_TextSizes;
+ CUtlDict< int, int > m_TextAlignments;
+
+ struct IconInfo_t
+ {
+ void *m_handle;
+ };
+
+ CUtlDict< IconInfo_t, int > m_Icons;
+ bool m_bHadPlayer;
+
+ CUtlDict< CUtlString, int > m_GlobalStats;
+ CUtlVector< CUtlString > m_ChatHistory;
+
+ unsigned int m_dwNextUpdateTime;
+ CSysModule *m_pG15Module;
+ CreateInterfaceFn m_G15Factory;
+};
+
+extern CLCD gLCD;
+
+#endif // HUD_LCD_H