diff options
Diffstat (limited to 'game/server/tf2/ragdoll_shadow.cpp')
| -rw-r--r-- | game/server/tf2/ragdoll_shadow.cpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/game/server/tf2/ragdoll_shadow.cpp b/game/server/tf2/ragdoll_shadow.cpp new file mode 100644 index 0000000..5c35c10 --- /dev/null +++ b/game/server/tf2/ragdoll_shadow.cpp @@ -0,0 +1,117 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Resource chunks +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "ragdoll_shadow.h" +#include "tf_player.h" +#include "sendproxy.h" + +// FIXME Hook up a real player standin +static char *sRagdollShadowModel = "models/player/human_commando.mdl"; + + +IMPLEMENT_SERVERCLASS_ST( CRagdollShadow, DT_RagdollShadow ) + SendPropInt( SENDINFO( m_nPlayer ), 10, SPROP_UNSIGNED ), + + SendPropExclude( "DT_BaseEntity", "m_angAbsRotation[0]" ), + SendPropExclude( "DT_BaseEntity", "m_angAbsRotation[1]" ), + SendPropExclude( "DT_BaseEntity", "m_angAbsRotation[2]" ), + +END_SEND_TABLE() + +LINK_ENTITY_TO_CLASS( ragdoll_shadow, CRagdollShadow ); +PRECACHE_REGISTER( ragdoll_shadow ); + +CRagdollShadow::CRagdollShadow( void ) +{ + m_pPlayer = NULL; + m_nPlayer = 0; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CRagdollShadow::Spawn( ) +{ + // Init value & model + if ( m_pPlayer ) + { + SetModelName( m_pPlayer->GetModelName() ); + } + else + { + SetModelName( AllocPooledString( sRagdollShadowModel ) ); + } + + BaseClass::Spawn(); + + // Create the object in the physics system + IPhysicsObject *pPhysics = VPhysicsInitNormal( SOLID_VPHYSICS, FSOLID_NOT_SOLID, false ); +// IPhysicsObject *pPhysics = VPhysicsInitNormal( SOLID_VPHYSICS, 0, false ); + + // disable physics sounds on this object + pPhysics->SetMaterialIndex( physprops->GetSurfaceIndex("default_silent") ); + + UTIL_SetSize( this, Vector(-36,-36, 0), Vector(36,36,72) ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : **ppSendTable - +// *recipient - +// *pvs - +// clientArea - +// Output : Returns true on success, false on failure. +//----------------------------------------------------------------------------- +int CRagdollShadow::ShouldTransmit( const CCheckTransmitInfo *pInfo ) +{ + // Always send to local player + if ( Instance( pInfo->m_pClientEnt ) == GetOwnerEntity() ) + return FL_EDICT_ALWAYS; + + return BaseClass::ShouldTransmit( pInfo ); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CRagdollShadow::Precache( void ) +{ + PrecacheModel( sRagdollShadowModel ); +} + +//----------------------------------------------------------------------------- +// Purpose: Create a resource chunk +//----------------------------------------------------------------------------- +CRagdollShadow *CRagdollShadow::Create( CBaseTFPlayer *player, const Vector& force ) +{ + CRagdollShadow *pRagdollShadow = (CRagdollShadow*)CreateEntityByName("ragdoll_shadow"); + + UTIL_SetOrigin( pRagdollShadow, player->GetAbsOrigin() ); + + pRagdollShadow->m_pPlayer = player; + pRagdollShadow->m_nPlayer = player->entindex(); + + pRagdollShadow->Spawn(); + pRagdollShadow->SetAbsVelocity( force ); + pRagdollShadow->SetLocalAngles( vec3_angle ); + pRagdollShadow->SetLocalAngularVelocity( RandomAngle( -100, 100 ) ); + + //pRagdollShadow->AddEffects( EF_NODRAW ); + pRagdollShadow->AddEffects( EF_NOSHADOW ); + + pRagdollShadow->m_lifeState = LIFE_DYING; + + IPhysicsObject *pPhysicsObject = pRagdollShadow->VPhysicsGetObject(); + if ( pPhysicsObject ) + { + AngularImpulse tmp; + QAngleToAngularImpulse( pRagdollShadow->GetLocalAngularVelocity(), tmp ); + pPhysicsObject->AddVelocity( &pRagdollShadow->GetAbsVelocity(), &tmp ); + } + + return pRagdollShadow; +}
\ No newline at end of file |