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.

142 lines
3.4 KiB

  1. //========= Copyright Valve Corporation, All rights reserved. ============//
  2. //
  3. // Purpose: Client side C_DODTeam class
  4. //
  5. // $NoKeywords: $
  6. //=============================================================================//
  7. #include "cbase.h"
  8. #include "engine/IEngineSound.h"
  9. #include "hud.h"
  10. #include "recvproxy.h"
  11. #include "c_dod_player.h"
  12. #include "c_dod_team.h"
  13. #include "dod_shareddefs.h"
  14. #include "c_dod_playerresource.h"
  15. // memdbgon must be the last include file in a .cpp file!!!
  16. #include "tier0/memdbgon.h"
  17. IMPLEMENT_CLIENTCLASS_DT(C_DODTeam, DT_DODTeam, CDODTeam)
  18. END_RECV_TABLE()
  19. //-----------------------------------------------------------------------------
  20. // Purpose:
  21. //-----------------------------------------------------------------------------
  22. C_DODTeam::C_DODTeam()
  23. {
  24. }
  25. //-----------------------------------------------------------------------------
  26. // Purpose:
  27. //-----------------------------------------------------------------------------
  28. C_DODTeam::~C_DODTeam()
  29. {
  30. }
  31. void C_DODTeam::AddPlayerClass( const char *szClassName )
  32. {
  33. PLAYERCLASS_FILE_INFO_HANDLE hPlayerClassInfo;
  34. if ( ReadPlayerClassDataFromFileForSlot( filesystem, szClassName, &hPlayerClassInfo, GetEncryptionKey() ) )
  35. {
  36. m_hPlayerClassInfoHandles.AddToTail( hPlayerClassInfo );
  37. }
  38. else
  39. {
  40. Assert( !"missing playerclass script file" );
  41. Msg( "Missing playerclass script file for class: %s\n", szClassName );
  42. }
  43. }
  44. const CDODPlayerClassInfo &C_DODTeam::GetPlayerClassInfo( int iPlayerClass ) const
  45. {
  46. Assert( iPlayerClass >= 0 && iPlayerClass < m_hPlayerClassInfoHandles.Count() );
  47. const FilePlayerClassInfo_t *pPlayerClassInfo = GetFilePlayerClassInfoFromHandle( m_hPlayerClassInfoHandles[iPlayerClass] );
  48. const CDODPlayerClassInfo *pDODInfo;
  49. #ifdef _DEBUG
  50. pDODInfo = dynamic_cast< const CDODPlayerClassInfo* >( pPlayerClassInfo );
  51. Assert( pDODInfo );
  52. #else
  53. pDODInfo = static_cast< const CDODPlayerClassInfo* >( pPlayerClassInfo );
  54. #endif
  55. return *pDODInfo;
  56. }
  57. bool C_DODTeam::IsClassOnTeam( const char *pszClassName, int &iClassNum ) const
  58. {
  59. iClassNum = PLAYERCLASS_UNDEFINED;
  60. // Random is always on every team
  61. if( FStrEq( pszClassName, "cls_random" ) )
  62. {
  63. iClassNum = PLAYERCLASS_RANDOM;
  64. return true;
  65. }
  66. for( int i=0;i<m_hPlayerClassInfoHandles.Count(); i++ )
  67. {
  68. FilePlayerClassInfo_t *pPlayerClassInfo = GetFilePlayerClassInfoFromHandle( m_hPlayerClassInfoHandles[i] );
  69. if( stricmp( pszClassName, pPlayerClassInfo->m_szSelectCmd ) == 0 )
  70. {
  71. iClassNum = i;
  72. return true;
  73. }
  74. }
  75. return false;
  76. }
  77. bool C_DODTeam::IsClassOnTeam( int iClassNum ) const
  78. {
  79. return ( iClassNum >= 0 && iClassNum < m_hPlayerClassInfoHandles.Count() );
  80. }
  81. int C_DODTeam::CountPlayersOfThisClass( int iPlayerClass )
  82. {
  83. int count = 0;
  84. C_DOD_PlayerResource *dod_PR = dynamic_cast<C_DOD_PlayerResource *>(g_PR);
  85. Assert( dod_PR );
  86. for ( int i=0;i<Get_Number_Players();i++ )
  87. {
  88. if ( iPlayerClass == dod_PR->GetPlayerClass(m_aPlayers[i]) )
  89. count++;
  90. }
  91. return count;
  92. }
  93. IMPLEMENT_CLIENTCLASS_DT(C_DODTeam_Allies, DT_DODTeam_Allies, CDODTeam_Allies)
  94. END_RECV_TABLE()
  95. C_DODTeam_Allies::C_DODTeam_Allies()
  96. {
  97. //parse our classes
  98. int i = 0;
  99. while( pszTeamAlliesClasses[i] != NULL )
  100. {
  101. AddPlayerClass( pszTeamAlliesClasses[i] );
  102. i++;
  103. }
  104. }
  105. IMPLEMENT_CLIENTCLASS_DT(C_DODTeam_Axis, DT_DODTeam_Axis, CDODTeam_Axis)
  106. END_RECV_TABLE()
  107. C_DODTeam_Axis::C_DODTeam_Axis()
  108. {
  109. //parse our classes
  110. int i = 0;
  111. while( pszTeamAxisClasses[i] != NULL )
  112. {
  113. AddPlayerClass( pszTeamAxisClasses[i] );
  114. i++;
  115. }
  116. }