diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/server/func_areaportalwindow.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/server/func_areaportalwindow.cpp')
| -rw-r--r-- | mp/src/game/server/func_areaportalwindow.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/mp/src/game/server/func_areaportalwindow.cpp b/mp/src/game/server/func_areaportalwindow.cpp new file mode 100644 index 00000000..db1d27e5 --- /dev/null +++ b/mp/src/game/server/func_areaportalwindow.cpp @@ -0,0 +1,128 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "func_areaportalwindow.h"
+#include "entitylist.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+// The server will still send entities through a window even after it opaque
+// to allow for net lag.
+#define FADE_DIST_BUFFER 10
+
+
+LINK_ENTITY_TO_CLASS( func_areaportalwindow, CFuncAreaPortalWindow );
+
+
+IMPLEMENT_SERVERCLASS_ST( CFuncAreaPortalWindow, DT_FuncAreaPortalWindow )
+ SendPropFloat( SENDINFO(m_flFadeDist), 0, SPROP_NOSCALE ),
+ SendPropFloat( SENDINFO(m_flFadeStartDist), 0, SPROP_NOSCALE ),
+ SendPropFloat( SENDINFO(m_flTranslucencyLimit), 0, SPROP_NOSCALE ),
+
+ SendPropModelIndex(SENDINFO(m_iBackgroundModelIndex) ),
+END_SEND_TABLE()
+
+
+BEGIN_DATADESC( CFuncAreaPortalWindow )
+
+ DEFINE_KEYFIELD( m_portalNumber, FIELD_INTEGER, "portalnumber" ),
+ DEFINE_KEYFIELD( m_flFadeStartDist, FIELD_FLOAT, "FadeStartDist" ),
+ DEFINE_KEYFIELD( m_flFadeDist, FIELD_FLOAT, "FadeDist" ),
+ DEFINE_KEYFIELD( m_flTranslucencyLimit, FIELD_FLOAT, "TranslucencyLimit" ),
+ DEFINE_KEYFIELD( m_iBackgroundBModelName,FIELD_STRING, "BackgroundBModel" ),
+// DEFINE_KEYFIELD( m_iBackgroundModelIndex,FIELD_INTEGER ),
+
+ DEFINE_INPUTFUNC( FIELD_FLOAT, "SetFadeStartDistance", InputSetFadeStartDistance ),
+ DEFINE_INPUTFUNC( FIELD_FLOAT, "SetFadeEndDistance", InputSetFadeEndDistance ),
+
+END_DATADESC()
+
+
+
+
+CFuncAreaPortalWindow::CFuncAreaPortalWindow()
+{
+ m_iBackgroundModelIndex = -1;
+}
+
+
+CFuncAreaPortalWindow::~CFuncAreaPortalWindow()
+{
+}
+
+
+void CFuncAreaPortalWindow::Spawn()
+{
+ Precache();
+
+ engine->SetAreaPortalState( m_portalNumber, 1 );
+}
+
+
+void CFuncAreaPortalWindow::Activate()
+{
+ BaseClass::Activate();
+
+ // Find our background model.
+ CBaseEntity *pBackground = gEntList.FindEntityByName( NULL, m_iBackgroundBModelName );
+ if( pBackground )
+ {
+ m_iBackgroundModelIndex = modelinfo->GetModelIndex( STRING( pBackground->GetModelName() ) );
+ pBackground->AddEffects( EF_NODRAW ); // we will draw for it.
+ }
+
+ // Find our target and steal its bmodel.
+ CBaseEntity *pTarget = gEntList.FindEntityByName( NULL, m_target );
+ if( pTarget )
+ {
+ SetModel( STRING(pTarget->GetModelName()) );
+ SetAbsOrigin( pTarget->GetAbsOrigin() );
+ pTarget->AddEffects( EF_NODRAW ); // we will draw for it.
+ }
+}
+
+
+bool CFuncAreaPortalWindow::IsWindowOpen( const Vector &vOrigin, float fovDistanceAdjustFactor )
+{
+ float flDist = CollisionProp()->CalcDistanceFromPoint( vOrigin );
+ flDist *= fovDistanceAdjustFactor;
+ return ( flDist <= (m_flFadeDist + FADE_DIST_BUFFER) );
+}
+
+
+bool CFuncAreaPortalWindow::UpdateVisibility( const Vector &vOrigin, float fovDistanceAdjustFactor, bool &bIsOpenOnClient )
+{
+ if ( IsWindowOpen( vOrigin, fovDistanceAdjustFactor ) )
+ {
+ return BaseClass::UpdateVisibility( vOrigin, fovDistanceAdjustFactor, bIsOpenOnClient );
+ }
+ else
+ {
+ bIsOpenOnClient = false;
+ return false;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Changes the fade start distance
+// Input: float distance in inches
+//-----------------------------------------------------------------------------
+void CFuncAreaPortalWindow::InputSetFadeStartDistance( inputdata_t &inputdata )
+{
+ m_flFadeStartDist = inputdata.value.Float();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Changes the fade end distance
+// Input: float distance in inches
+//-----------------------------------------------------------------------------
+void CFuncAreaPortalWindow::InputSetFadeEndDistance( inputdata_t &inputdata )
+{
+ m_flFadeDist = inputdata.value.Float();
+}
\ No newline at end of file |