aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/c_physmagnet.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/client/c_physmagnet.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/client/c_physmagnet.cpp')
-rw-r--r--mp/src/game/client/c_physmagnet.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/mp/src/game/client/c_physmagnet.cpp b/mp/src/game/client/c_physmagnet.cpp
new file mode 100644
index 00000000..b32071f6
--- /dev/null
+++ b/mp/src/game/client/c_physmagnet.cpp
@@ -0,0 +1,134 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+#include "cbase.h"
+#include "c_baseentity.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class C_PhysMagnet : public C_BaseAnimating
+{
+ DECLARE_CLASS( C_PhysMagnet, C_BaseAnimating );
+public:
+ DECLARE_CLIENTCLASS();
+
+ C_PhysMagnet();
+ virtual ~C_PhysMagnet();
+
+ void PostDataUpdate( DataUpdateType_t updateType );
+ bool GetShadowCastDirection( Vector *pDirection, ShadowType_t shadowType ) const;
+
+public:
+ // Data received from the server
+ CUtlVector< int > m_aAttachedObjectsFromServer;
+
+ // Private list of entities on the magnet
+ CUtlVector< EHANDLE > m_aAttachedObjects;
+};
+
+//-----------------------------------------------------------------------------
+// Purpose: RecvProxy that converts the Magnet's attached object entindexes to handles
+//-----------------------------------------------------------------------------
+void RecvProxy_MagnetAttachedObjectList( const CRecvProxyData *pData, void *pStruct, void *pOut )
+{
+ C_PhysMagnet *pMagnet = (C_PhysMagnet*)pOut;
+ pMagnet->m_aAttachedObjectsFromServer[pData->m_iElement] = pData->m_Value.m_Int;
+}
+
+
+void RecvProxyArrayLength_MagnetAttachedArray( void *pStruct, int objectID, int currentArrayLength )
+{
+ C_PhysMagnet *pMagnet = (C_PhysMagnet*)pStruct;
+
+ if ( pMagnet->m_aAttachedObjectsFromServer.Size() != currentArrayLength )
+ pMagnet->m_aAttachedObjectsFromServer.SetSize( currentArrayLength );
+}
+
+IMPLEMENT_CLIENTCLASS_DT(C_PhysMagnet, DT_PhysMagnet, CPhysMagnet)
+
+ // ROBIN: Disabled because we don't need it anymore
+ /*
+ RecvPropArray2(
+ RecvProxyArrayLength_MagnetAttachedArray,
+ RecvPropInt( "magnetattached_array_element", 0, SIZEOF_IGNORE, 0, RecvProxy_MagnetAttachedObjectList ),
+ 128,
+ 0,
+ "magnetattached_array"
+ )
+ */
+
+END_RECV_TABLE()
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+C_PhysMagnet::C_PhysMagnet()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+C_PhysMagnet::~C_PhysMagnet()
+{
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void C_PhysMagnet::PostDataUpdate( DataUpdateType_t updateType )
+{
+ BaseClass::PostDataUpdate( updateType );
+
+ /*
+ // First, detect any entities removed from the magnet and restore their shadows
+ int iCount = m_aAttachedObjects.Count();
+ int iServerCount = m_aAttachedObjectsFromServer.Count();
+ for ( int i = 0; i < iCount; i++ )
+ {
+ int iEntIndex = m_aAttachedObjects[i]->entindex();
+ for ( int j = 0; j < iServerCount; j++ )
+ {
+ if ( iEntIndex == m_aAttachedObjectsFromServer[j] )
+ break;
+ }
+
+ if ( j == iServerCount )
+ {
+ // Ok, a previously attached object is no longer attached
+ m_aAttachedObjects[i]->SetShadowUseOtherEntity( NULL );
+ m_aAttachedObjects.Remove(i);
+ }
+ }
+
+ // Make sure newly attached entities have vertical shadows too
+ for ( i = 0; i < iServerCount; i++ )
+ {
+ C_BaseEntity *pEntity = cl_entitylist->GetEnt( m_aAttachedObjectsFromServer[i] );
+ if ( m_aAttachedObjects.Find( pEntity ) == m_aAttachedObjects.InvalidIndex() )
+ {
+ pEntity->SetShadowUseOtherEntity( this );
+ m_aAttachedObjects.AddToTail( pEntity );
+ }
+ }
+ */
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return a per-entity shadow cast direction
+//-----------------------------------------------------------------------------
+bool C_PhysMagnet::GetShadowCastDirection( Vector *pDirection, ShadowType_t shadowType ) const
+{
+ // Magnets shadow is more vertical than others
+ //Vector vecDown = g_pClientShadowMgr->GetShadowDirection() - Vector(0,0,1);
+ //VectorNormalize( vecDown );
+ //*pDirection = vecDown;
+ *pDirection = Vector(0,0,-1);
+ return true;
+} \ No newline at end of file