#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