summaryrefslogtreecommitdiff
path: root/game/server/tf/tf_taunt_prop.cpp
blob: 8eb0fc59dd10558264a8e8938429b842801da05f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Play VCD on taunt prop
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"

#include "basecombatcharacter.h"
#include "choreoevent.h"
#include "sceneentity.h"

#include "tf_taunt_prop.h"

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

IMPLEMENT_SERVERCLASS_ST( CTFTauntProp, DT_TFTauntProp )
END_SEND_TABLE()

LINK_ENTITY_TO_CLASS( tf_taunt_prop, CTFTauntProp );

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
CTFTauntProp::CTFTauntProp()
{
	UseClientSideAnimation();
}


//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
bool CTFTauntProp::StartSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget )
{
	switch ( event->GetType() )
	{
	case CChoreoEvent::SEQUENCE:
	case CChoreoEvent::GESTURE:
	{
		// Get the (gesture) sequence.
		info->m_nSequence = LookupSequence( event->GetParameters() );
		if ( info->m_nSequence < 0 )
			return false;

		SetSequence( info->m_nSequence );
		SetPlaybackRate( 1.0f );
		SetCycle( 0 );
		ResetSequenceInfo();

		if ( IsUsingClientSideAnimation() )
		{
			ResetClientsideFrame();
		}

		return true;
	}
	default:
		return BaseClass::StartSceneEvent( info, scene, event, actor, pTarget );
	}
}


//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
bool CTFTauntProp::ProcessSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event )
{
	// Only process sequences
	if ( event->GetType() != CChoreoEvent::SEQUENCE )
		return false;

	return BaseClass::ProcessSceneEvent( info, scene, event );
}


//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
float CTFTauntProp::PlayScene( const char *pszScene, float flDelay /*= 0.0f*/, AI_Response *response /*= NULL*/, IRecipientFilter *filter /*= NULL*/ )
{
	if ( m_hScene.Get() )
	{
		StopScriptedScene( this, m_hScene );
		m_hScene = NULL;
	}

	MDLCACHE_CRITICAL_SECTION();

	return InstancedScriptedScene( this, pszScene, &m_hScene, flDelay, false, response, true, filter );
}


//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CTFTauntProp::UpdateOnRemove()
{
	if ( m_hScene.Get() )
	{
		StopScriptedScene( this, m_hScene );
		m_hScene = NULL;
	}
		
	BaseClass::UpdateOnRemove();
}