Team Fortress 2 Source Code as on 22/4/2020
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.

175 lines
6.2 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #include "cbase.h"
  8. #include "effect_dispatch_data.h"
  9. #include "coordsize.h"
  10. #ifdef CLIENT_DLL
  11. #include "cliententitylist.h"
  12. #endif
  13. #include "qlimits.h"
  14. // memdbgon must be the last include file in a .cpp file!!!
  15. #include "tier0/memdbgon.h"
  16. #define SUBINCH_PRECISION 3
  17. #ifdef CLIENT_DLL
  18. #include "dt_recv.h"
  19. static void RecvProxy_EntIndex( const CRecvProxyData *pData, void *pStruct, void *pOut )
  20. {
  21. int nEntIndex = pData->m_Value.m_Int;
  22. ((CEffectData*)pStruct)->m_hEntity = (nEntIndex < 0) ? INVALID_EHANDLE_INDEX : ClientEntityList().EntIndexToHandle( nEntIndex );
  23. }
  24. BEGIN_RECV_TABLE_NOBASE( CEffectData, DT_EffectData )
  25. RecvPropFloat( RECVINFO( m_vOrigin[0] ) ),
  26. RecvPropFloat( RECVINFO( m_vOrigin[1] ) ),
  27. RecvPropFloat( RECVINFO( m_vOrigin[2] ) ),
  28. RecvPropFloat( RECVINFO( m_vStart[0] ) ),
  29. RecvPropFloat( RECVINFO( m_vStart[1] ) ),
  30. RecvPropFloat( RECVINFO( m_vStart[2] ) ),
  31. RecvPropQAngles( RECVINFO( m_vAngles ) ),
  32. RecvPropVector( RECVINFO( m_vNormal ) ),
  33. RecvPropInt( RECVINFO( m_fFlags ) ),
  34. RecvPropFloat( RECVINFO( m_flMagnitude ) ),
  35. RecvPropFloat( RECVINFO( m_flScale ) ),
  36. RecvPropInt( RECVINFO( m_nAttachmentIndex ) ),
  37. RecvPropIntWithMinusOneFlag( RECVINFO( m_nSurfaceProp ), RecvProxy_ShortSubOne ),
  38. RecvPropInt( RECVINFO( m_iEffectName ) ),
  39. RecvPropInt( RECVINFO( m_nMaterial ) ),
  40. RecvPropInt( RECVINFO( m_nDamageType ) ),
  41. RecvPropInt( RECVINFO( m_nHitBox ) ),
  42. RecvPropInt( "entindex", 0, SIZEOF_IGNORE, 0, RecvProxy_EntIndex ),
  43. RecvPropInt( RECVINFO( m_nColor ) ),
  44. RecvPropFloat( RECVINFO( m_flRadius ) ),
  45. RecvPropBool( RECVINFO( m_bCustomColors ) ),
  46. RecvPropVector( RECVINFO( m_CustomColors.m_vecColor1 ) ),
  47. RecvPropVector( RECVINFO( m_CustomColors.m_vecColor2 ) ),
  48. RecvPropBool( RECVINFO( m_bControlPoint1 ) ),
  49. RecvPropInt( RECVINFO( m_ControlPoint1.m_eParticleAttachment ) ),
  50. RecvPropFloat( RECVINFO( m_ControlPoint1.m_vecOffset[0] ) ),
  51. RecvPropFloat( RECVINFO( m_ControlPoint1.m_vecOffset[1] ) ),
  52. RecvPropFloat( RECVINFO( m_ControlPoint1.m_vecOffset[2] ) ),
  53. END_RECV_TABLE()
  54. #else
  55. #include "dt_send.h"
  56. BEGIN_SEND_TABLE_NOBASE( CEffectData, DT_EffectData )
  57. // Everything uses _NOCHECK here since this is not an entity and we don't need
  58. // the functionality of CNetworkVars.
  59. // Get half-inch precision here.
  60. #ifdef HL2_DLL
  61. SendPropFloat( SENDINFO_NOCHECK( m_vOrigin[0] ), COORD_INTEGER_BITS+SUBINCH_PRECISION, 0, MIN_COORD_INTEGER, MAX_COORD_INTEGER ),
  62. SendPropFloat( SENDINFO_NOCHECK( m_vOrigin[1] ), COORD_INTEGER_BITS+SUBINCH_PRECISION, 0, MIN_COORD_INTEGER, MAX_COORD_INTEGER ),
  63. SendPropFloat( SENDINFO_NOCHECK( m_vOrigin[2] ), COORD_INTEGER_BITS+SUBINCH_PRECISION, 0, MIN_COORD_INTEGER, MAX_COORD_INTEGER ),
  64. SendPropFloat( SENDINFO_NOCHECK( m_vStart[0] ), COORD_INTEGER_BITS+SUBINCH_PRECISION, 0, MIN_COORD_INTEGER, MAX_COORD_INTEGER ),
  65. SendPropFloat( SENDINFO_NOCHECK( m_vStart[1] ), COORD_INTEGER_BITS+SUBINCH_PRECISION, 0, MIN_COORD_INTEGER, MAX_COORD_INTEGER ),
  66. SendPropFloat( SENDINFO_NOCHECK( m_vStart[2] ), COORD_INTEGER_BITS+SUBINCH_PRECISION, 0, MIN_COORD_INTEGER, MAX_COORD_INTEGER ),
  67. #else
  68. SendPropFloat( SENDINFO_NOCHECK( m_vOrigin[0] ), -1, SPROP_COORD_MP_INTEGRAL ),
  69. SendPropFloat( SENDINFO_NOCHECK( m_vOrigin[1] ), -1, SPROP_COORD_MP_INTEGRAL ),
  70. SendPropFloat( SENDINFO_NOCHECK( m_vOrigin[2] ), -1, SPROP_COORD_MP_INTEGRAL ),
  71. SendPropFloat( SENDINFO_NOCHECK( m_vStart[0] ), -1, SPROP_COORD_MP_INTEGRAL ),
  72. SendPropFloat( SENDINFO_NOCHECK( m_vStart[1] ), -1, SPROP_COORD_MP_INTEGRAL ),
  73. SendPropFloat( SENDINFO_NOCHECK( m_vStart[2] ), -1, SPROP_COORD_MP_INTEGRAL ),
  74. #endif
  75. SendPropQAngles( SENDINFO_NOCHECK( m_vAngles ), 7 ),
  76. #if defined( TF_DLL )
  77. SendPropVector( SENDINFO_NOCHECK( m_vNormal ), 6, 0, -1.0f, 1.0f ),
  78. #else
  79. SendPropVector( SENDINFO_NOCHECK( m_vNormal ), 0, SPROP_NORMAL ),
  80. #endif
  81. SendPropInt( SENDINFO_NOCHECK( m_fFlags ), MAX_EFFECT_FLAG_BITS, SPROP_UNSIGNED ),
  82. SendPropFloat( SENDINFO_NOCHECK( m_flMagnitude ), 12, SPROP_ROUNDDOWN, 0.0f, 1023.0f ),
  83. SendPropFloat( SENDINFO_NOCHECK( m_flScale ), 0, SPROP_NOSCALE ),
  84. SendPropInt( SENDINFO_NOCHECK( m_nAttachmentIndex ), 5, SPROP_UNSIGNED ),
  85. SendPropIntWithMinusOneFlag( SENDINFO_NOCHECK( m_nSurfaceProp ), 8, SendProxy_ShortAddOne ),
  86. SendPropInt( SENDINFO_NOCHECK( m_iEffectName ), MAX_EFFECT_DISPATCH_STRING_BITS, SPROP_UNSIGNED ),
  87. SendPropInt( SENDINFO_NOCHECK( m_nMaterial ), MAX_MODEL_INDEX_BITS, SPROP_UNSIGNED ),
  88. SendPropInt( SENDINFO_NOCHECK( m_nDamageType ), 32, SPROP_UNSIGNED ),
  89. SendPropInt( SENDINFO_NOCHECK( m_nHitBox ), 12, SPROP_UNSIGNED ),
  90. SendPropInt( SENDINFO_NAME( m_nEntIndex, entindex ), MAX_EDICT_BITS, SPROP_UNSIGNED ),
  91. SendPropInt( SENDINFO_NOCHECK( m_nColor ), 8, SPROP_UNSIGNED ),
  92. SendPropFloat( SENDINFO_NOCHECK( m_flRadius ), 10, SPROP_ROUNDDOWN, 0.0f, 1023.0f ),
  93. SendPropBool( SENDINFO_NOCHECK( m_bCustomColors) ),
  94. SendPropVector( SENDINFO_NOCHECK( m_CustomColors.m_vecColor1 ), 8, 0, 0, 1 ),
  95. SendPropVector( SENDINFO_NOCHECK( m_CustomColors.m_vecColor2 ), 8, 0, 0, 1 ),
  96. SendPropBool( SENDINFO_NOCHECK( m_bControlPoint1) ),
  97. SendPropInt( SENDINFO_NOCHECK( m_ControlPoint1.m_eParticleAttachment ), 5, SPROP_UNSIGNED ),
  98. SendPropFloat( SENDINFO_NOCHECK( m_ControlPoint1.m_vecOffset[0] ), -1, SPROP_COORD ),
  99. SendPropFloat( SENDINFO_NOCHECK( m_ControlPoint1.m_vecOffset[1] ), -1, SPROP_COORD ),
  100. SendPropFloat( SENDINFO_NOCHECK( m_ControlPoint1.m_vecOffset[2] ), -1, SPROP_COORD ),
  101. END_SEND_TABLE()
  102. #endif
  103. #ifdef CLIENT_DLL
  104. IClientRenderable *CEffectData::GetRenderable() const
  105. {
  106. return ClientEntityList().GetClientRenderableFromHandle( m_hEntity );
  107. }
  108. C_BaseEntity *CEffectData::GetEntity() const
  109. {
  110. return ClientEntityList().GetBaseEntityFromHandle( m_hEntity );
  111. }
  112. int CEffectData::entindex() const
  113. {
  114. C_BaseEntity *pEnt = ClientEntityList().GetBaseEntityFromHandle( m_hEntity );
  115. return pEnt ? pEnt->entindex() : -1;
  116. }
  117. #endif
  118. #ifdef CLIENT_DLL
  119. bool g_bSuppressParticleEffects = false;
  120. bool SuppressingParticleEffects()
  121. {
  122. return g_bSuppressParticleEffects;
  123. }
  124. void SuppressParticleEffects( bool bSuppress )
  125. {
  126. g_bSuppressParticleEffects = bSuppress;
  127. }
  128. #endif