105 lines
3.6 KiB
C++
105 lines
3.6 KiB
C++
#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 |