|
|
#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
|