summaryrefslogtreecommitdiff
path: root/game/client/tf2/tf_clientmode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/tf2/tf_clientmode.cpp')
-rw-r--r--game/client/tf2/tf_clientmode.cpp188
1 files changed, 188 insertions, 0 deletions
diff --git a/game/client/tf2/tf_clientmode.cpp b/game/client/tf2/tf_clientmode.cpp
new file mode 100644
index 0000000..5f125b2
--- /dev/null
+++ b/game/client/tf2/tf_clientmode.cpp
@@ -0,0 +1,188 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+#include "cbase.h"
+#include "hud.h"
+#include "hud_macros.h"
+#include "clientmode_tfnormal.h"
+#include "clientmode.h"
+#include "clientmode_commander.h"
+#include "ivmodemanager.h"
+#include "hud_timer.h"
+#include "hud_technologytreedoc.h"
+#include "CommanderOverlay.h"
+#include "c_tf2rootpanel.h"
+#include "c_info_act.h"
+
+// default FOV for TF2
+ConVar default_fov( "default_fov", "90", FCVAR_CHEAT );
+
+//-----------------------------------------------------------------------------
+// Purpose: Handles switching to/from commander mode
+//-----------------------------------------------------------------------------
+class CTFModeManager : public IVModeManager
+{
+public:
+ virtual void Init( void );
+ virtual void SwitchMode( bool commander, bool force );
+ virtual void LevelInit( const char *newmap );
+ virtual void LevelShutdown( void );
+
+ CTFModeManager( void );
+ virtual ~CTFModeManager( void );
+
+ void UserCmd_Commander( void );
+ void UserCmd_Normal( void );
+
+};
+
+static CTFModeManager g_ModeManager;
+IVModeManager *modemanager = ( IVModeManager * )&g_ModeManager;
+
+// The current client mode. Always ClientModeNormal in HL.
+IClientMode *g_pClientMode = NULL;
+
+DECLARE_COMMAND( g_ModeManager, Commander );
+DECLARE_COMMAND( g_ModeManager, Normal );
+
+HOOK_COMMAND( commander, Commander );
+HOOK_COMMAND( normal, Normal );
+
+void __MsgFunc_ActBegin(bf_read &msg);
+void __MsgFunc_ActEnd(bf_read &msg);
+
+#define MINIMAP_FILE "scripts/minimap_overlays.txt"
+#define SCREEN_FILE "scripts/vgui_screens.txt"
+
+//-----------------------------------------------------------------------------
+// Purpose: Intialize the mode manager
+//-----------------------------------------------------------------------------
+void CTFModeManager::Init( void )
+{
+ g_pClientMode = ClientModeCommander();
+ g_pClientMode = GetClientModeNormal();
+
+ // These define the panels that can be used by the engine
+ PanelMetaClassMgr()->LoadMetaClassDefinitionFile( MINIMAP_FILE );
+ PanelMetaClassMgr()->LoadMetaClassDefinitionFile( SCREEN_FILE );
+
+ // FIXME: Turn these into client systems
+ HudCommanderOverlayMgr()->GameInit();
+ MapData().Init();
+ GetTechnologyTreeDoc().Init();
+
+ HOOK_MESSAGE( ActBegin );
+ HOOK_MESSAGE( ActEnd );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output :
+//-----------------------------------------------------------------------------
+CTFModeManager::CTFModeManager( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Output :
+//-----------------------------------------------------------------------------
+CTFModeManager::~CTFModeManager( void )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CTFModeManager::UserCmd_Commander( void )
+{
+ engine->ServerCmd( "tactical 1\n" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CTFModeManager::UserCmd_Normal( void )
+{
+ engine->ServerCmd( "tactical 0\n" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Switch to / from commander mode ( won't change if current mode is already
+// correct
+// Input : commander -
+//-----------------------------------------------------------------------------
+void CTFModeManager::SwitchMode( bool commander, bool force )
+{
+ if ( commander && ( ( g_pClientMode != ClientModeCommander() ) || force ) )
+ {
+ g_pClientMode->Disable();
+ g_pClientMode = ClientModeCommander();
+ g_pClientMode->Enable();
+ }
+ else if ( !commander && ( ( g_pClientMode != GetClientModeNormal() ) || force ) )
+ {
+ g_pClientMode->Disable();
+ g_pClientMode = GetClientModeNormal();
+ g_pClientMode->Enable();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : *newmap -
+//-----------------------------------------------------------------------------
+void CTFModeManager::LevelInit( const char *newmap )
+{
+ GetTechnologyTreeDoc().LevelInit();
+ g_pTF2RootPanel->LevelInit();
+
+ CHudTimer *timer = GET_HUDELEMENT( CHudTimer );
+ if ( timer )
+ {
+ timer->Init();
+ }
+
+ // Tell all modes about the map change
+ ClientModeCommander()->LevelInit( newmap );
+ GetClientModeNormal()->LevelInit( newmap );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CTFModeManager::LevelShutdown( void )
+{
+ GetClientModeNormal()->LevelShutdown();
+ ClientModeCommander()->LevelShutdown();
+
+ g_pTF2RootPanel->LevelShutdown();
+ GetTechnologyTreeDoc().LevelShutdown();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: A new act has just begun
+//-----------------------------------------------------------------------------
+void __MsgFunc_ActBegin(bf_read &msg)
+{
+ int iActNumber = (char)msg.ReadByte();
+ float flStartTime = msg.ReadFloat();
+
+ StartAct( iActNumber, flStartTime );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: An act has just ended
+//-----------------------------------------------------------------------------
+void __MsgFunc_ActEnd(bf_read &msg)
+{
+ CHudTimer *timer = GET_HUDELEMENT( CHudTimer );
+ if ( timer )
+ {
+ timer->SetNoFixedTimer( 0.0f );
+ }
+}