135 lines
4.3 KiB
C++
135 lines
4.3 KiB
C++
#ifndef HAPTICS_INTERFACE_H
|
|
#define HAPTICS_INTERFACE_H
|
|
|
|
#ifdef GAME_DLL
|
|
#pragma warning("IHaptics.h is only for client ussage");
|
|
#endif
|
|
|
|
#include "appframework/IAppSystem.h"
|
|
#include "tier0/platform.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
|