From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/server/func_areaportalbase.cpp | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 mp/src/game/server/func_areaportalbase.cpp (limited to 'mp/src/game/server/func_areaportalbase.cpp') diff --git a/mp/src/game/server/func_areaportalbase.cpp b/mp/src/game/server/func_areaportalbase.cpp new file mode 100644 index 00000000..1fcc4784 --- /dev/null +++ b/mp/src/game/server/func_areaportalbase.cpp @@ -0,0 +1,71 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//===========================================================================// + +#include "cbase.h" +#include "func_areaportalbase.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +// A sphere around the player used for backface culling of areaportals. +#define VIEWER_PADDING 80 + + +CUtlLinkedList g_AreaPortals; + + + +//--------------------------------------------------------- +// Save/Restore +//--------------------------------------------------------- +BEGIN_DATADESC( CFuncAreaPortalBase ) + + DEFINE_FIELD( m_portalNumber, FIELD_INTEGER ), + DEFINE_KEYFIELD( m_iPortalVersion, FIELD_INTEGER, "PortalVersion" ) +// DEFINE_FIELD( m_AreaPortalsElement, FIELD_SHORT ), + +END_DATADESC() + + + + +CFuncAreaPortalBase::CFuncAreaPortalBase() +{ + m_portalNumber = -1; + m_AreaPortalsElement = g_AreaPortals.AddToTail( this ); + m_iPortalVersion = 0; +} + + +CFuncAreaPortalBase::~CFuncAreaPortalBase() +{ + g_AreaPortals.Remove( m_AreaPortalsElement ); +} + + +bool CFuncAreaPortalBase::UpdateVisibility( const Vector &vOrigin, float fovDistanceAdjustFactor, bool &bIsOpenOnClient ) +{ + // NOTE: We leave bIsOpenOnClient alone on purpose here. See the header for a description of why. + + if( m_portalNumber == -1 ) + return false; + + // See if the viewer is on the backside. + VPlane plane; + if( !engine->GetAreaPortalPlane( vOrigin, m_portalNumber, &plane ) ) + return true; // leave it open if there's an error here for some reason + + bool bOpen = false; + if( plane.DistTo( vOrigin ) + VIEWER_PADDING > 0 ) + bOpen = true; + + return bOpen; +} + + + + -- cgit v1.2.3