Team Fortress 2 Source Code as on 22/4/2020
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.

107 lines
2.9 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose: Play VCD on taunt prop
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #include "cbase.h"
  8. #include "basecombatcharacter.h"
  9. #include "choreoevent.h"
  10. #include "sceneentity.h"
  11. #include "tf_taunt_prop.h"
  12. // memdbgon must be the last include file in a .cpp file!!!
  13. #include "tier0/memdbgon.h"
  14. IMPLEMENT_SERVERCLASS_ST( CTFTauntProp, DT_TFTauntProp )
  15. END_SEND_TABLE()
  16. LINK_ENTITY_TO_CLASS( tf_taunt_prop, CTFTauntProp );
  17. //-----------------------------------------------------------------------------
  18. // Purpose:
  19. //-----------------------------------------------------------------------------
  20. CTFTauntProp::CTFTauntProp()
  21. {
  22. UseClientSideAnimation();
  23. }
  24. //-----------------------------------------------------------------------------
  25. // Purpose:
  26. //-----------------------------------------------------------------------------
  27. bool CTFTauntProp::StartSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event, CChoreoActor *actor, CBaseEntity *pTarget )
  28. {
  29. switch ( event->GetType() )
  30. {
  31. case CChoreoEvent::SEQUENCE:
  32. case CChoreoEvent::GESTURE:
  33. {
  34. // Get the (gesture) sequence.
  35. info->m_nSequence = LookupSequence( event->GetParameters() );
  36. if ( info->m_nSequence < 0 )
  37. return false;
  38. SetSequence( info->m_nSequence );
  39. SetPlaybackRate( 1.0f );
  40. SetCycle( 0 );
  41. ResetSequenceInfo();
  42. if ( IsUsingClientSideAnimation() )
  43. {
  44. ResetClientsideFrame();
  45. }
  46. return true;
  47. }
  48. default:
  49. return BaseClass::StartSceneEvent( info, scene, event, actor, pTarget );
  50. }
  51. }
  52. //-----------------------------------------------------------------------------
  53. // Purpose:
  54. //-----------------------------------------------------------------------------
  55. bool CTFTauntProp::ProcessSceneEvent( CSceneEventInfo *info, CChoreoScene *scene, CChoreoEvent *event )
  56. {
  57. // Only process sequences
  58. if ( event->GetType() != CChoreoEvent::SEQUENCE )
  59. return false;
  60. return BaseClass::ProcessSceneEvent( info, scene, event );
  61. }
  62. //-----------------------------------------------------------------------------
  63. // Purpose:
  64. //-----------------------------------------------------------------------------
  65. float CTFTauntProp::PlayScene( const char *pszScene, float flDelay /*= 0.0f*/, AI_Response *response /*= NULL*/, IRecipientFilter *filter /*= NULL*/ )
  66. {
  67. if ( m_hScene.Get() )
  68. {
  69. StopScriptedScene( this, m_hScene );
  70. m_hScene = NULL;
  71. }
  72. MDLCACHE_CRITICAL_SECTION();
  73. return InstancedScriptedScene( this, pszScene, &m_hScene, flDelay, false, response, true, filter );
  74. }
  75. //-----------------------------------------------------------------------------
  76. // Purpose:
  77. //-----------------------------------------------------------------------------
  78. void CTFTauntProp::UpdateOnRemove()
  79. {
  80. if ( m_hScene.Get() )
  81. {
  82. StopScriptedScene( this, m_hScene );
  83. m_hScene = NULL;
  84. }
  85. BaseClass::UpdateOnRemove();
  86. }