1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Clients CBaseObject
//
// $NoKeywords: $
//=============================================================================//
#ifndef OBJECTCONTROLPANEL_H
#define OBJECTCONTROLPANEL_H
#ifdef _WIN32
#pragma once
#endif
#include "c_vguiscreen.h"
namespace vgui
{
class Panel;
class Label;
class Button;
}
class C_BaseObject;
class CRotationSlider;
class C_BaseTFPlayer;
//-----------------------------------------------------------------------------
// Base class for all vgui screens on objects:
//-----------------------------------------------------------------------------
class CObjectControlPanel : public CVGuiScreenPanel
{
DECLARE_CLASS( CObjectControlPanel, CVGuiScreenPanel );
public:
CObjectControlPanel( vgui::Panel *parent, const char *panelName );
virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData );
virtual void OnCommand( const char *command );
virtual void OnTick();
protected:
// Method to add controls to particular panels
vgui::Panel *GetActivePanel() { return m_pActivePanel; }
vgui::Panel *GetDeterioratingPanel() { return m_pDeterioratingPanel; }
vgui::Panel *GetDismantlingPanel() { return m_pDismantlingPanel; }
// Override these to deal with various controls in various modes
virtual void OnTickDeteriorating( C_BaseObject *pObj, C_BaseTFPlayer *pLocalPlayer );
virtual void OnTickActive( C_BaseObject *pObj, C_BaseTFPlayer *pLocalPlayer );
virtual void OnTickDismantling( C_BaseObject *pObj, C_BaseTFPlayer *pLocalPlayer );
C_BaseObject *GetOwningObject() const;
// This should update the current panel and return that panel.
virtual vgui::Panel* TickCurrentPanel();
// The dismantle button has its own logic about whether or not to hide itself.
// Use this to make it go away.
void ShowDismantleButton( bool bShow );
void ShowOwnerLabel( bool bShow );
void ShowHealthLabel( bool bShow );
// Send a message to the owner.
void SendToServerObject( const char *pMsg );
private:
// Operations performed through the controls
void AssumeControl();
void Dismantle();
void StartDismantling();
void StopDismantling();
bool IsDismantling() const;
vgui::EditablePanel *m_pActivePanel;
vgui::EditablePanel *m_pDeterioratingPanel;
vgui::EditablePanel *m_pDismantlingPanel;
vgui::Label *m_pHealthLabel;
vgui::Label *m_pOwnerLabel;
vgui::Button *m_pDismantleButton;
vgui::Button *m_pAssumeControlButton;
vgui::Label *m_pDismantleTimeLabel;
vgui::Panel *m_pCurrentPanel;
bool m_bDismantled;
float m_flDismantleTime;
};
// This is used for child panels. It forwards the messages to the parent panel.
class CCommandChainingPanel : public vgui::EditablePanel
{
typedef vgui::EditablePanel BaseClass;
public:
CCommandChainingPanel( vgui::Panel *parent, const char *panelName ) :
BaseClass( parent, panelName )
{
SetPaintBackgroundEnabled( false );
}
void OnCommand( const char *command )
{
BaseClass::OnCommand( command );
if (GetParent())
{
GetParent()->OnCommand(command);
}
}
};
//-----------------------------------------------------------------------------
// This is a panel for an object that has rotational controls
//-----------------------------------------------------------------------------
class CRotatingObjectControlPanel : public CObjectControlPanel
{
DECLARE_CLASS( CRotatingObjectControlPanel, CObjectControlPanel );
public:
CRotatingObjectControlPanel( vgui::Panel *parent, const char *panelName );
virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData );
protected:
virtual void OnTickActive( C_BaseObject *pObj, C_BaseTFPlayer *pLocalPlayer );
private:
CRotationSlider *m_pRotationSlider;
vgui::Label *m_pRotationLabel;
};
#endif // OBJECTCONTROLPANEL_H
|