You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
4.4 KiB
192 lines
4.4 KiB
#include "cbase.h" |
|
|
|
#ifdef CLIENT_DLL |
|
#include "tier3/tier3.h" |
|
#include "iviewrender.h" |
|
#include "inputsystem/iinputsystem.h" |
|
#include "vgui/IInputInternal.h" |
|
#include "c_basecombatweapon.h" |
|
#include "c_baseplayer.h" |
|
#include "hud_macros.h" |
|
#include "iclientvehicle.h" |
|
#include "c_prop_vehicle.h" |
|
#include "prediction.h" |
|
#include "activitylist.h" |
|
#ifdef TERROR |
|
#include "ClientTerrorPlayer.h" |
|
#endif |
|
extern vgui::IInputInternal *g_InputInternal; |
|
#else |
|
#include "usermessages.h" |
|
#endif |
|
|
|
#include "haptics/haptic_msgs.h" |
|
|
|
void RegisterHapticMessages(void) |
|
{ |
|
usermessages->Register( "SPHapWeapEvent", 4 ); |
|
usermessages->Register( "HapDmg", -1 ); |
|
usermessages->Register( "HapPunch", -1 ); |
|
usermessages->Register( "HapSetDrag", -1 ); |
|
usermessages->Register( "HapSetConst", -1 ); |
|
usermessages->Register( "HapMeleeContact", 0); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Server |
|
//----------------------------------------------------------------------------- |
|
#ifndef CLIENT_DLL |
|
|
|
void HapticMsg_SendWeaponAnim( CBasePlayer *pPlayer, int iActivity ) |
|
{ |
|
//Send the haptics message |
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
UserMessageBegin( user, "SPHapWeapEvent" ); |
|
WRITE_LONG(iActivity); |
|
MessageEnd(); |
|
} |
|
|
|
void HapticMsg_SetDrag(CBasePlayer* pPlayer, float drag) |
|
{ |
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
UserMessageBegin( user, "HapSetDrag" ); |
|
WRITE_FLOAT(drag); |
|
MessageEnd(); |
|
} |
|
|
|
void HapticMsg_SetConstantForce(CBasePlayer* pPlayer, Vector force) |
|
{ |
|
// portal does not network this. |
|
CSingleUserRecipientFilter user( pPlayer ); |
|
user.MakeReliable(); |
|
UserMessageBegin( user, "HapSetConst" ); |
|
WRITE_SHORT(force.x); |
|
WRITE_SHORT(force.y); |
|
WRITE_SHORT(force.z); |
|
MessageEnd(); |
|
} |
|
|
|
void HapticMsg_HapDmg(CBasePlayer* pPlayer, float pitch, float yaw, float dmg, float dmgType ) |
|
{ |
|
CSingleUserRecipientFilter user(pPlayer); |
|
user.MakeReliable(); |
|
UserMessageBegin(user,"HapDmg"); |
|
|
|
WRITE_FLOAT(pitch); |
|
WRITE_FLOAT(yaw); |
|
WRITE_FLOAT(dmg); |
|
WRITE_LONG(dmgType); |
|
MessageEnd(); |
|
} |
|
|
|
void HapticMsg_Punch(CBasePlayer* pPlayer, float x, float y, float z) |
|
{ |
|
CSingleUserRecipientFilter user(pPlayer); |
|
user.MakeReliable(); |
|
UserMessageBegin(user,"HapPunch"); |
|
|
|
WRITE_FLOAT(x); |
|
WRITE_FLOAT(y); |
|
WRITE_FLOAT(z); |
|
MessageEnd(); |
|
} |
|
|
|
void HapticMsg_MeleeContact(CBasePlayer* pPlayer) |
|
{ |
|
CSingleUserRecipientFilter user(pPlayer); |
|
user.MakeReliable(); |
|
UserMessageBegin(user,"HapMeleeContact"); |
|
MessageEnd(); |
|
} |
|
|
|
#endif //!CLIENT_DLL |
|
|
|
//----------------------------------------------------------------------------- |
|
// Client |
|
//----------------------------------------------------------------------------- |
|
#ifdef CLIENT_DLL |
|
void HookHapticMessages(void) |
|
{ |
|
HOOK_MESSAGE(SPHapWeapEvent); |
|
HOOK_MESSAGE(HapDmg); |
|
HOOK_MESSAGE(HapPunch); |
|
HOOK_MESSAGE(HapSetDrag); |
|
HOOK_MESSAGE(HapSetConst); |
|
HOOK_MESSAGE(HapMeleeContact); |
|
|
|
} |
|
|
|
// Defined in haptics_utils |
|
#ifdef WIN32 |
|
void HapticsHandleMsg_HapSetDrag( float drag ); |
|
void HapticsHandleMsg_HapSetConst( Vector const &constant ); |
|
void HapticsHandleMsg_SPHapWeapEvent( int iActivity ); |
|
void HapticsHandleMsg_HapPunch( QAngle const &angle ); |
|
void HapticsHandleMsg_HapDmg( float pitch, float yaw, float damage, int damageType ); |
|
void HapticsHandleMsg_HapMeleeContact(); |
|
#endif // WIN32 |
|
|
|
void __MsgFunc_HapSetDrag( bf_read &msg ) |
|
{ |
|
#ifdef WIN32 |
|
float drag = msg.ReadFloat(); |
|
HapticsHandleMsg_HapSetDrag( drag ); |
|
#endif // WIN32 |
|
} |
|
|
|
//Might be able to handle this better... |
|
void __MsgFunc_HapSetConst( bf_read &msg ) |
|
{ |
|
#ifdef WIN32 |
|
Vector constant; |
|
constant.x = msg.ReadShort(); |
|
constant.y = msg.ReadShort(); |
|
constant.z = msg.ReadShort(); |
|
|
|
HapticsHandleMsg_HapSetConst( constant ); |
|
#endif // WIN32 |
|
} |
|
|
|
void __MsgFunc_SPHapWeapEvent( bf_read &msg ) |
|
{ |
|
#ifdef WIN32 |
|
int iActivity = msg.ReadLong(); |
|
|
|
HapticsHandleMsg_SPHapWeapEvent( iActivity ); |
|
#endif // WIN32 |
|
} |
|
|
|
void __MsgFunc_HapPunch( bf_read &msg ) |
|
{ |
|
#ifdef WIN32 |
|
float x = msg.ReadFloat(); |
|
float y = msg.ReadFloat(); |
|
float z = msg.ReadFloat(); |
|
|
|
HapticsHandleMsg_HapPunch( QAngle(x,y,z) ); |
|
#endif // WIN32 |
|
} |
|
|
|
void __MsgFunc_HapDmg( bf_read &msg ) |
|
{ |
|
#ifdef WIN32 |
|
float pitch = msg.ReadFloat(); |
|
float yaw = msg.ReadFloat(); |
|
float damage = msg.ReadFloat(); |
|
int damageType = msg.ReadLong(); |
|
|
|
HapticsHandleMsg_HapDmg( pitch, yaw, damage, damageType ); |
|
#endif // WIN32 |
|
} |
|
|
|
void __MsgFunc_HapMeleeContact( bf_read &msg ) |
|
{ |
|
#ifdef WIN32 |
|
HapticsHandleMsg_HapMeleeContact(); |
|
#endif // WIN32 |
|
} |
|
#endif // CLIENT_DLL |
|
|
|
|
|
|