aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/commentary_modelviewer.cpp
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/commentary_modelviewer.cpp
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/commentary_modelviewer.cpp')
-rw-r--r--mp/src/game/client/commentary_modelviewer.cpp277
1 files changed, 277 insertions, 0 deletions
diff --git a/mp/src/game/client/commentary_modelviewer.cpp b/mp/src/game/client/commentary_modelviewer.cpp
new file mode 100644
index 00000000..8c16f30a
--- /dev/null
+++ b/mp/src/game/client/commentary_modelviewer.cpp
@@ -0,0 +1,277 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+
+#include "cbase.h"
+#include "vgui/IInput.h"
+#include <vgui/IVGui.h>
+#include "commentary_modelviewer.h"
+#include "iclientmode.h"
+#include "baseviewport.h"
+
+DECLARE_BUILD_FACTORY( CCommentaryModelPanel );
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CCommentaryModelPanel::CCommentaryModelPanel( vgui::Panel *parent, const char *name ) : CModelPanel( parent, name )
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CCommentaryModelViewer::CCommentaryModelViewer(IViewPort *pViewPort) : Frame(NULL, PANEL_COMMENTARY_MODELVIEWER )
+{
+ m_pViewPort = pViewPort;
+ m_pModelPanel = NULL;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CCommentaryModelViewer::~CCommentaryModelViewer()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::ApplySchemeSettings( vgui::IScheme *pScheme )
+{
+ BaseClass::ApplySchemeSettings( pScheme );
+
+ LoadControlSettings( "Resource/UI/CommentaryModelViewer.res" );
+
+ m_pModelPanel = dynamic_cast<CCommentaryModelPanel*>( FindChildByName( "modelpanel" ) );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::PerformLayout( void )
+{
+ int w,h;
+ GetParent()->GetSize( w, h );
+ SetBounds(0,0,w,h);
+
+ if ( m_pModelPanel )
+ {
+ m_pModelPanel->SetBounds(0,0,w,h);
+ }
+
+ BaseClass::PerformLayout();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::SetModel( const char *pszName, const char *pszAttached )
+{
+ if ( !m_pModelPanel )
+ return;
+
+ m_pModelPanel->SwapModel( pszName, pszAttached );
+
+ m_flYawSpeed = 0;
+ m_flZoomSpeed = 0;
+ m_bTranslating = false;
+
+ m_vecResetPos = m_pModelPanel->m_pModelInfo->m_vecOriginOffset;
+ m_vecResetAngles = m_pModelPanel->m_pModelInfo->m_vecAbsAngles;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::ShowPanel(bool bShow)
+{
+ if ( BaseClass::IsVisible() == bShow )
+ return;
+
+ if ( bShow )
+ {
+ Activate();
+ SetMouseInputEnabled( true );
+ }
+ else
+ {
+ SetVisible( false );
+ SetMouseInputEnabled( false );
+ }
+
+ m_pViewPort->ShowBackGround( bShow );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::OnCommand( const char *command )
+{
+ if ( Q_stricmp( command, "vguicancel" ) )
+ {
+ engine->ClientCmd( const_cast<char *>( command ) );
+ }
+
+ Close();
+ m_pViewPort->ShowBackGround( false );
+
+ BaseClass::OnCommand( command );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::OnKeyCodePressed( vgui::KeyCode code )
+{
+ if ( code == KEY_ENTER )
+ {
+ Close();
+ m_pViewPort->ShowBackGround( false );
+ }
+ else if ( code == KEY_SPACE )
+ {
+ m_bTranslating = !m_bTranslating;
+ }
+ else if ( code == KEY_R )
+ {
+ m_pModelPanel->m_pModelInfo->m_vecOriginOffset = m_vecResetPos;
+ m_pModelPanel->m_pModelInfo->m_vecAbsAngles = m_vecResetAngles;
+ m_flYawSpeed = 0;
+ m_flZoomSpeed = 0;
+
+ m_pModelPanel->ZoomToFrameDistance();
+ }
+ else
+ {
+ BaseClass::OnKeyCodePressed( code );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::OnThink( void )
+{
+ HandleMovementInput();
+
+ BaseClass::OnThink();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CCommentaryModelViewer::HandleMovementInput( void )
+{
+ bool bLeftDown = input()->IsKeyDown(KEY_LEFT);
+ bool bRightDown = input()->IsKeyDown(KEY_RIGHT);
+ bool bForwardDown = input()->IsKeyDown(KEY_UP);
+ bool bBackDown = input()->IsKeyDown(KEY_DOWN);
+
+ float flAccel = 0.05;
+
+ // Rotation around Z
+ if ( bLeftDown )
+ {
+ if ( m_flYawSpeed > 0 )
+ {
+ m_flYawSpeed = 0;
+ }
+ m_flYawSpeed = MAX(m_flYawSpeed-flAccel, -3.0);
+ }
+ else if ( bRightDown )
+ {
+ if ( m_flYawSpeed < 0 )
+ {
+ m_flYawSpeed = 0;
+ }
+ m_flYawSpeed = MIN(m_flYawSpeed+flAccel, 3.0);
+ }
+ if ( m_flYawSpeed != 0 )
+ {
+ if ( m_bTranslating )
+ {
+ m_pModelPanel->m_pModelInfo->m_vecOriginOffset.y = clamp( m_pModelPanel->m_pModelInfo->m_vecOriginOffset.y + m_flYawSpeed, -100.f, 100.f );
+ }
+ else
+ {
+ m_pModelPanel->m_pModelInfo->m_vecAbsAngles.y = anglemod( m_pModelPanel->m_pModelInfo->m_vecAbsAngles.y + m_flYawSpeed );
+ }
+
+ if ( !bLeftDown && !bRightDown )
+ {
+ m_flYawSpeed = ( m_flYawSpeed > 0 ) ? MAX(0,m_flYawSpeed-0.1) : MIN(0,m_flYawSpeed+0.1);
+ }
+ }
+
+ // Zooming
+ if ( bForwardDown )
+ {
+ if ( m_flZoomSpeed > 0 )
+ {
+ m_flZoomSpeed = 0;
+ }
+ m_flZoomSpeed = MAX(m_flZoomSpeed-flAccel, -3.0);
+ }
+ else if ( bBackDown )
+ {
+ if ( m_flZoomSpeed < 0 )
+ {
+ m_flZoomSpeed = 0;
+ }
+ m_flZoomSpeed = MIN(m_flZoomSpeed+flAccel, 3.0);
+ }
+ if ( m_flZoomSpeed != 0 )
+ {
+ if ( m_bTranslating )
+ {
+ m_pModelPanel->m_pModelInfo->m_vecOriginOffset.z = clamp( m_pModelPanel->m_pModelInfo->m_vecOriginOffset.z + m_flZoomSpeed, -100.f, 300.f );
+ }
+ else
+ {
+ float flZoomMin = m_pModelPanel->m_flFrameDistance * 0.75;
+ float flZoomMax = m_pModelPanel->m_flFrameDistance * 1.5;
+ m_pModelPanel->m_pModelInfo->m_vecOriginOffset.x = clamp( m_pModelPanel->m_pModelInfo->m_vecOriginOffset.x + m_flZoomSpeed, flZoomMin, flZoomMax );
+ }
+
+ if ( !bForwardDown && !bBackDown )
+ {
+ m_flZoomSpeed = ( m_flZoomSpeed > 0 ) ? MAX(0,m_flZoomSpeed-0.1) : MIN(0,m_flZoomSpeed+0.1);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CommentaryShowModelViewer( const CCommand &args )
+{
+ if ( args.ArgC() < 2 )
+ {
+ ConMsg( "Usage: commentary_showmodelviewer <model name> <optional attached model name>\n" );
+ return;
+ }
+
+ CBaseViewport *pViewport = dynamic_cast<CBaseViewport *>( g_pClientMode->GetViewport() );
+ if ( pViewport )
+ {
+ IViewPortPanel *pCommentaryPanel = pViewport->FindPanelByName( PANEL_COMMENTARY_MODELVIEWER );
+ if ( !pCommentaryPanel )
+ {
+ pCommentaryPanel = pViewport->CreatePanelByName( PANEL_COMMENTARY_MODELVIEWER );
+ pViewport->AddNewPanel( pCommentaryPanel, "PANEL_COMMENTARY_MODELVIEWER" );
+ }
+
+ if ( pCommentaryPanel )
+ {
+ //((CCommentaryModelViewer*)pCommentaryPanel)->InvalidateLayout( false, true );
+ ((CCommentaryModelViewer*)pCommentaryPanel)->SetModel( args[1], args[2] );
+ pViewport->ShowPanel( pCommentaryPanel, true );
+ }
+ }
+}
+
+ConCommand commentary_showmodelviewer( "commentary_showmodelviewer", CommentaryShowModelViewer, "Display the commentary model viewer. Usage: commentary_showmodelviewer <model name> <optional attached model name>", FCVAR_NONE );