diff options
Diffstat (limited to 'public/haptics/haptic_msgs.cpp')
| -rw-r--r-- | public/haptics/haptic_msgs.cpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/public/haptics/haptic_msgs.cpp b/public/haptics/haptic_msgs.cpp new file mode 100644 index 0000000..57b4bed --- /dev/null +++ b/public/haptics/haptic_msgs.cpp @@ -0,0 +1,192 @@ +#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 + + |