uid issue
This commit is contained in:
641
engine/cl_pluginhelpers.cpp
Normal file
641
engine/cl_pluginhelpers.cpp
Normal file
@ -0,0 +1,641 @@
|
||||
//===== Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ======//
|
||||
//
|
||||
// Purpose: baseclientstate.cpp: implementation of the CBaseClientState class.
|
||||
//
|
||||
//===========================================================================//
|
||||
|
||||
#include "client_pch.h"
|
||||
#include "limits.h"
|
||||
#include "cl_pluginhelpers.h"
|
||||
|
||||
#include <inetchannel.h>
|
||||
|
||||
#include <vgui/ISurface.h>
|
||||
#include <vgui/IScheme.h>
|
||||
#include <vgui/ILocalize.h>
|
||||
#include <vgui/IVGui.h>
|
||||
#include <vgui/IPanel.h>
|
||||
#include <vgui_controls/Controls.h>
|
||||
#include <vgui_controls/Frame.h>
|
||||
#include <vgui_controls/EditablePanel.h>
|
||||
#include <vgui_controls/Button.h>
|
||||
#include <vgui_controls/RichText.h>
|
||||
#include <vgui_controls/Label.h>
|
||||
#include <vgui_controls/TextEntry.h>
|
||||
#include <vgui_controls/ImagePanel.h>
|
||||
#include <vgui_controls/AnimationController.h>
|
||||
#include "vgui_baseui_interface.h"
|
||||
#include "vgui_askconnectpanel.h"
|
||||
#include "cmd.h"
|
||||
#include "tier1/convar.h"
|
||||
|
||||
// NOTE: This has to be the last file included!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
|
||||
// FIXME: Seems like we just extern this everywhere. Maybe it should be in a header file somewhere?
|
||||
extern IVEngineClient *engineClient;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Displays the options menu
|
||||
//-----------------------------------------------------------------------------
|
||||
class CPluginMenu : public vgui::EditablePanel
|
||||
{
|
||||
private:
|
||||
DECLARE_CLASS_SIMPLE( CPluginMenu, vgui::EditablePanel );
|
||||
|
||||
public:
|
||||
CPluginMenu( vgui::Panel *parent );
|
||||
virtual ~CPluginMenu();
|
||||
|
||||
void Show( KeyValues *kv );
|
||||
void OnCommand(const char *command);
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginMenu::CPluginMenu( vgui::Panel *parent ) : EditablePanel(parent, "PluginMenu" )
|
||||
{
|
||||
LoadControlSettings("Resource/UI/PluginMenu.res");
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginMenu::~CPluginMenu()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Show the options menu after using key values to configure it
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginMenu::Show( KeyValues *kv )
|
||||
{
|
||||
vgui::Label *control = dynamic_cast<vgui::Label *>(FindChildByName("Text"));
|
||||
if (control)
|
||||
{
|
||||
control->SetText( kv->GetWString( "msg" ) );
|
||||
}
|
||||
|
||||
|
||||
int i = 0;
|
||||
// hide all the buttons
|
||||
for ( i = 0; i < GetChildCount(); i++ )
|
||||
{
|
||||
vgui::Button *button = dynamic_cast<vgui::Button *>(GetChild(i));
|
||||
if ( button )
|
||||
{
|
||||
button->SetVisible( false );
|
||||
}
|
||||
}
|
||||
|
||||
i = 1;
|
||||
// now work out what buttons to display
|
||||
for ( KeyValues *pCur=kv->GetFirstTrueSubKey(); pCur; pCur=pCur->GetNextTrueSubKey(), i++ )
|
||||
{
|
||||
char controlName[64];
|
||||
Q_snprintf( controlName, sizeof(controlName), "option%i", i );
|
||||
vgui::Button *button = dynamic_cast<vgui::Button *>(FindChildByName(controlName,true));
|
||||
Assert( button );
|
||||
if ( button )
|
||||
{
|
||||
button->SetText( pCur->GetWString( "msg" ));
|
||||
button->SetCommand( pCur->GetString( "command" ));
|
||||
button->SetVisible( true );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: when a button is pressed send that command back to the engine
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginMenu::OnCommand( const char *command )
|
||||
{
|
||||
Cbuf_AddText( Cbuf_GetCurrentPlayer(), command );
|
||||
|
||||
CallParentFunction( new KeyValues( "Command", "command", "close" ) );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: Displays the gameui portion of plugin menus
|
||||
//-----------------------------------------------------------------------------
|
||||
class CPluginGameUIDialog : public vgui::Frame
|
||||
{
|
||||
private:
|
||||
DECLARE_CLASS_SIMPLE( CPluginGameUIDialog, vgui::Frame );
|
||||
|
||||
public:
|
||||
CPluginGameUIDialog();
|
||||
virtual ~CPluginGameUIDialog();
|
||||
|
||||
virtual void Show( DIALOG_TYPE type, KeyValues *kv );
|
||||
|
||||
protected:
|
||||
void OnCommand( const char *cmd );
|
||||
|
||||
private:
|
||||
CPluginMenu *m_Menu;
|
||||
vgui::RichText *m_RichText;
|
||||
vgui::Label *m_Message;
|
||||
vgui::TextEntry *m_Entry;
|
||||
vgui::Label *m_EntryLabel;
|
||||
vgui::Button *m_CloseButton;
|
||||
char m_szEntryCommand[ 255 ];
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginGameUIDialog::CPluginGameUIDialog() : vgui::Frame( NULL, "Plugins" )
|
||||
{
|
||||
// initialize dialog
|
||||
SetTitle( "Plugins", true );
|
||||
SetAlpha( 255 );
|
||||
|
||||
SetScheme( "Tracker" );
|
||||
|
||||
m_szEntryCommand[ 0 ] = 0;
|
||||
|
||||
m_Menu = new CPluginMenu( this );
|
||||
m_RichText = new vgui::RichText( this, "Rich" );
|
||||
m_Message = new vgui::Label( this, "Label", "" );
|
||||
m_Entry = new vgui::TextEntry( this, "Entry" );
|
||||
m_EntryLabel = new vgui::Label( this, "EntryLabel", "" );
|
||||
m_CloseButton = new vgui::Button( this, "Close", "");
|
||||
|
||||
LoadControlSettings("Resource/UI/Plugin.res");
|
||||
InvalidateLayout();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginGameUIDialog::~CPluginGameUIDialog()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: called when the close button is pressed
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginGameUIDialog::OnCommand( const char *cmd )
|
||||
{
|
||||
if ( !Q_stricmp( cmd, "close" ) )
|
||||
{
|
||||
if ( Q_strlen(m_szEntryCommand) > 0 )
|
||||
{
|
||||
char userCMD[ 512 ];
|
||||
char entryText[ 255 ];
|
||||
m_Entry->GetText( entryText, sizeof(entryText) );
|
||||
Q_snprintf( userCMD, sizeof(userCMD), "%s %s\n", m_szEntryCommand, entryText );
|
||||
|
||||
// Only let them run commands marked with FCVAR_CLIENTCMD_CAN_EXECUTE.
|
||||
engineClient->ClientCmd( userCMD );
|
||||
}
|
||||
Close();
|
||||
g_PluginManager->OnPanelClosed();
|
||||
}
|
||||
else
|
||||
{
|
||||
BaseClass::OnCommand( cmd );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: shows a precanned style of message in the GameUI
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginGameUIDialog::Show( DIALOG_TYPE type, KeyValues *kv )
|
||||
{
|
||||
m_Menu->SetVisible(false);
|
||||
m_RichText->SetVisible(false);
|
||||
m_Message->SetVisible(false);
|
||||
m_Entry->SetVisible(false);
|
||||
m_EntryLabel->SetVisible(false);
|
||||
m_szEntryCommand[ 0 ] = 0;
|
||||
|
||||
SetTitle( kv->GetWString( "title" ), true );
|
||||
|
||||
switch ( type )
|
||||
{
|
||||
case DIALOG_MENU: // a options menu
|
||||
m_Menu->Show( kv );
|
||||
m_Menu->SetVisible( true );
|
||||
break;
|
||||
case DIALOG_TEXT: // a richtext dialog
|
||||
m_RichText->SetText( kv->GetWString( "msg" ) );
|
||||
m_RichText->SetVisible( true );
|
||||
break;
|
||||
case DIALOG_MSG: // just a msg to the screen, don't display in the gameui
|
||||
SetVisible( false );
|
||||
return;
|
||||
break;
|
||||
case DIALOG_ENTRY:
|
||||
m_Entry->SetVisible( true );
|
||||
m_EntryLabel->SetVisible( true );
|
||||
m_EntryLabel->SetText( kv->GetWString( "msg" ) );
|
||||
Q_strncpy( m_szEntryCommand, kv->GetString( "command" ), sizeof(m_szEntryCommand) );
|
||||
m_CloseButton->SetText( "#GameUI_OK" );
|
||||
break;
|
||||
default:
|
||||
Msg( "Invalid menu type (%i)\n", type );
|
||||
break;
|
||||
}
|
||||
Activate();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: the individual message snippets
|
||||
//-----------------------------------------------------------------------------
|
||||
class CMessage : public vgui::Label
|
||||
{
|
||||
private:
|
||||
DECLARE_CLASS_SIMPLE( CMessage, vgui::Label );
|
||||
public:
|
||||
CMessage(vgui::Panel *parent, const char *panelName, const char *text);
|
||||
~CMessage();
|
||||
|
||||
bool HasExtraPanel() { return m_bHasExtraPanel; }
|
||||
|
||||
protected:
|
||||
void ApplySchemeSettings( vgui::IScheme *pScheme );
|
||||
|
||||
private:
|
||||
bool m_bHasExtraPanel;
|
||||
};
|
||||
|
||||
CMessage::CMessage( vgui::Panel *parent, const char *panelName, const char *text ) : vgui::Label( parent, panelName, text )
|
||||
{
|
||||
m_bHasExtraPanel = false;
|
||||
}
|
||||
|
||||
CMessage::~CMessage()
|
||||
{
|
||||
}
|
||||
|
||||
void CMessage::ApplySchemeSettings( vgui::IScheme *pScheme )
|
||||
{
|
||||
vgui::HFont font = pScheme->GetFont( "PluginText", false );
|
||||
if ( font == vgui::INVALID_FONT )
|
||||
{
|
||||
font = pScheme->GetFont( "HudHintText", false );
|
||||
}
|
||||
SetFont(font);
|
||||
BaseClass::ApplySchemeSettings( pScheme );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: the hud plugin message panel
|
||||
//-----------------------------------------------------------------------------
|
||||
class CPluginHudMessage : public vgui::Frame
|
||||
{
|
||||
private:
|
||||
DECLARE_CLASS_SIMPLE( CPluginHudMessage, vgui::Frame );
|
||||
|
||||
public:
|
||||
CPluginHudMessage( vgui::VPANEL parent );
|
||||
~CPluginHudMessage();
|
||||
|
||||
void ShowMessage( const wchar_t *message, int time, Color clr, bool bHasExtraPanel );
|
||||
void StartHiding();
|
||||
void Hide();
|
||||
|
||||
protected:
|
||||
void ApplySchemeSettings( vgui::IScheme *pScheme );
|
||||
void OnTick();
|
||||
void OnSizeChanged( int newWide, int newTall );
|
||||
|
||||
private:
|
||||
enum { MESSAGE_X_INSET = 40, MAX_TEXT_LEN_PIXELS = 400 };
|
||||
|
||||
CMessage *m_Message;
|
||||
vgui::ImagePanel *m_pExtraPanelIcon;
|
||||
bool m_bHidingControl;
|
||||
int m_iTargetH, m_iTargetW;
|
||||
Color m_fgColor;
|
||||
|
||||
vgui::AnimationController *m_pAnimationController;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginHudMessage::CPluginHudMessage( vgui::VPANEL parent ) : vgui::Frame( NULL, "PluginHudMessage" )
|
||||
{
|
||||
SetParent( parent );
|
||||
SetVisible( false );
|
||||
SetAlpha( 255 );
|
||||
SetMinimumSize( 10 , 10 );
|
||||
|
||||
SetScheme( "ClientScheme" );
|
||||
SetMoveable(false);
|
||||
SetSizeable(false);
|
||||
SetKeyBoardInputEnabled( false );
|
||||
SetMouseInputEnabled( false );
|
||||
SetTitleBarVisible( false );
|
||||
|
||||
m_pExtraPanelIcon = new vgui::ImagePanel( this, "ExtraPanelIcon" );
|
||||
m_pExtraPanelIcon->SetVisible( false );
|
||||
|
||||
m_Message = new CMessage( this, "Msg", "");
|
||||
m_Message->SetVisible( false );
|
||||
|
||||
m_pAnimationController = new vgui::AnimationController( NULL );
|
||||
m_pAnimationController->SetParent( parent );
|
||||
m_pAnimationController->SetScriptFile( parent, "scripts/plugin_animations.txt" );
|
||||
m_pAnimationController->SetProportional( false );
|
||||
|
||||
vgui::ivgui()->AddTickSignal(GetVPanel());
|
||||
|
||||
LoadControlSettings("Resource/UI/PluginHud.res");
|
||||
InvalidateLayout();
|
||||
GetSize( m_iTargetW, m_iTargetH );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginHudMessage::~CPluginHudMessage()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: set the see through color and rounded corners
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginHudMessage::ApplySchemeSettings( vgui::IScheme *pScheme )
|
||||
{
|
||||
m_pExtraPanelIcon->SetImage( vgui::scheme()->GetImage( "plugin/message_waiting", true ) );
|
||||
BaseClass::ApplySchemeSettings( pScheme );
|
||||
SetBgColor( pScheme->GetColor( "Plugins.BgColor", pScheme->GetColor( "TransparentBlack", Color( 0, 0, 0, 192 ))) );
|
||||
SetPaintBackgroundType( 2 );
|
||||
|
||||
m_Message->SetFgColor( m_fgColor );
|
||||
m_pExtraPanelIcon->SetVisible( !m_bHidingControl );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: run the anim controller and hide the message label if the anim var says to
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginHudMessage::OnTick()
|
||||
{
|
||||
m_pAnimationController->UpdateAnimations( Sys_FloatTime() );
|
||||
BaseClass::OnTick();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: get the label size to track
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginHudMessage::OnSizeChanged( int newWide, int newTall )
|
||||
{
|
||||
BaseClass::OnSizeChanged( newWide, newTall );
|
||||
int w, h;
|
||||
GetSize( w, h );
|
||||
m_Message->SetBounds( MESSAGE_X_INSET, 5, w - MESSAGE_X_INSET - 10, h - 10 );
|
||||
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: start the shrinking anim for the control if it should be showed, the hide anim otherwsise
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginHudMessage::StartHiding()
|
||||
{
|
||||
if ( m_pExtraPanelIcon->IsVisible() )
|
||||
{
|
||||
m_pAnimationController->StartAnimationSequence( "PluginMessageSmall" );
|
||||
}
|
||||
else
|
||||
{
|
||||
Hide();
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: starts the hide anim for the control
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginHudMessage::Hide()
|
||||
{
|
||||
m_pAnimationController->StartAnimationSequence( "PluginMessageHide" );
|
||||
m_pExtraPanelIcon->SetVisible( false );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: shows a text message on the hud
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginHudMessage::ShowMessage( const wchar_t *text, int time, Color clr, bool bHasExtraPanel )
|
||||
{
|
||||
m_Message->SetVisible( true );
|
||||
m_Message->SetBounds( MESSAGE_X_INSET, 5, m_iTargetW - MESSAGE_X_INSET - 10, m_iTargetH - 10 );
|
||||
m_Message->SetText( text );
|
||||
m_Message->SetFgColor( clr );
|
||||
m_fgColor = clr;
|
||||
m_bHidingControl = !bHasExtraPanel;
|
||||
|
||||
if ( bHasExtraPanel )
|
||||
{
|
||||
m_pExtraPanelIcon->SetVisible( true );
|
||||
}
|
||||
|
||||
m_pAnimationController->StartAnimationSequence( "PluginMessageShow" );
|
||||
|
||||
SetVisible( true );
|
||||
InvalidateLayout();
|
||||
int textW, textH;
|
||||
m_Message->GetContentSize( textW, textH );
|
||||
|
||||
textW = MIN( textW + MESSAGE_X_INSET + 10, MAX_TEXT_LEN_PIXELS );
|
||||
SetSize( textW, m_iTargetH ); // the "small" animation event changes our size
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: constructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginUIManager::CPluginUIManager() : vgui::Panel( NULL, "PluginManager" )
|
||||
{
|
||||
m_iCurPriority = INT_MAX;
|
||||
m_iMessageDisplayUntil = 0;
|
||||
m_iHudDisplayUntil = 0;
|
||||
m_bShutdown = false;
|
||||
|
||||
m_pGameUIDialog = new CPluginGameUIDialog();
|
||||
Assert( m_pGameUIDialog );
|
||||
m_pGameUIDialog->SetParent( EngineVGui()->GetPanel( PANEL_GAMEUIDLL ) );
|
||||
|
||||
m_pHudMessage = new CPluginHudMessage(EngineVGui()->GetPanel( PANEL_CLIENTDLL ));
|
||||
Assert( m_pHudMessage );
|
||||
|
||||
vgui::ivgui()->AddTickSignal(GetVPanel());
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: destructor
|
||||
//-----------------------------------------------------------------------------
|
||||
CPluginUIManager::~CPluginUIManager()
|
||||
{
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: hides the two plugin dialogs at the appropriate times
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginUIManager::OnTick()
|
||||
{
|
||||
if ( m_bShutdown )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( m_iMessageDisplayUntil != 0 && !EngineVGui()->IsGameUIVisible() && m_iMessageDisplayUntil < Sys_FloatTime() ) // check the GameUI large message
|
||||
{
|
||||
m_pGameUIDialog->SetVisible( false );
|
||||
m_pHudMessage->Hide();
|
||||
m_iMessageDisplayUntil = 0;
|
||||
m_iCurPriority = INT_MAX;
|
||||
}
|
||||
|
||||
if ( m_iHudDisplayUntil != 0 && m_iHudDisplayUntil < Sys_FloatTime() ) // check the hud panel
|
||||
{
|
||||
m_pHudMessage->StartHiding();
|
||||
m_iHudDisplayUntil = 0;
|
||||
}
|
||||
|
||||
BaseClass::OnTick();
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: shuts down the plugin UI
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginUIManager::Shutdown()
|
||||
{
|
||||
vgui::ivgui()->RemoveTickSignal(GetVPanel());
|
||||
m_pHudMessage->Hide();
|
||||
m_pGameUIDialog->SetVisible( false );
|
||||
MarkForDeletion();
|
||||
m_bShutdown = true;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: shows a particular ui type and queues their lifetime
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginUIManager::Show( DIALOG_TYPE type, KeyValues *kv )
|
||||
{
|
||||
// Check for the special DIALOG_ASKCONNECT command.
|
||||
if ( type == DIALOG_ASKCONNECT )
|
||||
{
|
||||
// Do the askconnect dialog.
|
||||
float flDuration = kv->GetFloat( "time", 4.0f );
|
||||
const char *pIP = kv->GetString( "title", NULL );
|
||||
if ( !pIP )
|
||||
{
|
||||
DevMsg( "Ignoring DIALOG_ASKCONNECT message. No IP specified." );
|
||||
return;
|
||||
}
|
||||
|
||||
ShowAskConnectPanel( pIP, flDuration );
|
||||
return;
|
||||
}
|
||||
|
||||
int level = kv->GetInt( "level", INT_MAX );
|
||||
if ( level < m_iCurPriority )
|
||||
{
|
||||
m_iCurPriority = level;
|
||||
}
|
||||
else
|
||||
{
|
||||
DevMsg( "Ignoring message %s, %i < %i\n", kv->GetName(), level, m_iCurPriority );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( type != DIALOG_MSG )
|
||||
{
|
||||
m_iMessageDisplayUntil = Sys_FloatTime() + MIN(MAX( kv->GetInt( "time", 10 ),10),200);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_iMessageDisplayUntil = Sys_FloatTime() + 10;
|
||||
}
|
||||
|
||||
m_iHudDisplayUntil = Sys_FloatTime() + 10; // hud messages only get 10 seconds
|
||||
|
||||
m_pGameUIDialog->Show( type, kv );
|
||||
Color clr( 255, 255, 255, 255 );
|
||||
if ( !kv->IsEmpty( "color" ) )
|
||||
{
|
||||
clr = kv->GetColor( "color" );
|
||||
}
|
||||
|
||||
m_pHudMessage->ShowMessage( kv->GetWString( "title" ), 10, clr, type != DIALOG_MSG );
|
||||
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose: called when the gameui panel is closed
|
||||
//-----------------------------------------------------------------------------
|
||||
void CPluginUIManager::OnPanelClosed()
|
||||
{
|
||||
m_iCurPriority = INT_MAX;
|
||||
m_iHudDisplayUntil = 0;
|
||||
m_iMessageDisplayUntil = 0;
|
||||
m_pGameUIDialog->SetVisible( false );
|
||||
m_pHudMessage->Hide();
|
||||
}
|
||||
|
||||
void CPluginUIManager::GetHudMessagePosition( int &x, int &y, int &wide, int &tall )
|
||||
{
|
||||
if ( m_pHudMessage )
|
||||
{
|
||||
m_pHudMessage->GetBounds( x, y, wide, tall );
|
||||
}
|
||||
else
|
||||
{
|
||||
x = y = wide = tall = 0;
|
||||
}
|
||||
}
|
||||
|
||||
CPluginUIManager *g_PluginManager = NULL;
|
||||
|
||||
|
||||
//=============================================================================
|
||||
//
|
||||
// external interfaces
|
||||
//
|
||||
//=============================================================================
|
||||
ConVar cl_showpluginmessages ( "cl_showpluginmessages", "1", FCVAR_ARCHIVE, "Allow plugins to display messages to you" );
|
||||
|
||||
void PluginHelpers_Menu( const CSVCMsg_Menu& msg )
|
||||
{
|
||||
if ( !msg.menu_key_values().size() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !cl_showpluginmessages.GetBool() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !g_PluginManager )
|
||||
{
|
||||
g_PluginManager = new CPluginUIManager();
|
||||
}
|
||||
|
||||
KeyValues *keyvalues = new KeyValues( "menu" );
|
||||
CUtlBuffer buf( &msg.menu_key_values()[0], msg.menu_key_values().size() );
|
||||
|
||||
bool bRet = keyvalues->ReadAsBinary( buf );
|
||||
Assert( bRet );
|
||||
|
||||
if( bRet )
|
||||
{
|
||||
g_PluginManager->Show( ( DIALOG_TYPE )msg.dialog_type(), keyvalues );
|
||||
}
|
||||
|
||||
keyvalues->deleteThis();
|
||||
}
|
||||
|
Reference in New Issue
Block a user