mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
#include "cbase.h"
|
||||
#include "ObjectControlPanel.h"
|
||||
#include <vgui_controls/Controls.h>
|
||||
#include <vgui_controls/Label.h>
|
||||
#include "vgui_bitmapbutton.h"
|
||||
#include <vgui/ISurface.h>
|
||||
#include <vgui/IVGui.h>
|
||||
#include "c_tf_player.h"
|
||||
#include "clientmode_tf.h"
|
||||
#include <vgui/IScheme.h>
|
||||
#include <vgui_controls/Slider.h>
|
||||
#include "vgui_rotation_slider.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
|
||||
#define DISMANTLE_WAIT_TIME 5.0
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Standard VGUI panel for objects
|
||||
//-----------------------------------------------------------------------------
|
||||
DECLARE_VGUI_SCREEN_FACTORY( CObjectControlPanel, "object_control_panel" );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Constructor:
|
||||
//-----------------------------------------------------------------------------
|
||||
CObjectControlPanel::CObjectControlPanel( vgui::Panel *parent, const char *panelName )
|
||||
: BaseClass( parent, panelName, NULL )
|
||||
{
|
||||
// Make some high-level panels to group stuff we want to activate/deactivate
|
||||
m_pActivePanel = new CCommandChainingPanel( this, "ActivePanel" );
|
||||
|
||||
SetCursor( vgui::dc_none ); // don't draw a VGUI cursor for this panel, and for its children
|
||||
|
||||
// Make sure these are behind everything
|
||||
m_pActivePanel->SetZPos( -1 );
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Initialization
|
||||
//-----------------------------------------------------------------------------
|
||||
bool CObjectControlPanel::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData )
|
||||
{
|
||||
// Make sure we get ticked...
|
||||
vgui::ivgui()->AddTickSignal( GetVPanel() );
|
||||
|
||||
if (!BaseClass::Init(pKeyValues, pInitData))
|
||||
return false;
|
||||
|
||||
SetCursor( vgui::dc_none ); // don't draw a VGUI cursor for this panel, and for its children
|
||||
|
||||
// Make the bounds of the sub-panels match
|
||||
int x, y, w, h;
|
||||
GetBounds( x, y, w, h );
|
||||
m_pActivePanel->SetBounds( x, y, w, h );
|
||||
|
||||
// Make em all invisible
|
||||
m_pActivePanel->SetVisible( false );
|
||||
m_pCurrentPanel = m_pActivePanel;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Returns the object it's attached to
|
||||
//-----------------------------------------------------------------------------
|
||||
C_BaseObject *CObjectControlPanel::GetOwningObject() const
|
||||
{
|
||||
C_BaseEntity *pScreenEnt = GetEntity();
|
||||
if (!pScreenEnt)
|
||||
return NULL;
|
||||
|
||||
C_BaseEntity *pObj = pScreenEnt->GetOwnerEntity();
|
||||
if (!pObj)
|
||||
return NULL;
|
||||
|
||||
Assert( dynamic_cast<C_BaseObject*>(pObj) );
|
||||
return static_cast<C_BaseObject*>(pObj);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Ticks the panel when its in its various states
|
||||
//-----------------------------------------------------------------------------
|
||||
void CObjectControlPanel::OnTickActive( C_BaseObject *pObj, C_TFPlayer *pLocalPlayer )
|
||||
{
|
||||
//ShowDismantleButton( !(pObj->GetFlags() & OF_CANNOT_BE_DISMANTLED) && pObj->GetOwner() == pLocalPlayer );
|
||||
}
|
||||
|
||||
vgui::Panel* CObjectControlPanel::TickCurrentPanel()
|
||||
{
|
||||
C_TFPlayer *pLocalPlayer = C_TFPlayer::GetLocalTFPlayer();
|
||||
C_BaseObject *pObj = GetOwningObject();
|
||||
|
||||
m_pCurrentPanel = GetActivePanel();
|
||||
OnTickActive(pObj, pLocalPlayer);
|
||||
|
||||
return m_pCurrentPanel;
|
||||
}
|
||||
|
||||
void CObjectControlPanel::SendToServerObject( const char *pMsg )
|
||||
{
|
||||
C_BaseObject *pObj = GetOwningObject();
|
||||
if (pObj)
|
||||
{
|
||||
pObj->SendClientCommand( pMsg );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Frame-based update
|
||||
//-----------------------------------------------------------------------------
|
||||
void CObjectControlPanel::OnTick()
|
||||
{
|
||||
BaseClass::OnTick();
|
||||
|
||||
C_BaseObject *pObj = GetOwningObject();
|
||||
if (!pObj)
|
||||
return;
|
||||
|
||||
if ( IsVisible() )
|
||||
{
|
||||
// Update the current subpanel
|
||||
m_pCurrentPanel->SetVisible( false );
|
||||
|
||||
m_pCurrentPanel = TickCurrentPanel();
|
||||
|
||||
m_pCurrentPanel->SetVisible( true );
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Button click handlers
|
||||
//-----------------------------------------------------------------------------
|
||||
void CObjectControlPanel::OnCommand( const char *command )
|
||||
{
|
||||
BaseClass::OnCommand(command);
|
||||
}
|
||||
|
||||
DECLARE_VGUI_SCREEN_FACTORY( CRotatingObjectControlPanel, "rotating_object_control_panel" );
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// This is a panel for an object that has rotational controls
|
||||
//-----------------------------------------------------------------------------
|
||||
CRotatingObjectControlPanel::CRotatingObjectControlPanel( vgui::Panel *parent, const char *panelName )
|
||||
: BaseClass( parent, panelName )
|
||||
{
|
||||
}
|
||||
|
||||
bool CRotatingObjectControlPanel::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData )
|
||||
{
|
||||
// Grab ahold of certain well-known controls
|
||||
m_pRotationSlider = new CRotationSlider( GetActivePanel(), "RotationSlider" );
|
||||
m_pRotationLabel = new vgui::Label( GetActivePanel(), "RotationLabel", "Rotation Control" );
|
||||
|
||||
if (!BaseClass::Init(pKeyValues, pInitData))
|
||||
return false;
|
||||
|
||||
m_pRotationSlider->SetControlledObject( GetOwningObject() );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CRotatingObjectControlPanel::OnTickActive( C_BaseObject *pObj, C_TFPlayer *pLocalPlayer )
|
||||
{
|
||||
BaseClass::OnTickActive( pObj, pLocalPlayer );
|
||||
bool bEnable = (pObj->GetOwner() == pLocalPlayer);
|
||||
m_pRotationSlider->SetVisible( bEnable );
|
||||
m_pRotationLabel->SetVisible( bEnable );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user