mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 09:49:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: NPC Puppet
|
||||
//
|
||||
//=============================================================================
|
||||
|
||||
#include "cbase.h"
|
||||
#include "ai_basenpc.h"
|
||||
|
||||
// Must be the last file included
|
||||
#include "memdbgon.h"
|
||||
|
||||
class CNPC_Puppet : public CAI_BaseNPC
|
||||
{
|
||||
DECLARE_CLASS( CNPC_Puppet, CAI_BaseNPC );
|
||||
public:
|
||||
|
||||
virtual void Spawn( void );
|
||||
virtual void Precache( void );
|
||||
|
||||
void InputSetAnimationTarget( inputdata_t &inputdata );
|
||||
|
||||
private:
|
||||
|
||||
string_t m_sAnimTargetname;
|
||||
string_t m_sAnimAttachmentName;
|
||||
|
||||
CNetworkVar( EHANDLE, m_hAnimationTarget ); // NPC that will drive what animation we're playing
|
||||
CNetworkVar( int, m_nTargetAttachment ); // Attachment point to match to on the target
|
||||
|
||||
DECLARE_DATADESC();
|
||||
DECLARE_SERVERCLASS();
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( npc_puppet, CNPC_Puppet );
|
||||
|
||||
BEGIN_DATADESC( CNPC_Puppet )
|
||||
DEFINE_KEYFIELD( m_sAnimTargetname, FIELD_STRING, "animationtarget" ),
|
||||
DEFINE_KEYFIELD( m_sAnimAttachmentName, FIELD_STRING, "attachmentname" ),
|
||||
|
||||
DEFINE_FIELD( m_nTargetAttachment, FIELD_INTEGER ),
|
||||
DEFINE_FIELD( m_hAnimationTarget, FIELD_EHANDLE ),
|
||||
DEFINE_INPUTFUNC( FIELD_STRING, "SetAnimationTarget", InputSetAnimationTarget ),
|
||||
END_DATADESC()
|
||||
|
||||
IMPLEMENT_SERVERCLASS_ST( CNPC_Puppet, DT_NPC_Puppet )
|
||||
SendPropEHandle( SENDINFO( m_hAnimationTarget ) ),
|
||||
SendPropInt( SENDINFO( m_nTargetAttachment) ),
|
||||
END_SEND_TABLE()
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CNPC_Puppet::Precache( void )
|
||||
{
|
||||
BaseClass::Precache();
|
||||
PrecacheModel( STRING( GetModelName() ) );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
//-----------------------------------------------------------------------------
|
||||
void CNPC_Puppet::Spawn( void )
|
||||
{
|
||||
BaseClass::Spawn();
|
||||
|
||||
Precache();
|
||||
|
||||
SetModel( STRING( GetModelName() ) );
|
||||
|
||||
NPCInit();
|
||||
|
||||
SetHealth( 100 );
|
||||
|
||||
// Find our animation target
|
||||
CBaseEntity *pTarget = gEntList.FindEntityByName( NULL, m_sAnimTargetname );
|
||||
m_hAnimationTarget = pTarget;
|
||||
if ( pTarget )
|
||||
{
|
||||
CBaseAnimating *pAnimating = pTarget->GetBaseAnimating();
|
||||
if ( pAnimating )
|
||||
{
|
||||
m_nTargetAttachment = pAnimating->LookupAttachment( STRING( m_sAnimAttachmentName ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Always be scripted
|
||||
SetInAScript( true );
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Purpose:
|
||||
// Input : &inputdata -
|
||||
//-----------------------------------------------------------------------------
|
||||
void CNPC_Puppet::InputSetAnimationTarget( inputdata_t &inputdata )
|
||||
{
|
||||
// Take the new name
|
||||
m_sAnimTargetname = MAKE_STRING( inputdata.value.String() );
|
||||
|
||||
// Find our animation target
|
||||
CBaseEntity *pTarget = gEntList.FindEntityByName( NULL, m_sAnimTargetname );
|
||||
if ( pTarget == NULL )
|
||||
{
|
||||
Warning("Failed to find animation target %s for npc_puppet (%s)\n", STRING( m_sAnimTargetname ), STRING( GetEntityName() ) );
|
||||
return;
|
||||
}
|
||||
|
||||
m_hAnimationTarget = pTarget;
|
||||
|
||||
CBaseAnimating *pAnimating = pTarget->GetBaseAnimating();
|
||||
if ( pAnimating )
|
||||
{
|
||||
// Cache off our target attachment
|
||||
m_nTargetAttachment = pAnimating->LookupAttachment( STRING( m_sAnimAttachmentName ) );
|
||||
}
|
||||
|
||||
// Stuff us at the owner's core for visibility reasons
|
||||
SetParent( pTarget );
|
||||
SetLocalOrigin( vec3_origin );
|
||||
SetLocalAngles( vec3_angle );
|
||||
}
|
||||
Reference in New Issue
Block a user