You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
117 lines
3.6 KiB
117 lines
3.6 KiB
//========= 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; |
|
} |