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.

154 lines
4.0 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. //=============================================================================
  6. #include "cbase.h"
  7. #include "forcefeedback.h"
  8. #include "igamesystem.h"
  9. class CForceFeedback : public IForceFeedback, public CAutoGameSystem
  10. {
  11. public:
  12. virtual bool Init();
  13. virtual void Shutdown();
  14. // API
  15. virtual void StopAllEffects( CBasePlayer *player );
  16. virtual void StopEffect( CBasePlayer *player, FORCEFEEDBACK_t effect );
  17. virtual void StartEffect( CBasePlayer *player, FORCEFEEDBACK_t effect, const FFBaseParams_t& params );
  18. virtual void PauseAll( CBasePlayer *player );
  19. virtual void ResumeAll( CBasePlayer *player );
  20. };
  21. static CForceFeedback g_ForceFeedbackSingleton;
  22. IForceFeedback *forcefeedback = &g_ForceFeedbackSingleton;
  23. //-----------------------------------------------------------------------------
  24. // Purpose:
  25. // Output : Returns true on success, false on failure.
  26. //-----------------------------------------------------------------------------
  27. bool CForceFeedback::Init()
  28. {
  29. return true;
  30. }
  31. //-----------------------------------------------------------------------------
  32. // Purpose:
  33. //-----------------------------------------------------------------------------
  34. void CForceFeedback::Shutdown()
  35. {
  36. }
  37. //-----------------------------------------------------------------------------
  38. // Purpose:
  39. // Input : *player -
  40. //-----------------------------------------------------------------------------
  41. void CForceFeedback::StopAllEffects( CBasePlayer *player )
  42. {
  43. if ( !player )
  44. return;
  45. CSingleUserRecipientFilter user( player );
  46. UserMessageBegin( user, "ForceFeedback" );
  47. WRITE_BYTE( FFMSG_STOPALL ); // Reset effects
  48. MessageEnd();
  49. }
  50. //-----------------------------------------------------------------------------
  51. // Purpose:
  52. // Input : *player -
  53. // effect -
  54. //-----------------------------------------------------------------------------
  55. void CForceFeedback::StopEffect( CBasePlayer *player, FORCEFEEDBACK_t effect )
  56. {
  57. if ( !player )
  58. return;
  59. CSingleUserRecipientFilter user( player );
  60. UserMessageBegin( user, "ForceFeedback" );
  61. WRITE_BYTE( FFMSG_STOP ); // Reset effect
  62. WRITE_BYTE( effect );
  63. MessageEnd();
  64. }
  65. //-----------------------------------------------------------------------------
  66. // Purpose:
  67. // Input : *player -
  68. // effect -
  69. // params -
  70. //-----------------------------------------------------------------------------
  71. void CForceFeedback::StartEffect( CBasePlayer *player, FORCEFEEDBACK_t effect, const FFBaseParams_t& params )
  72. {
  73. if ( !player )
  74. {
  75. return;
  76. }
  77. CSingleUserRecipientFilter user( player );
  78. UserMessageBegin( user, "ForceFeedback" );
  79. WRITE_BYTE( FFMSG_START ); // Reset effects
  80. WRITE_BYTE( effect );
  81. // encode direction as a byte
  82. int dir = (int)( ( params.m_flDirection / 360.0f ) * 255.0f );
  83. WRITE_BYTE( dir );
  84. // encode duration as a signed int
  85. int duration = (int)params.m_flDuration * 1000.0f;
  86. WRITE_LONG( duration );
  87. // encode gain as a byte
  88. byte gain = (byte)clamp( params.m_flGain * 255.0f, 0.0f, 255.0f );
  89. WRITE_BYTE( gain );
  90. WRITE_BYTE( params.m_nPriority );
  91. WRITE_BYTE( params.m_bSolo ? 1 : 0 );
  92. MessageEnd();
  93. }
  94. //-----------------------------------------------------------------------------
  95. // Purpose:
  96. // Input : *player -
  97. //-----------------------------------------------------------------------------
  98. void CForceFeedback::PauseAll( CBasePlayer *player )
  99. {
  100. if ( !player )
  101. return;
  102. CSingleUserRecipientFilter user( player );
  103. UserMessageBegin( user, "ForceFeedback" );
  104. WRITE_BYTE( FFMSG_PAUSE ); // Pause effects
  105. MessageEnd();
  106. }
  107. //-----------------------------------------------------------------------------
  108. // Purpose:
  109. // Input : *player -
  110. //-----------------------------------------------------------------------------
  111. void CForceFeedback::ResumeAll( CBasePlayer *player )
  112. {
  113. if ( !player )
  114. return;
  115. CSingleUserRecipientFilter user( player );
  116. UserMessageBegin( user, "ForceFeedback" );
  117. WRITE_BYTE( FFMSG_RESUME ); // Resume effects
  118. MessageEnd();
  119. }