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.

140 lines
3.3 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose:
  4. //
  5. //=============================================================================
  6. #include "cbase.h"
  7. #include "c_dod_smokegrenade.h"
  8. #include "dod_shareddefs.h"
  9. #include "tier1/KeyValues.h"
  10. #include "toolframework_client.h"
  11. #include "fx.h"
  12. #include "view.h"
  13. #include "smoke_fog_overlay.h"
  14. IMPLEMENT_NETWORKCLASS_ALIASED( DODSmokeGrenade, DT_DODSmokeGrenade )
  15. BEGIN_RECV_TABLE(C_DODSmokeGrenade, DT_DODSmokeGrenade )
  16. RecvPropTime(RECVINFO(m_flSmokeSpawnTime)),
  17. END_NETWORK_TABLE()
  18. //-----------------------------------------------------------------------------
  19. // Purpose:
  20. //-----------------------------------------------------------------------------
  21. C_DODSmokeGrenade::C_DODSmokeGrenade( void )
  22. {
  23. }
  24. const char *C_DODSmokeGrenade::GetOverviewSpriteName( void )
  25. {
  26. const char *pszSprite = "";
  27. switch( GetTeamNumber() )
  28. {
  29. case TEAM_ALLIES:
  30. pszSprite = "sprites/minimap_icons/minimap_smoke_us";
  31. break;
  32. case TEAM_AXIS:
  33. pszSprite = "sprites/minimap_icons/minimap_smoke_ger";
  34. break;
  35. default:
  36. break;
  37. }
  38. return pszSprite;
  39. }
  40. void C_DODSmokeGrenade::OnDataChanged( DataUpdateType_t updateType )
  41. {
  42. BaseClass::OnDataChanged(updateType);
  43. if(updateType == DATA_UPDATE_CREATED )
  44. {
  45. SetNextClientThink( CLIENT_THINK_ALWAYS );
  46. }
  47. }
  48. static inline float& EngineGetSmokeFogOverlayAlpha()
  49. {
  50. return g_SmokeFogOverlayAlpha;
  51. }
  52. #define SMOKE_CLOUD_RADIUS 330
  53. #define EXPAND_TIME 2.0
  54. float C_DODSmokeGrenade::CalcSmokeCloudRadius( void )
  55. {
  56. float flLifetime = gpGlobals->curtime - m_flSmokeSpawnTime;
  57. if( flLifetime > EXPAND_TIME )
  58. flLifetime = EXPAND_TIME;
  59. float flRadius = SMOKE_CLOUD_RADIUS * (float)sin(flLifetime * M_PI * 0.5 / EXPAND_TIME);
  60. return flRadius;
  61. }
  62. float C_DODSmokeGrenade::CalcSmokeCloudAlpha( void )
  63. {
  64. float flLifetime = gpGlobals->curtime - m_flSmokeSpawnTime;
  65. //if( flLifetime > SMOKESPHERE_EXPAND_TIME )
  66. // flLifetime = SMOKESPHERE_EXPAND_TIME;
  67. const float flFadedInTime = 3;
  68. const float flStartFadingOutTime = 9;
  69. const float flEndFadingOutTime = 12;
  70. float flFadeAlpha;
  71. // Update our fade alpha.
  72. if( flLifetime < flFadedInTime )
  73. {
  74. float fadePercent = flLifetime / flFadedInTime;
  75. flFadeAlpha = SimpleSpline( fadePercent );
  76. }
  77. else if ( flLifetime > flEndFadingOutTime )
  78. {
  79. flFadeAlpha = 0.0;
  80. }
  81. else if ( flLifetime > flStartFadingOutTime )
  82. {
  83. float fadePercent = ( flLifetime - flStartFadingOutTime ) / ( flEndFadingOutTime - flStartFadingOutTime );
  84. flFadeAlpha = SimpleSpline( 1.0 - fadePercent );
  85. }
  86. else
  87. {
  88. flFadeAlpha = 1.0;
  89. }
  90. return flFadeAlpha;
  91. }
  92. // Add our influence to the global smoke fog alpha.
  93. void C_DODSmokeGrenade::ClientThink( void )
  94. {
  95. if ( m_flSmokeSpawnTime > 0 )
  96. {
  97. float flExpandRadius = CalcSmokeCloudRadius();
  98. Vector vecSmokePos = GetAbsOrigin();
  99. vecSmokePos.z += 32;
  100. float testDist = (MainViewOrigin() - vecSmokePos).Length();
  101. // The center of the smoke cloud that always gives full fog overlay
  102. float flCoreDistance = flExpandRadius * 0.3;
  103. if( testDist < flExpandRadius )
  104. {
  105. float flFadeAlpha = CalcSmokeCloudAlpha();
  106. if( testDist < flCoreDistance )
  107. {
  108. EngineGetSmokeFogOverlayAlpha() += flFadeAlpha;
  109. }
  110. else
  111. {
  112. EngineGetSmokeFogOverlayAlpha() += (1 - ( testDist - flCoreDistance ) / ( flExpandRadius - flCoreDistance ) ) * flFadeAlpha;
  113. }
  114. }
  115. }
  116. }