summaryrefslogtreecommitdiff
path: root/gameui/CreateMultiplayerGameBotPage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gameui/CreateMultiplayerGameBotPage.cpp')
-rw-r--r--gameui/CreateMultiplayerGameBotPage.cpp228
1 files changed, 228 insertions, 0 deletions
diff --git a/gameui/CreateMultiplayerGameBotPage.cpp b/gameui/CreateMultiplayerGameBotPage.cpp
new file mode 100644
index 0000000..0f27128
--- /dev/null
+++ b/gameui/CreateMultiplayerGameBotPage.cpp
@@ -0,0 +1,228 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+
+#include "CreateMultiplayerGameBotPage.h"
+
+using namespace vgui;
+
+#include <KeyValues.h>
+#include <vgui_controls/ComboBox.h>
+#include <vgui_controls/CheckButton.h>
+#include <vgui_controls/Label.h>
+#include <vgui_controls/TextEntry.h>
+
+#include "filesystem.h"
+#include "PanelListPanel.h"
+#include "scriptobject.h"
+#include <tier0/vcrmode.h>
+#include "tier1/convar.h"
+#include "EngineInterface.h"
+#include "CvarToggleCheckButton.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+
+// for join team combo box
+enum BotGUITeamType
+{
+ BOT_GUI_TEAM_RANDOM = 0,
+ BOT_GUI_TEAM_CT = 1,
+ BOT_GUI_TEAM_T = 2
+};
+
+// these must correlate with above enum
+static const char *joinTeamArg[] = { "any", "ct", "t", NULL };
+
+
+// for bot chatter combo box
+enum BotGUIChatterType
+{
+ BOT_GUI_CHATTER_NORMAL = 0,
+ BOT_GUI_CHATTER_MINIMAL = 1,
+ BOT_GUI_CHATTER_RADIO = 2,
+ BOT_GUI_CHATTER_OFF = 3
+};
+
+// these must correlate with above enum
+static const char *chatterArg[] = { "normal", "minimal", "radio", "off", NULL };
+
+
+extern void UTIL_StripInvalidCharacters( char *pszInput );
+
+
+//-----------------------------------------------------------------------------
+void CCreateMultiplayerGameBotPage::SetJoinTeamCombo( const char *team )
+{
+ if (team)
+ {
+ for( int i=0; joinTeamArg[i]; ++i )
+ if (!stricmp( team, joinTeamArg[i] ))
+ {
+ m_joinTeamCombo->ActivateItemByRow( i );
+ return;
+ }
+ }
+ else
+ {
+ m_joinTeamCombo->ActivateItemByRow( BOT_GUI_TEAM_RANDOM );
+ }
+}
+
+//-----------------------------------------------------------------------------
+void CCreateMultiplayerGameBotPage::SetChatterCombo( const char *chatter )
+{
+ if (chatter)
+ {
+ for( int i=0; chatterArg[i]; ++i )
+ if (!stricmp( chatter, chatterArg[i] ))
+ {
+ m_chatterCombo->ActivateItemByRow( i );
+ return;
+ }
+ }
+ else
+ {
+ m_joinTeamCombo->ActivateItemByRow( BOT_GUI_CHATTER_NORMAL );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Constructor
+//-----------------------------------------------------------------------------
+CCreateMultiplayerGameBotPage::CCreateMultiplayerGameBotPage( vgui::Panel *parent, const char *name, KeyValues *botKeys ) : PropertyPage( parent, name )
+{
+ m_pSavedData = botKeys;
+
+ m_allowRogues = new CCvarToggleCheckButton( this, "BotAllowRogueCheck", "", "bot_allow_rogues" );
+ m_allowPistols = new CCvarToggleCheckButton( this, "BotAllowPistolsCheck", "", "bot_allow_pistols" );
+ m_allowShotguns = new CCvarToggleCheckButton( this, "BotAllowShotgunsCheck", "", "bot_allow_shotguns" );
+ m_allowSubmachineGuns = new CCvarToggleCheckButton( this, "BotAllowSubmachineGunsCheck", "", "bot_allow_sub_machine_guns" );
+ m_allowRifles = new CCvarToggleCheckButton( this, "BotAllowRiflesCheck", "", "bot_allow_rifles" );
+ m_allowMachineGuns = new CCvarToggleCheckButton( this, "BotAllowMachineGunsCheck", "", "bot_allow_machine_guns" );
+ m_allowGrenades = new CCvarToggleCheckButton( this, "BotAllowGrenadesCheck", "", "bot_allow_grenades" );
+ m_allowSnipers = new CCvarToggleCheckButton( this, "BotAllowSnipersCheck", "", "bot_allow_snipers" );
+#ifdef CS_SHIELD_ENABLED
+ m_allowShields = new CCvarToggleCheckButton( this, "BotAllowShieldCheck", "", "bot_allow_shield" );
+#endif // CS_SHIELD_ENABLED
+
+ m_joinAfterPlayer = new CCvarToggleCheckButton( this, "BotJoinAfterPlayerCheck", "", "bot_join_after_player" );
+
+ m_deferToHuman = new CCvarToggleCheckButton( this, "BotDeferToHumanCheck", "", "bot_defer_to_human" );
+
+ // set up team join combo box
+ // NOTE: If order of AddItem is changed, update the associated enum
+ m_joinTeamCombo = new ComboBox( this, "BotJoinTeamCombo", 3, false );
+ m_joinTeamCombo->AddItem( "#Cstrike_Random", NULL );
+ m_joinTeamCombo->AddItem( "#Cstrike_Team_CT", NULL );
+ m_joinTeamCombo->AddItem( "#Cstrike_Team_T", NULL );
+
+ // set up chatter combo box
+ // NOTE: If order of AddItem is changed, update the associated enum
+ m_chatterCombo = new ComboBox( this, "BotChatterCombo", 4, false );
+ m_chatterCombo->AddItem( "#Cstrike_Bot_Chatter_Normal", NULL );
+ m_chatterCombo->AddItem( "#Cstrike_Bot_Chatter_Minimal", NULL );
+ m_chatterCombo->AddItem( "#Cstrike_Bot_Chatter_Radio", NULL );
+ m_chatterCombo->AddItem( "#Cstrike_Bot_Chatter_Off", NULL );
+
+ // create text entry fields for quota and prefix
+ m_prefixEntry = new TextEntry( this, "BotPrefixEntry" );
+
+ // set positions and sizes from resources file
+ LoadControlSettings( "Resource/CreateMultiplayerGameBotPage.res" );
+
+ // get initial values from bot keys
+ m_joinAfterPlayer->SetSelected( botKeys->GetInt( "bot_join_after_player", 1 ) );
+ m_allowRogues->SetSelected( botKeys->GetInt( "bot_allow_rogues", 1 ) );
+ m_allowPistols->SetSelected( botKeys->GetInt( "bot_allow_pistols", 1 ) );
+ m_allowShotguns->SetSelected( botKeys->GetInt( "bot_allow_shotguns", 1 ) );
+ m_allowSubmachineGuns->SetSelected( botKeys->GetInt( "bot_allow_sub_machine_guns", 1 ) );
+ m_allowMachineGuns->SetSelected( botKeys->GetInt( "bot_allow_machine_guns", 1 ) );
+ m_allowRifles->SetSelected( botKeys->GetInt( "bot_allow_rifles", 1 ) );
+ m_allowSnipers->SetSelected( botKeys->GetInt( "bot_allow_snipers", 1 ) );
+ m_allowGrenades->SetSelected( botKeys->GetInt( "bot_allow_grenades", 1 ) );
+#ifdef CS_SHIELD_ENABLED
+ m_allowShields->SetSelected( botKeys->GetInt( "bot_allow_shield", 1 ) );
+#endif // CS_SHIELD_ENABLED
+ m_deferToHuman->SetSelected( botKeys->GetInt( "bot_defer_to_human", 1 ) );
+
+ SetJoinTeamCombo( botKeys->GetString( "bot_join_team", "any" ) );
+ SetChatterCombo( botKeys->GetString( "bot_chatter", "normal" ) );
+
+ // set bot_prefix
+ const char *prefix = botKeys->GetString( "bot_prefix" );
+ if (prefix)
+ SetControlString( "BotPrefixEntry", prefix );
+}
+
+//-----------------------------------------------------------------------------
+// Destructor
+//-----------------------------------------------------------------------------
+CCreateMultiplayerGameBotPage::~CCreateMultiplayerGameBotPage()
+{
+ // vgui handles deletion of children automatically through the hierarchy
+}
+
+//-----------------------------------------------------------------------------
+// Reset values
+//-----------------------------------------------------------------------------
+void CCreateMultiplayerGameBotPage::OnResetChanges()
+{
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void UpdateValue( KeyValues *data, const char *cvarName, int value )
+{
+ data->SetInt( cvarName, value );
+
+ ConVarRef var( cvarName );
+ var.SetValue( value );
+}
+
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+void UpdateValue( KeyValues *data, const char *cvarName, const char *value )
+{
+ data->SetString( cvarName, value );
+
+ ConVarRef var( cvarName );
+ var.SetValue( value );
+}
+
+//-----------------------------------------------------------------------------
+// Called to get data from the page
+//-----------------------------------------------------------------------------
+void CCreateMultiplayerGameBotPage::OnApplyChanges()
+{
+ UpdateValue( m_pSavedData, "bot_join_after_player", m_joinAfterPlayer->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_rogues", m_allowRogues->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_pistols", m_allowPistols->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_shotguns", m_allowShotguns->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_sub_machine_guns", m_allowSubmachineGuns->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_machine_guns", m_allowMachineGuns->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_rifles", m_allowRifles->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_snipers", m_allowSnipers->IsSelected() );
+ UpdateValue( m_pSavedData, "bot_allow_grenades", m_allowGrenades->IsSelected() );
+#ifdef CS_SHIELD_ENABLED
+ UpdateValue( m_pSavedData, "bot_allow_shield", m_allowShields->IsSelected() );
+#endif // CS_SHIELD_ENABLED
+ UpdateValue( m_pSavedData, "bot_defer_to_human", m_deferToHuman->IsSelected() );
+
+ // set bot_join_team
+ UpdateValue( m_pSavedData, "bot_join_team", joinTeamArg[ m_joinTeamCombo->GetActiveItem() ] );
+
+ // set bot_chatter
+ UpdateValue( m_pSavedData, "bot_chatter", chatterArg[ m_chatterCombo->GetActiveItem() ] );
+
+ // set bot_prefix
+ #define BUF_LENGTH 256
+ char entryBuffer[ BUF_LENGTH ];
+ m_prefixEntry->GetText( entryBuffer, BUF_LENGTH );
+ UpdateValue( m_pSavedData, "bot_prefix", entryBuffer );
+}
+