//========= 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