aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/hl2/Func_Monitor.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/server/hl2/Func_Monitor.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/server/hl2/Func_Monitor.cpp')
-rw-r--r--mp/src/game/server/hl2/Func_Monitor.cpp109
1 files changed, 109 insertions, 0 deletions
diff --git a/mp/src/game/server/hl2/Func_Monitor.cpp b/mp/src/game/server/hl2/Func_Monitor.cpp
new file mode 100644
index 00000000..fe664d0a
--- /dev/null
+++ b/mp/src/game/server/hl2/Func_Monitor.cpp
@@ -0,0 +1,109 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "point_camera.h"
+#include "modelentities.h"
+#include "info_camera_link.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+class CFuncMonitor : public CFuncBrush
+{
+ DECLARE_DATADESC();
+ DECLARE_CLASS( CFuncMonitor, CFuncBrush );
+ DECLARE_SERVERCLASS();
+
+public:
+ virtual void Activate();
+ virtual void UpdateOnRemove();
+
+private:
+ void InputSetCamera(inputdata_t &inputdata);
+ void SetCameraByName(const char *szName);
+ void ReleaseCameraLink();
+
+ EHANDLE m_hInfoCameraLink;
+};
+
+// automatically hooks in the system's callbacks
+BEGIN_DATADESC( CFuncMonitor )
+
+ DEFINE_FIELD( m_hInfoCameraLink, FIELD_EHANDLE ),
+
+ // Outputs
+ DEFINE_INPUTFUNC( FIELD_STRING, "SetCamera", InputSetCamera ),
+
+END_DATADESC()
+
+
+LINK_ENTITY_TO_CLASS( func_monitor, CFuncMonitor );
+
+
+IMPLEMENT_SERVERCLASS_ST( CFuncMonitor, DT_FuncMonitor )
+END_SEND_TABLE()
+
+
+//-----------------------------------------------------------------------------
+// Purpose: Called after all entities have spawned and after a load game.
+//-----------------------------------------------------------------------------
+void CFuncMonitor::Activate()
+{
+ BaseClass::Activate();
+ SetCameraByName(STRING(m_target));
+}
+
+void CFuncMonitor::UpdateOnRemove()
+{
+ ReleaseCameraLink();
+ BaseClass::UpdateOnRemove();
+}
+
+
+//-----------------------------------------------------------------------------
+// Frees the camera.
+//-----------------------------------------------------------------------------
+void CFuncMonitor::ReleaseCameraLink()
+{
+ if ( m_hInfoCameraLink )
+ {
+ UTIL_Remove( m_hInfoCameraLink );
+ m_hInfoCameraLink = NULL;
+
+ // Keep the target up-to-date for save/load
+ m_target = NULL_STRING;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Sets camera
+//-----------------------------------------------------------------------------
+void CFuncMonitor::SetCameraByName(const char *szName)
+{
+ ReleaseCameraLink();
+ CBaseEntity *pBaseEnt = gEntList.FindEntityByName( NULL, szName );
+ if( pBaseEnt )
+ {
+ CPointCamera *pCamera = dynamic_cast<CPointCamera *>( pBaseEnt );
+ if( pCamera )
+ {
+ // Keep the target up-to-date for save/load
+ m_target = MAKE_STRING( szName );
+ m_hInfoCameraLink = CreateInfoCameraLink( this, pCamera );
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CFuncMonitor::InputSetCamera(inputdata_t &inputdata)
+{
+ SetCameraByName( inputdata.value.String() );
+}