mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-19 20:16:10 +08:00
First version of the SOurce SDK 2013
This commit is contained in:
134
game/client/c_physmagnet.cpp
Normal file
134
game/client/c_physmagnet.cpp
Normal file
@ -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;
|
||||
}
|
Reference in New Issue
Block a user