//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //============================================================================= #ifndef FORCEFEEDBACK_H #define FORCEFEEDBACK_H #ifdef _WIN32 #pragma once #endif enum { FFMSG_START = 0, FFMSG_STOP, FFMSG_STOPALL, FFMSG_PAUSE, FFMSG_RESUME }; typedef enum { FORCE_FEEDBACK_SHOT_SINGLE, FORCE_FEEDBACK_SHOT_DOUBLE, FORCE_FEEDBACK_TAKEDAMAGE, FORCE_FEEDBACK_SCREENSHAKE, FORCE_FEEDBACK_SKIDDING, FORCE_FEEDBACK_BREAKING, NUM_FORCE_FEEDBACK_PRESETS } FORCEFEEDBACK_t; class CBasePlayer; struct FFBaseParams_t { FFBaseParams_t() : m_flDirection( 0.0f ), m_flDuration( 0.0f ), m_flGain( 1.0f ), m_nPriority( 0 ), m_bSolo( false ) { } float m_flDirection; // yaw float m_flDuration; // seconds (-1 == INFINITE, 0.0 == use duration from .ffe file) float m_flGain; // 0 -> 1 global scale int m_nPriority; // Higher is more important bool m_bSolo; // Temporarily suppress all other FF effects while playing }; abstract_class IForceFeedback { public: // API virtual void StopAllEffects( CBasePlayer *player ) = 0; virtual void StopEffect( CBasePlayer *player, FORCEFEEDBACK_t effect ) = 0; virtual void StartEffect( CBasePlayer *player, FORCEFEEDBACK_t effect, const FFBaseParams_t& params ) = 0; virtual void PauseAll( CBasePlayer *player ) = 0; virtual void ResumeAll( CBasePlayer *player ) = 0; }; extern IForceFeedback *forcefeedback; #endif // FORCEFEEDBACK_H