#ifndef HAPTIC_UTILS_H #define HAPTIC_UTILS_H #ifdef CLIENT_DLL #include "haptics/ihaptics.h" // forward decl. class C_BaseEntity; class C_BaseCombatCharacter; class C_BasePlayer; class bf_read; // use client side versions. #ifndef CBasePlayer #define CBasePlayer C_BasePlayer; #endif #ifndef CBaseCombatWeapon #define CBaseCombatWeapon C_BaseCombatWeapon #endif // stubbed version of haptics interface. Used when haptics is not available. class CHapticsStubbed : public IHaptics { public: public: // Initialization. virtual bool Initialize(IVEngineClient* newengine, IViewRender *newview, vgui::IInputInternal* newinput, CGlobalVarsBase* newgpGlobals, CreateInterfaceFn newengineFactory, void *IMEWindow, IFileSystem* filesystem, IEngineVGui* newvgui, ActivityList_IndexForName_t actIndexForName, ActivityList_NameForIndex_t actNameForIndex) {return false;}; public: // Device methods virtual bool HasDevice(){return false;}; virtual void ShutdownHaptics(){}; public: // Game input handling virtual void CalculateMove(float &forward_move, float &side_move, float delta){}; virtual void OnPlayerChanged(){} virtual void SetNavigationClass(const char *defaultNavigationName){}; virtual const char *GetNavigationClass(){ return 0; }; virtual void GameProcess(){} virtual void MenuProcess(){} public: // Effect methods virtual void ProcessHapticEvent(int numArgs, ...){} virtual void ProcessHapticWeaponActivity(const char *weapon, int activity){} virtual void HapticsPunch(float strength, const QAngle &angle){} virtual void ApplyDamageEffect(float damage, int damagetype, const Vector &angle){} virtual void UpdateAvatarVelocity(const Vector &vel){} virtual void RemoveAvatarEffect(){} virtual void SetConstantForce(const Vector &force){} virtual Vector GetConstantForce(){return Vector(0,0,0);} virtual void SetDrag(float amount){} virtual void SetShake(float scalar, float currentamount){} virtual void SetHeld(float amount){} virtual void SetMoveSurface(HapticSurfaceType_t surface){} virtual HapticSurfaceType_t GetMoveSurface(){ return HST_NONE; } virtual void SetDangling(float amount){}; public: // Notify methods virtual void LocalPlayerReset(){}; virtual void UpdatePlayerFOV(float fov){}; virtual void WorldPrecache() {}; }; #else // forward decl. class CBasePlayer; class CBaseCombatWeapon; class CTakeDamageInfo; #endif // CLIENT_DLL void HapticSendWeaponAnim(class CBaseCombatWeapon* weapon, int iActivity); void HapticSetConstantForce(class CBasePlayer* pPlayer,Vector force); void HapticSetDrag(class CBasePlayer* pPlayer, float drag); // note: does nothing on server. void HapticProcessSound(const char* soundname, int entIndex); #ifdef CLIENT_DLL void ConnectHaptics(CreateInterfaceFn appFactory); void DisconnectHaptics(); void UpdateAvatarEffect(void); void HapticsExitedVehicle(C_BaseEntity* vehicle, C_BaseCombatCharacter *pPassenger ); void HapticsEnteredVehicle(C_BaseEntity* vehicle, C_BaseCombatCharacter *pPassenger ); //bool value true if user is using a haptic device. extern ConVar hap_HasDevice; #else void HapticsDamage(CBasePlayer* pPlayer, const CTakeDamageInfo &info); void HapticPunch(CBasePlayer* pPlayer, float amount, float x, float y); void HapticMeleeContact(CBasePlayer* pPlayer); #endif #endif