diff options
Diffstat (limited to 'public/haptics/ihaptics.h')
| -rw-r--r-- | public/haptics/ihaptics.h | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/public/haptics/ihaptics.h b/public/haptics/ihaptics.h new file mode 100644 index 0000000..d99017b --- /dev/null +++ b/public/haptics/ihaptics.h @@ -0,0 +1,144 @@ +#ifndef HAPTICS_INTERFACE_H +#define HAPTICS_INTERFACE_H + +#ifdef GAME_DLL +#pragma warning("IHaptics.h is only for client ussage"); +#endif + +#include "tier0/platform.h" +#include "appframework/IAppSystem.h" + +#define HAPTICS_INTERFACE_VERSION "HapticsInterface001" +#define HAPTICS_DLL_NAME "haptics" + +// systems forward decl. +class IVEngineClient; +class IViewRender; +class IInputInternal; +class CGlobalVarsBase; +class IFileSystem; +class IEngineVGui; + +// vgui forward decl +namespace vgui{ + class IInputInternal; +} + +// math types forward decl +class QAngle; +class Vector; + +typedef enum { + HST_NONE = 0, + HST_ROPE, +} HapticSurfaceType_t; + +typedef int (*ActivityList_IndexForName_t)( const char *pszActivityName ); +typedef const char *(*ActivityList_NameForIndex_t)( int iActivityIndex ); +// NVNT haptic system interface declaration +abstract_class IHaptics +{ +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) = 0; + +public: // Device methods + + // returns true if there is at least one device connected. + virtual bool HasDevice() = 0; + + // closes all haptic devices and effect processing + virtual void ShutdownHaptics() = 0; + +public: // Game input handling + + // computes view angles and adjusts forward_move and side_move + virtual void CalculateMove(float &forward_move, float &side_move, float delta) = 0; + + virtual void OnPlayerChanged()=0; + + // Sets the internal navigation class. + virtual void SetNavigationClass(const char *defaultNavigationName) = 0; + + // Turns the internal navigation off. ( clears navigation class ) + inline void ClearNavigationClass(); + + // Returns the active navigation class ( if none returns NULL ) + virtual const char *GetNavigationClass() = 0; + + // Should be called by the game input class after CalculateMove (when not in menu) + virtual void GameProcess() = 0; + + // Should be called by the game input class when in a menu + virtual void MenuProcess() = 0; + + +public: // Effect methods + + // process a haptic event. + virtual void ProcessHapticEvent(int numArgs, ...) = 0; + virtual void ProcessHapticWeaponActivity(const char *weapon, int activity) = 0; + + // send a haptic punch effect + virtual void HapticsPunch(float strength, const QAngle &angle) = 0; + + // trigger a damage effect + virtual void ApplyDamageEffect(float damage, int damagetype, const Vector &angle) = 0; + + // update the avatar ( acceleration ) effect by a velocity sample + virtual void UpdateAvatarVelocity(const Vector &velocity) = 0; + + // stop processing any running avatar effects + virtual void RemoveAvatarEffect() = 0; + + // sets the device's constant force effect to force vector + virtual void SetConstantForce(const Vector &force) = 0; + + // returns the last sent constant force + virtual Vector GetConstantForce() = 0; + + // set the amount of drag (viscosity) on the haptic devices + virtual void SetDrag(float amount) = 0; + + // set the values to the screen shake effect + virtual void SetShake(float scalar, float currentamount) = 0; + + // enable/disable device position lock. + virtual void SetHeld(float amount) = 0; + + // set anchor weight mass scaler. + virtual void SetMoveSurface(HapticSurfaceType_t surface) = 0; + + virtual HapticSurfaceType_t GetMoveSurface() = 0; + + // set dangling ( being hung, holding onto ledges ) + virtual void SetDangling(float amount) = 0; + +public: // Notify methods + + // notify the haptics system that we have been respawned. + virtual void LocalPlayerReset()=0; + + // notify the haptics system of the player's field of view angle + virtual void UpdatePlayerFOV(float fov)=0; + + virtual void WorldPrecache() = 0; + +}; + +inline void IHaptics::ClearNavigationClass( void ) +{ + SetNavigationClass(0); +} + +extern IHaptics* haptics; + +#endif// HAPTICS_INTERFACE_H
\ No newline at end of file |